FPGA相关知识点
FPGA相关知识点
-
一、FPGA内部资源
-
- 1.可编程输入/输出块(IOB):
- 2.可配置逻辑块(CLB):
- 3.数字时钟管理模块(DCM):
- 4.嵌入式块RAM(BRAM):
- 5.丰富的布线资源:
- 6.底层内嵌功能单元:
- 7.内嵌专用硬核:
-
二、FPGA与ASIC的区别
-
- 1.设计流程的区别
- 2.细说点其余的区别(Synthesis & PR)
本篇主要想记录一些关于FPGA的八股,像Verilog、STA、体系结构的问题,打算更新到其他文章中
一、FPGA内部资源
目前主流的FPGA都采用了SRAM工艺的查找表(LUT)结构,LUT本质上就是个RAM,并且整合了常用功能(如RAM、时钟管理 和DSP)的硬核(ASIC型)模块。FPGA内部组成主要有:可编程输入/输出块(IOB)、可配置逻辑块(CLB)、时钟管理、嵌入式块RAM(BRAM)、丰富的布线资源、底层内嵌功能资源、内嵌专用硬核资源等 。(这一块我被问到的很少,可能只是笔试用到过,大家可视情况快速浏览一遍或跳过)

1.可编程输入/输出块(IOB):
为了便于管理和适应多种电气标准,FPGA的IOB被划分为若干个组(bank),每组都能够独立地支持不同的I/O标准。
每个bank的接口标准由由其接口电压VCCO决定,一个bank只能有一种VCCO,但是不同的bank的VCCO可以不同。只有相同标准的端口才能连接在一起,VCCO电压相同是接口标准的基本条件。
目前,I/O口的频率也越来越高,一些高端的FPGA通过DDR寄存器技术可以支持高达2Gbps的数据速率。外部输入信号可以通过IOB模块的存储单元输入到FPGA的内部,也可以直接输入FPGA 内部。当外部输入信号经过IOB模块的存储单元输入到FPGA内部时,其保持时间(Hold Time)的要求可以降低,通常默认为0。

2.可配置逻辑块(CLB):
CLB由查找表和可编程寄存器组成,查找表(LUT)完成纯组合逻辑,内部寄存器可配置成触发器或者锁存器。在Xilinx公司的FPGA器件中,CLB由多个(一般为4个或2个)相同的Slice和附加逻辑构成。每个CLB模块不仅可以用干实现组合逻辑、时序逻辑,还可以配置为分布式 RAM和分布式ROM。

