《FPGA原理和结构》——读书笔记

发布时间 2023-12-28 20:13:22作者: nanozy

最近做了一个关于FPGA的项目后,读了《FPGA原理和结构》这本书。主要梗概内容和想法如下。

第一章:理解FPGA所需要的基础知识

理解FPGA我们需要数电的组合逻辑、时序逻辑等内容的知识。FPGA(20世纪70年度发展起来的,因为其具有通过组合使用器件内大量的逻辑块来实现所需的电路,比以往侠义的PLD设计自由度更高,并且有近似于门阵列的构造),其从“百家争鸣”到“合并‘最后趋于稳定的”巨头垄断和行业洗牌“阶段,现在主要由Xilinx,Altera,Lattice和Microsemi垄断,前二者占据了市场约90%的份额,。然后书中介绍了后面文中需要提及的FPGA专业术语的缩写和解释。比如:LUT(Look-up Table,查找表),通过将函数的真值表存放在少量内存单元中来实现组合逻辑电路功能的模块称为LUT。

第二章:FPGA概要

  1. 对于FPGA的构成要素,如图:

image-20230523222113213

除了上面的要素外,还有一些必要电路,如时钟树,配置链、测试电路等,商用的FPGA还有处理器,块存储器、乘法器等固定功能的硬核电路。

  1. 在可编程技术(FPGA通过可编程的开关来控制电路结构)中,目前有三种技术,如图:

image-20230523222429536

尽管静态存储器和其他编程技术相比有不少缺点,但仅”能够应用最先进的CMOS工艺“就能屏蔽其他所有的缺点,所有目前静态存储器的FPGA是先进CMOS制程的制程驱动产品。

  1. 接着以表决电路为例,我们可以看到FPGA的电路实现原理:

image-20230524141703051

image-20230524141856230

其中最重要的就是实现逻辑的可编程逻辑块,主要的方式为乘积项(利用可编程的AND阵列和OR阵列)、查找表(最为常用)、其他逻辑实现(比如数据选择方式)

image-20230524143540978

image-20230524143556946

第三章:FPGA的结构

  1. FPGA由三大要素构成:

1)提供外部接口的可编程输入/输出要素

2)实现逻辑电路需求的可编程逻辑要素

3)连接前两种要素的可编程布线要素(PS:从第二章的表决电路图也可以看出)

此外,为了提高运算性能,FPGA上还会嵌入其他硬件电路模块,比如DSP、嵌入式内存以及生成时钟用的PLL或DLL。

岛型FPGA如如下图所示:

image-20230524145042039

  1. 接下来介绍FPGA结构中的查找表、布线线段、开关块、IO块、PLL和DLL等不同的构造选择等。

比如:

  • 增加逻辑每个逻辑块的功能,就可以以更少的逻辑块实现电路,但是逻辑块面积和输入/输出会增大(需要考虑面积、速度和内部延迟等的平衡)
  • 在布线架构中,需要确定逻辑块和布线通道间的开关布置,以及布线的线段长度。比如电路延迟影响大的是因为最近的制程中,布线延迟比逻辑延迟占比更大,还需要考虑速度,功耗约束等等因素。
  • 开关块的拓扑有不相交型(赛灵思型)、通用型和威尔顿型
  • I/O块(近几年结构基本相同):

image-20230524151020495

  • 硬宏:随着半导体集成度的提升和FPGA规模的增大,需要将通用接口电路等硬件模块抽象出来,作为专用硬件嵌入FPGA芯片。

image-20230524151947629

上图为Zynq-7000的硬件架构,分为两部分:

1)处理器部

搭载两颗ARM Cortex A9核心的多核处理器,且外部存储器接口和各种输入/输出接口的控制器也都硬宏化,基于AMBA协议的片上连接标准和处理器相连。

2)可编程逻辑部

和普通的FPGA相同,由基于查找表的逻辑块、DSP块、嵌入式存储器等组成,只要用户遵从标准设计电路接口,就可以将编程逻辑上电 用户电路连接到AMBA交换模块上,然后再更硬核处理器相连。

  • JTAG(Joint Test Action Group)接口:在开发和调试FPGA电路的时候,需要从开发所使用的上位机频繁地重写FPGA,大多数商用FPGA都支持通过JTAG接口进行配置。值得一提的时,在工程中我们常用的电路调试模块,通常在运行时需要将观测信号引出到输出引脚,再在输出引脚处连接观测装置,整个过程比较繁琐。-------->FPGA厂商优化措施:先将需要观测的信号的变化写入嵌入式存储器,再通过JTAG读取上位机,然后就能直观地看到信号波形。这样就实现了虚拟的逻辑分析仪功能。

  • PLL(Phase Locked Loop)&DLL(Delay Locked Loop)

