最近做了一个关于FPGA的项目后,读了《FPGA原理和结构》这本书。主要梗概内容和想法如下。
第一章:理解FPGA所需要的基础知识
理解FPGA我们需要数电的组合逻辑、时序逻辑等内容的知识。FPGA(20世纪70年度发展起来的,因为其具有通过组合使用器件内大量的逻辑块来实现所需的电路,比以往侠义的PLD设计自由度更高,并且有近似于门阵列的构造),其从“百家争鸣”到“合并‘最后趋于稳定的”巨头垄断和行业洗牌“阶段,现在主要由Xilinx,Altera,Lattice和Microsemi垄断,前二者占据了市场约90%的份额,。然后书中介绍了后面文中需要提及的FPGA专业术语的缩写和解释。比如:LUT(Look-up Table,查找表),通过将函数的真值表存放在少量内存单元中来实现组合逻辑电路功能的模块称为LUT。
第二章:FPGA概要
- 对于FPGA的构成要素,如图:
除了上面的要素外,还有一些必要电路,如时钟树,配置链、测试电路等,商用的FPGA还有处理器,块存储器、乘法器等固定功能的硬核电路。
- 在可编程技术(FPGA通过可编程的开关来控制电路结构)中,目前有三种技术,如图:
尽管静态存储器和其他编程技术相比有不少缺点,但仅”能够应用最先进的CMOS工艺“就能屏蔽其他所有的缺点,所有目前静态存储器的FPGA是先进CMOS制程的制程驱动产品。
- 接着以表决电路为例,我们可以看到FPGA的电路实现原理:
其中最重要的就是实现逻辑的可编程逻辑块,主要的方式为乘积项(利用可编程的AND阵列和OR阵列)、查找表(最为常用)、其他逻辑实现(比如数据选择方式)
第三章:FPGA的结构
- FPGA由三大要素构成:
1)提供外部接口的可编程输入/输出要素
2)实现逻辑电路需求的可编程逻辑要素
3)连接前两种要素的可编程布线要素(PS:从第二章的表决电路图也可以看出)
此外,为了提高运算性能,FPGA上还会嵌入其他硬件电路模块,比如DSP、嵌入式内存以及生成时钟用的PLL或DLL。
岛型FPGA如如下图所示:
- 接下来介绍FPGA结构中的查找表、布线线段、开关块、IO块、PLL和DLL等不同的构造选择等。
比如:
- 增加逻辑每个逻辑块的功能,就可以以更少的逻辑块实现电路,但是逻辑块面积和输入/输出会增大(需要考虑面积、速度和内部延迟等的平衡)
- 在布线架构中,需要确定逻辑块和布线通道间的开关布置,以及布线的线段长度。比如电路延迟影响大的是因为最近的制程中,布线延迟比逻辑延迟占比更大,还需要考虑速度,功耗约束等等因素。
- 开关块的拓扑有不相交型(赛灵思型)、通用型和威尔顿型
- I/O块(近几年结构基本相同):
- 硬宏:随着半导体集成度的提升和FPGA规模的增大,需要将通用接口电路等硬件模块抽象出来,作为专用硬件嵌入FPGA芯片。
上图为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)
鉴相器:比较时钟的相位差
VCO(voltage-controlled oscillator,压控振荡器):如果时钟相同,则维持VCO电电压;如果不一致就需要通过控制电路对VCO电压进行调整:VCO主频过高则降低电压,反之则提升电压。
DLL与PLL最大的不同就是没有VCO,通过调整基准时钟到受控时钟的延迟来实现。前者可以消除时钟偏移,稳定性好,不容易积累相位误差。然而PLL时钟合成的自由度更高,所以目前采用PLL的FPGA架构为主流。
第四章:设计流程和工具
大致和平时利用FPGA工具链开发时的流程差不多。其中值得一提的有:
- HSL(High Level Synthesis,高层次综合)设计:最近传统的数字电路设计方式是绘制基于AND、OR等逻辑门的电路图,而近些年使用RTL描述成为主流。这些方式虽可以让开发者掌握电路的实现细节并有针对地实施优化,但设计时间长,且容易引入人为的设计错误。因此更高抽象的行为(也成为高层次综合)描述的开发电路技术历经多年发展,现在已经进入实用化阶段。
行为综合把变量映射为寄存器实例、把数组映射为内存实例、把函数映射为电路模块,然后顺序、分支、循环、函数调用等流程控制用状态机实现。
- 基于IP的设计方法
随着数字电路的系统规模不断增大,开发周期、开发成本高成为了不可忽视的问题。实际系统中像接口、外围设备控制、通信、加密、压缩、图像处理等各式各样的设计开发都是通用的,通过高效地重复利用成品模块就可以减轻开发周期、成本上的问题。这种可以通用和重复使用的设计资产被称为IP(也可以叫做IP模块、IP核、IP宏)。
例如FPGA内部集成的内存、运算块、PLL、高速收发器等模块。在电路代码中将IP作为模块实例化后,再和其他模块连接就可以了。
- 硬核处理器和软核处理器
第五章:设计原理
EDA(Electronic Design Automation,电子设计自动化)是充分发挥LSI性能的关键技术理论上,一款FPGA所能达到的性能上限很大程度上取决于器件的架构和EDA工具。就如汽车,无论引擎(制程)多么强劲,都需要配合适当的车体(框架)和驾驶技术(EDA工具)才能发挥出极限速度。
器件上查找表的输入数是既定的(查找表能实现输入数不大于自己的任意逻辑),而FPGA的设计就是要从目标电路的逻辑函数中不断分离出既定输入数之内的逻辑,并将其映射到查找表上。然后将这些查找表通过布线连接,就可以在FPGA上实现目标电路。
FPGA和ASIC的区别在于,ASIC通过组合使用标准单元库中的逻辑电路,而FPGA则使用统一构造的查找表。
-
工艺映射:指不依赖于任何工艺的门级网表转换为由特定FPGA逻辑单元(由查找表或MUX等逻辑电路实现的FPGA上的最小逻辑单位)所表示的网表的过程。
-
逻辑打包:主流的FPGA逻辑块都具有多个查找表,因此将查找表高效地打包到逻辑块的过程是不可或缺的。要点:
- 逻辑块内部布线(布局布线)和逻辑块外部布线(布线通道的布线)延迟相差很大。
- 如果逻辑块中有查找表空闲,资源使用率就会降低(增加逻辑块的使用量),因此要尽量在每个逻辑块内填装更多的逻辑。
但是按照上述优化时,无法对延迟进行优化。书中又介绍了一些其他的 方法。
- 布局布线:FPGA设计流程的最后一个步骤---在物理上确定逻辑块的位置和信号连接路径。一般来说首先会确定逻辑块的布局,然后再对逻辑块的连线进行布线。
比如多伦多大学开发的、在学术界被广泛应用的布局布线工具(VPR,versatile place and route)
- 低功耗设计工具
在FPGA技术面临的众多挑战中,功耗过高是影响嵌入式SoC等器件的重要因素,因此在工艺映射、逻辑打包到布局布线的过程中,都进行了降低功耗的设计方法和相关研究。
本章对FPGA设计工具的原理和发展过程进行简单的介绍。每个研究都以最优化的延迟、面积和功耗为目的,然而每个设计步骤达到最优化不意味着最终电路为最优化,各个设计过程之间还需要配合。
第六章:硬件算法
这章主要介绍适合硬件实现的处理方法,以及将这些方法具象化的硬件模型。比如流水线结构、并行计算、数据流机、细胞自动机、模式匹配等,这部分我大概浏览了下,比较考验数学功底
标签:逻辑,FPGA,读书笔记,电路,布线,模块,原理,时钟 From: https://www.cnblogs.com/lgziyan/p/17933478.html