Slice:Slice是Xilinx公司定义的基本逻辑单位,,一个Slice由两个4输入的函数、进位逻辑、算术逻辑、存储逻辑和函数复用器组成。算术逻辑包括一个异或门(XORG)和一个专用与门
(MULTAND),一个异或门可以使一个Slice实现2bit全加操作,专用与门用于提高乘法器的效率进位逻辑由专用进位信号和函数复用器(MUXC)组成,用于实现快速的算术加减法操作;4输入函数发生器用于实现4输入LUT、分布式RAM或16比特移位寄存器(Virtex-5系列芯片的Slice中的两个输入函数为6输入,可以实现6输入LUT或64比特移位寄存器)(根据不同型号去看);进位逻辑包括两条快速进位链,用于提高CLB模块的处理速度。
3.数字时钟管理模块(DCM):
业内大多数FPGA均提供数字时钟管理(Xilinx的全部FPGA均具有这种特性)。Xilinx推出最先进的FPGA提供数字时钟管理和相位环路锁定。相位环路锁定能够提供精确的时钟综合,且能够降低抖动,并实现过滤功能。
4.嵌入式块RAM(BRAM):
大多数FPGA都具有内嵌的块RAM,这大大拓展了FPGA的应用范围和灵活性。块RAM可被配置为单端口RAM、双端口RAM、内容地址存储器 (CAM)以及FIFO等常用存储结构。
CAM存储器在其内部的每个存储单元中都有一个比较逻辑,写入 CAM中的数据会和内部的每一个数据进行比较,并返回与端口数据相同的所有数据的地址,因而在路由的地址交换器中有广泛的应用。除了块RAM,还可以将 FPGA中的LUT灵活地配置成RAM、ROM和FIFO等结构。在实际应用中,芯片内部块RAM的数量也是选择芯片的一个重要因素。
例如:单片块RAM的容量为18kb,即位宽为18-bit、深度为1024,可以根据需要改变其位宽和深度,但要满足两个原则:首先,修改后的容量(位宽 深度)不能大于18k比特;其次,位宽最大不能超过36比特。当然,可以将多片块RAM级联起来形成更大的RAM,此时只受限于芯片内块RAM的数量,而 不再受上面两条原则约束
5.丰富的布线资源:
布线资源连通FPGA内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA芯片内部有着丰富的布线资源,根据工艺、长度、宽度和分布位置的不同而划分为4类不同的类别。在实际中设计者不需要直接选择布线资源,布局布线器可自动地根据输入逻辑网表的拓扑结构和约束条件选择布线资源来连通各个模块单元。从本质上讲,布线资源的使用方法和设计的结果有密切、直接的关系。
- 第一类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;
- 第二类是长线资源,用以完成芯片Bank间的高速信号和第二全局时钟信号的布线;
- 第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;
- 第四类是分布式的布线资源,用于专有时钟、复位等控制信号线。
6.底层内嵌功能单元:
内嵌功能模块主要指DLL(Delay Locked Loop)、PLL(Phase Locked Loop)、DSP、DPU和CPU等软处理核(Soft Core)。现在越来越丰富的内嵌功能单元,使得单片FPGA成为了系统级的设计工具,使其具备了软硬件联合设计的能力,逐步向SOC平台过渡。
DLL和PLL具有类似的功能,可以完成时钟高精度、低抖动的倍频和分频,以及占空比调整和移相等功能。Xilinx公司生产的芯片上集成了 DLL,Altera公司的芯片集成了PLL,Lattice公司的新型芯片上同时集成了PLL和DLL。PLL 和DLL可以通过IP核生成的工具方便地进行管理和配置。
7.内嵌专用硬核:
内嵌专用硬核是相对底层嵌入的软核而言的,指FPGA处理能力强大的硬核(Hard Core),等效于ASIC电路。为了提高FPGA性能,芯片生产商在芯片内部集成了一些专用的硬核。例如:为了提高FPGA的乘法速度,主流的FPGA 中都集成了专用乘法器;为了适用通信总线与接口标准,很多高端的FPGA内部都集成了串并收发器(SERDES),可以达到数十Gbps的收发速度。 Xilinx公司的高端产品不仅集成了Power PC系列CPU,还内嵌了DSP Core模块,其相应的系统级设计工具是EDK和Platform Studio,并依此提出了片上系统(System on Chip)的概念。通过PowerPC、Miroblaze、Picoblaze等平台,能够开发标准的DSP处理器及其相关应用,达到SOC的开发目的。
(1)软核
软核在EDA设计领域指的是综合之前的寄存器传输级(RTL)模型;具体在FPGA设计中指的是对电路的硬件语言描述,包括逻辑描述、网表和帮助文档等。 软核只经过功能仿真,需要经过综合以及布局布线才能使用。其优点是灵活性高、可移植性强,允许用户自配置;缺点是对模块的预测性较低,在后续设计中存在发 生错误的可能性,有一定的设计风险。软核是IP核应用最广泛的形式。
(2)固核
固核在EDA设计领域指的是带有平面规划信息的网表;具体在FPGA设计中可以看做带有布局规划的软核,通常以RTL代码和对应具体工艺网表的混合形式提 供。将RTL描述结合具体标准单元库进行综合优化设计,形成门级网表,再通过布局布线工具即可使用。和软核相比,固核的设计灵活性稍差,但在可靠性上有较 大提高。目前,固核也是IP核的主流形式之一。
(3)硬核
硬核在EDA设计领域指经过验证的设计版图;具体在FPGA设计中指布局和工艺固定、经过前端和后端验证的设计,设计人员不能对其修改。不能修改的原因有 两个:首先是系统设计对各个模块的时序要求很严格,不允许打乱已有的物理版图;其次是保护知识产权的要求,不允许设计人员对其有任何改动。IP硬核的不许 修改特点使其复用有一定的困难,因此只能用于某些特定应用,使用范围较窄。
二、FPGA与ASIC的区别
这一块有一些在用途、成本、功耗、速度和面积 上的区别大家心里要清楚,深入一点的话就是,为什么在相同工艺条件下FPGA的功耗一般会比ASIC大?比如说时钟的主频,相同工艺ASIC自然可以更高。
此外包括在布局布线上,与ASIC相比,FPGA基于通用结构必然会有一些冗余。再细一点的话我还有被问到,既然你说FPGA会有冗余,那么在时序违例的情况下,如何在Vivado中手动调整布局布线?
1.设计流程的区别