image-20230524155410826

鉴相器:比较时钟的相位差

VCO(voltage-controlled oscillator,压控振荡器):如果时钟相同,则维持VCO电电压;如果不一致就需要通过控制电路对VCO电压进行调整:VCO主频过高则降低电压,反之则提升电压。

image-20230524160155349

DLL与PLL最大的不同就是没有VCO,通过调整基准时钟到受控时钟的延迟来实现。前者可以消除时钟偏移,稳定性好,不容易积累相位误差。然而PLL时钟合成的自由度更高,所以目前采用PLL的FPGA架构为主流。

第四章:设计流程和工具

image-20230524162145229

image-20230524162155342

大致和平时利用FPGA工具链开发时的流程差不多。其中值得一提的有:

  1. HSL(High Level Synthesis,高层次综合)设计:最近传统的数字电路设计方式是绘制基于AND、OR等逻辑门的电路图,而近些年使用RTL描述成为主流。这些方式虽可以让开发者掌握电路的实现细节并有针对地实施优化,但设计时间长,且容易引入人为的设计错误。因此更高抽象的行为(也成为高层次综合)描述的开发电路技术历经多年发展,现在已经进入实用化阶段。

image-20230524163853945

行为综合把变量映射为寄存器实例、把数组映射为内存实例、把函数映射为电路模块,然后顺序、分支、循环、函数调用等流程控制用状态机实现。

image-20230524164438326

  1. 基于IP的设计方法

随着数字电路的系统规模不断增大,开发周期、开发成本高成为了不可忽视的问题。实际系统中像接口、外围设备控制、通信、加密、压缩、图像处理等各式各样的设计开发都是通用的,通过高效地重复利用成品模块就可以减轻开发周期、成本上的问题。这种可以通用和重复使用的设计资产被称为IP(也可以叫做IP模块、IP核、IP宏)。

例如FPGA内部集成的内存、运算块、PLL、高速收发器等模块。在电路代码中将IP作为模块实例化后,再和其他模块连接就可以了。

image-20230524184128334

  1. 硬核处理器和软核处理器

image-20230524184350336

第五章:设计原理

EDA(Electronic Design Automation,电子设计自动化)是充分发挥LSI性能的关键技术理论上,一款FPGA所能达到的性能上限很大程度上取决于器件的架构和EDA工具。就如汽车,无论引擎(制程)多么强劲,都需要配合适当的车体(框架)和驾驶技术(EDA工具)才能发挥出极限速度。

image-20230524190643715

器件上查找表的输入数是既定的(查找表能实现输入数不大于自己的任意逻辑),而FPGA的设计就是要从目标电路的逻辑函数中不断分离出既定输入数之内的逻辑,并将其映射到查找表上。然后将这些查找表通过布线连接,就可以在FPGA上实现目标电路。

FPGA和ASIC的区别在于,ASIC通过组合使用标准单元库中的逻辑电路,而FPGA则使用统一构造的查找表。

  1. 工艺映射:指不依赖于任何工艺的门级网表转换为由特定FPGA逻辑单元(由查找表或MUX等逻辑电路实现的FPGA上的最小逻辑单位)所表示的网表的过程。

  2. 逻辑打包:主流的FPGA逻辑块都具有多个查找表,因此将查找表高效地打包到逻辑块的过程是不可或缺的。要点:

  • 逻辑块内部布线(布局布线)和逻辑块外部布线(布线通道的布线)延迟相差很大。
  • 如果逻辑块中有查找表空闲,资源使用率就会降低(增加逻辑块的使用量),因此要尽量在每个逻辑块内填装更多的逻辑。

但是按照上述优化时,无法对延迟进行优化。书中又介绍了一些其他的 方法。

  1. 布局布线:FPGA设计流程的最后一个步骤---在物理上确定逻辑块的位置和信号连接路径。一般来说首先会确定逻辑块的布局,然后再对逻辑块的连线进行布线。

比如多伦多大学开发的、在学术界被广泛应用的布局布线工具(VPR,versatile place and route)

image-20230524192919485

  1. 低功耗设计工具

在FPGA技术面临的众多挑战中,功耗过高是影响嵌入式SoC等器件的重要因素,因此在工艺映射、逻辑打包到布局布线的过程中,都进行了降低功耗的设计方法和相关研究。

image-20230524193353274

本章对FPGA设计工具的原理和发展过程进行简单的介绍。每个研究都以最优化的延迟、面积和功耗为目的,然而每个设计步骤达到最优化不意味着最终电路为最优化,各个设计过程之间还需要配合。

