1.2 FPGA的结构
目前主流的FPGA仍是基于查找表技术(Look-Up-Table,LUT)的,但已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM、时钟管理和DSP)的硬IP核模块。FPGA内部结构如图1-1所示(图1-1只是一个示意图,实际上每个系列的FPGA都有相应的内部结构)。FPGA主要由6个部分组成,分别为可编程输入/输出单元(Input/Output Block,IOB)、可配置逻辑块(Configurable Logic Block,CLB)、数字时钟管理模块(Digital Clock Manager,DCM)、内嵌的块RAM(Block RAM,BRAM)、丰富的布线资源和内嵌的专用硬IP核。
图1-1 FPGA内部结构
1.2.1 可编程输入/输出单元(IOB)
可编程输入/输出单元是FPGA与外界电路的接口,用于在不同的电气特性下完成对输入/输出信号的驱动与匹配要求,其结构如图1-2所示。
FPGA内的IOB是按组分类的,每组IOB都能够独立地支持不同的I/O标准。通过软件的灵活设置,既可以适应不同的电气标准与I/O引脚物理特性,也可以调整驱动电流的大小,还可以改变上、下拉电阻的阻值。目前,I/O引脚的工作频率越来越高,一些高端的FPGA通过DDR技术可以支持高达2 Gbps的数据传输速率。外部输入信号既可以通过IOB的存储单元输入FPGA内部,也可以直接输入FPGA内部。为了便于管理和适应多种电气标准,FPGA的IOB被划分为若干个组(Bank),每个Bank的接口标准由其接口电压VCCO决定,一个Bank只能有一种VCCO,不同Bank的VCCO可以不同。只有相同电气标准的接口才能连接在一起,VCCO电压相同是接口标准化的基本条件。
图1-2 FPGA的IOB结构
1.2.2 可配置逻辑块(CLB)
CLB是FPGA内的基本逻辑单元。CLB的实际数量和特性因FPGA规模与类型的不同而不同,但每个CLB都包含一个可配置的开关矩阵(Switch Matrix),该矩阵由4或6个输入模块、多路复用器和触发器组成。开关矩阵是高度灵活的,可以对其进行配置以实现组合逻辑、移位寄存器或RAM等功能。在Xilinx公司的FPGA中,CLB由多个(一般为4个或2个)相同的Slice和附加逻辑构成。典型的CLB结构如图1-3所示。每个CLB模块不仅可以用于实现组合逻辑、时序逻辑,还可以配置为分布式RAM和分布式ROM。
图1-3 典型的CLB结构
Slice是Xilinx公司定义的基本逻辑单位,1个Slice一般由2个4输入函数、进位逻辑、算术逻辑、存储逻辑和函数复用器组成。典型的4输入Slice结构如图1-4所示。Slice中的4输入函数也称为LUT(Look-Up-Table,查找表)结构。在Xilinx公司的FPGA中,不同系列FPGA的Slice结构不完全相同,一些FPGA的Slice中LUT的输入个数为6个,这样可以实现更强的逻辑运算能力。算术逻辑包括一个异或门(XORG)和一个专用与门(MULTAND)。一个异或门可以使一个Slice实现2 bit的全加操作,专用与门用于提高乘法器的效率。进位控制逻辑由专用进位信号和函数复用器(MUXC)组成,用于实现快速的算术加减法操作。4输入函数发生器用于实现4输入LUT、分布式RAM或16 bit的移位寄存器;进位控制逻辑包括两条快速进位链,用于提高CLB的处理速度。
图1-4 典型的4输入Slice结构
1.2.3 数字时钟管理模块(DCM)
业内大多数FPGA均提供数字时钟管理模块,用于生成用户所要求的稳定时钟信号,主要由锁相环完成。锁相环能够提供精确的时钟综合,且能够降低抖动,并实现过滤功能。内嵌DCM主要指延时锁定环(Delay Locked Loop,DLL)、锁相环(Phase Locked Loop,PLL)、DSP等处理核。现在,越来越丰富的内嵌功能单元使得单片FPGA成为系统级的设计工具,使其具备了软硬件联合设计的能力,并逐步向SOC过渡。DLL和PLL具有类似的功能,可以完成时钟高精度、低抖动的倍频和分频,以及占空比可调整和移相等功能。Xilinx公司的FPGA集成了DCM和DLL,Altera公司的FPGA集成了PLL,Lattice公司的FPGA同时集成了PLL和DLL。PLL和DLL可以通过IP核生成工具来进行管理和设置。DLL的结构如图1-5所示。
图1-5 DLL的结构
1.2.4 块RAM(BRAM)
大多数FPGA都具有内嵌的块RAM(BRAM),这大大拓展了FPGA的应用范围和灵活性。BRAM可被配置为单端口RAM、双端口RAM、地址存储器(CAM)和FIFO等常用存储结构。CAM内部的每个存储单元都有一个比较逻辑,写入CAM的数据会和内部的数据进行比较,并返回与端口数据相同的所有数据的地址。除了BRAM,还可以将FPGA中的LUT灵活地配置成RAM、ROM和FIFO等结构。在实际应用中,FPGA内部的BRAM数量是选择FPGA的一个重要因素。
1.2.5 布线资源
布线资源可以连通FPGA内部的所有单元,而布线的长度和工艺决定着信号在布线上的驱动能力和传输速率。FPGA内部有着丰富的布线资源,根据布线的工艺、长度、宽度和分布位置的不同,布线资源可分为4类:第一类是全局布线资源,用于FPGA内部全局时钟和全局复位/置位的布线;第二类是长线资源,用以完成芯片Bank间的高速信号和全局时钟信号的布线;第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;第四类是分布式布线资源,用于专有时钟、复位等控制信号线。
在实际工程设计中,工程师不需要直接选择布线资源,布局布线器可自动根据输入逻辑网表的拓扑结构和约束条件选择布线资源来连通各个单元。从本质上来讲,布线资源的使用方法和设计的结果有密切的关系。
1.2.6 专用硬IP核
专用硬IP核是相对于底层嵌入的软IP核而言的,FPGA内嵌了功能强大的硬IP核(Hard Core)。为了提高FPGA的性能,FPGA内部集成了一些专用的硬IP核。例如,为了提高FPGA的乘法速度,主流的FPGA中都集成了专用乘法器;为了适应通信总线与接口标准,很多高端的FPGA内部都集成了串/并收发器(SERDES)核与PCIe核,可以达到数10 Gbps的收发速率;为了简化与模拟信号之间的接口,Xilinx公司的7系列高端FPGA集成了A/D转换硬IP核——XADC。不仅如此,Xilinx公司和Altera公司的高端FPGA还集成了大量的BRAM,以及多个ARM Cortex-A9等具有实时处理功能的嵌入式微处理器核,再加上配套的开发工具,可实现SOPC(System-on-a-Programmable-Chip,片上可编程系统)的开发。