目前主流的FPGA都是基于查找表(Look up table,LUT)技术的,同时整合了常用功能例如用于数据存储的RAM/ROM、时钟管理功能和DSP等硬IP模块。
FPGA内部结构如图所示:(Xilinx)
FPGA主要由6部分组成:分别是可编程输入输出单元(IOB)、可配置逻辑块(CLB)、数字时钟管理模块(DCM)、内嵌的块RAM(BRAM)、丰富的布线资源以及内嵌的专用硬IP。
1.可编程输入输出单元(IOB)
可编程输入输出单元是FPGA与外界电路的接口,用于在不同的电气特性下完成对输入输出信号的驱动与匹配要求,其结构如下图所示:
FPGA内部的IOB是按组分类的,每组IOB能够独立的支持不同的IO标准,软件可以通过灵活的配置,来适应不同的电气标准与IO引脚物理特性,也可以调整物理驱动电流的大小,同时可以改变上下拉电阻的值。外部输入信号可以通过IOB的存储单元输入FPGA内部,也可以直接输入到FPGA内部。
为了便于管理和适应多种电器标准,FPGA的IOB被划分成了多个组(Bank),每个Bank的接口标准由其接口电压Vcco决定,一个Bank只能有一种Vcco,但不同的Bank的Vcco可以不同。只有相同电器标准的接口才能连接在一起。
2.可配置逻辑块(CLB)
CLB是FPGA内的基本逻辑单元,CLB的数量与FPGA规模与类型相关。
每一个CLB都包含一个可配置的开关矩阵,该矩阵由4个或6个输入模块、多路复用器和触发器组成。可以对开关矩阵进行配置以实现组合逻辑、移位寄存器和RAM等功能。
在Xlinx的FPGA中,CLB是由2个相同的Slice和附加逻辑组成,典型CLB图片如图所示:
每个Slice不仅可以配置实现组合逻辑、时序逻辑,还可以配置成分布式RAM和分布式ROM。
在Xilinx FPGA中,Slice是基本逻辑单位,1个Slice是由2个4输入函数、进位逻辑、算术逻辑、存储逻辑和函数复用器组成。典型的4输入Slice结构如下图所示:
Slice中的输入函数被称为LUT,LUT通常有4输入和6输入两种。
算术逻辑包括一个异或门(XORG)和一个专用与门(MULTAND)。一个异或门可以使一个Slice实现2bit全加操作,专用与门用于提高乘法器的效率。进位控制逻辑由专用进位信号和函数复用器(MUXC)组成,用于实现快速的算数加减法操作。4输入函数发生器用于实现4输入LUT、分布式RAM或16bit的移位寄存器;进位控制逻辑包括两条快速进位链,用于提高CLB的处理速度。
3.数字时钟管理模块(DCM)
时钟管理模块用于生成用户所要求的稳定时钟信号,此工作主要由锁相环(PLL)完成。锁相环能够提供精确的时钟综合,并且能够降低抖动并实现过滤功能。内嵌DM主要是指延时锁定环(Delay Locked Loop,DLL)、锁相环(Phase Locked Loop,PLL)、DSP等处理核。
DLL和PLL具有类似的功能,可以实现时钟高精度、低抖动的倍频和分频、占空比可调整等功能。DLL结构如下图所示:
4.块RAM(BRAM)
大部分FPGA都内嵌了BRAM,可以被配置成单口RAM、双口RAM、地址存储器CAM和FIFO等常用存储结构。
5.布线资源
布线资源可以联通FPGA内部的所有的单元啊,布线的长度和工艺决定信号在布线上的驱动能力和传输速率。FPGA内部布线资源主要分为4类:第一类是全局布线资源,用于FPGA内部全局时钟和全局复位/置位的布线;第二类是长线资源,用于完成芯片Bank间的高速信号和全局信号的布线;第三类是短线资源,用于完成基本逻辑单元之间的逻辑互联与布线;第四类是分布式布线资源,用于专有时钟、复位等控制信号线。
6.专用硬IP
FPGA内部通常包含一些专用用途、功能强大的硬IP,这些IP可以提高FPGA的性能,例如专用乘法器可以提高FPGA乘法速度;集成了用于适应通信总线和接口标准的串/并收发器(SERDES)核、PCIe IP核。