第六章:硬件算法

这章主要介绍适合硬件实现的处理方法,以及将这些方法具象化的硬件模型。比如流水线结构、并行计算、数据流机、细胞自动机、模式匹配等,这部分我大概浏览了下,比较考验数学功底?,以后有需要再细看吧。

第七章:PLD/FPGA应用案例

image-20230524194952508

具体不做太多介绍,比较有意思的是FPGA在金融市场的运用。由于股票市场的高频交易(HFT)正在普及开来,决策时间必须在数us到数百us。

image-20230524195634864

难怪我在招聘软件上看到金融理财类公司也在招聘FPGA工程师?。为了提高创造巨额财富系统的相对速度,大量研究人员、技术开发人员进行着没有终点的速度竞赛。

第八章:新器件与新架构

  1. 粗粒度可重构架构

FPGA作为逻辑电路的仿真器件,使用查找表阵列来实现任意逻辑门电路是很自然的。然而,作为可重构计算器件,查找表虽然具备足够的自由度可以组合构成各种运算器,但实现的效率并不高。针对这个问题,将适合加速对象计算处理的运算器按类似FPGA的结构排列所形成的一类新器件,被称为粗粒度可重构架构(Coarse Grained Reconfigurable Architechures,CGRA)

CGRA对比FPGA:

优势:

1)搭载了面向应用制定的运算器,速度快,面积小(单位硅晶片上实现更大的并行运算处理)等优势

2)配置信息少

3)和传统软件开发方式兼容度高

劣势:

1)面向特定领域架构失去了自由度,通用性不如FPGA

2)基于FPGA的可重构计算的一个优势是可以通过实现专用硬件来获取比软件处理更高的性能和更低的功耗

3)CGRA 的粗粒度架构上有着种种的限制,在架构设计时需要慎重考虑才能不损失硬件的高速、低功耗优势。

基于上述原因,多数CGRA架构的设计目标并不是要替代FPGA,而是作为加速器和CPU紧密结合,为CPU加速一部分运算处理。

  1. 动态重配置结构

所要实现的计算处理电路无法全部都加载到FPGA时怎么办? 然而面向计算应用时,软件所期待的加速器应该可以自由处理各种规模的计算。

image-20230524202501584

  1. 异步FPGA

近些年,伴随着集成电路的微缩化和大规模化进程,同步式电路的一些问题也显现出来。在同步电路中寄存器都和共同的控制信号——时钟信号相连接。各寄存器都与时钟的上升沿同步读取输入,输出经过逻辑电路处理再成为下一级寄存器的输人。和一般的ASIC相比,FPGA芯片尺寸大、寄存器数量多,时钟网络的寄生电容也较大。此外,为了减小时钟偏移以须插入时钟缓冲器。因此产生了时钟网络自身耗电增大、时钟网络的偏移限制了性能的提升等问题。另外,从功耗角度,FPGA对比ASIC无法使用时钟门控(模块空闲时停止提供时钟)和电源门控技术(模块空闲时停止提供电源)。

异步电路:

image-20230524203239045

运算模块通过握手实现数据传输。首先发送模块发送数据和数据请求信号。接收方模块接收完数据后,向发送方发送完成信号。发送方模块接收到完成信号,照样同样的步骤发送新数据。

优点:

电路空闲时无动态功耗;峰值功率、电流低;电磁波辐射较小

缺点:

比同步电路使用电路面积、晶体管更多。(没有十全十美啊?)

  1. 3D-FPGA

image-20230524203924387

有可能改善电路速度,缩短布线长度,但需要解决垂直布线技术的成本和可靠性,而且还需要考虑有效的散热架构。

  1. 高速串行I/O

Xilinx和Altera不断将更高速率的串行通信I/O集成到自家的FPGA产品中,因此FPGA的通信性能得到了飞跃的提升。

  1. 光可编程架构

image-20230524204500020

基于光信号的编程方式和普通的FPGA大不相同。首先其在全息存储器上保存多个电路信息,这些电路信息可以通过激光阵寻址选择,以二维衍射图面的形式读取出来。衍射图面可被光敏二极管读取,再串行传输到FPGA进行编程。光可编程架构的特点是利用全息存储器容量大的特性,可以保存多个电路的配置信息,并且能够在16~20us内快速完成FPGA编程。

尽管光学器件还未普及,但光学技术和集成电路技术相结合的方式,也许可以解决集成电路行业难以克服的困难和问题。

结尾

没有十全十美,只有日臻完善,整体优化方为上策。FPGA是这样,生活亦如此。?