ASIC流程设计分为前端设计,后端设计,封装测试
1、项目启动主要是算法人员,设计人员,验证人员投入,进行芯片定义。
2、复杂芯片设计和验证同步投入,根据产品需求和算法文档,分解设计规格和验证规格;
3、设计开始写详细设计文档,验证开始写验证策略,分解测试点。
4、设计进行HDL编码,做lint相关检查,提交子模块代码;验证写测试用例,搭建立好BT验证环境
5、设计开发完UT,BT,IT代码,并同步支持验证冒烟,验证进行冒烟测试和随机用例测试,补充用例测试;后端进行综合和时序分析。
6、设计进行各种质量活动,同步支EDA持验证,FPGA验证,EMU验证等;验证进行验证收敛;后端继续迭代分析,直到提交网表。
7、设计和验证共同分析覆盖率,分析ATM矩阵(需求,设计,验证一一对应),分析验证波形,功耗,面积等;所有工作做完进行TO
8、测试软件人员投入,设计编写软件指南,验证对软件指南进行EDA测试;等待回片测试,测试芯片性能。
完整的FPGA设计流程包括功能描述、电路设计与输入、功能仿真、综合优化、综合后仿真、实现与布局布线、时序仿真、板级仿真与验证、调试与加载配置。
在ASIC设计过程中,往往要用到FPGA进行原型验证。FPGA验证是进行ASIC设计的重要环节,其后,还需要引入ASIC版本源码,插入IOPAD,DFT,功耗估计和进行其它后端流程。
2.细说点其余的区别(Synthesis & PR)
对于综合过程,FPGA和ASIC来说就是最小的那个单元不一样。FPGA是做好的电路,一般顾及通用性和效能,基本电路单元就做得比较大,如LUT,就是由寄存器和与非门构成,你可能只用了其中一个与门,但是还会占用这么一个单元。对于ASIC来说,两输入的与非门,就是一个简单的门电路,甚至为了区分驱动能力 和时序特性 差异,还分了好几个等级,有的面积小,有的驱动能力强。总的来说,ASIC在面的PPA不同需求的时候的可操作手段会比较多。
在布局布线上,FPGA布线资源有限,所以需要不断地调整,在保证时序要求的情况下,把你的电路映射到其固定的资源分布图中间。ASIC的话一般是根据周边电路需求,时序要求,把你的电路放到芯片的某个位置。在摆好之后还得考虑连线是否能通,各级延时是否能满足电路的建立和保持时间要求等等。
还有就是输出,FPGA就是输出一个配置文件,告诉 FPGA 芯片该怎么样去配置其电路,使其实现预期功能。该文件可以在 FPGA 上电之后再由 PC 烧录进去,也可以保存在 Flash 里,电路上电之后自动配置。ASIC就是输出一个版图文件,告诉代工厂该怎么去腐蚀硅片,该怎么连金属等等。
当然,为了保证芯片的顺利流片,ASIC开发过程中会有各种各样的辅助手段,包括验证、可测试性设计、规则检查等等。
主要是为了准备海思秋招面试,国庆陆续补充一些知识点,后面会把自己在其他平台写的面经和考过的笔试题、手撕代码补充上来,秋招进行到后半段了,陆续收获了六七个offer,待遇还算不错,也祝大家都能找到心仪的工作~

