FPGA内部硬件结构简介
我们知道FPGA内部有很多可供用户任意配置的资源,其中包括:可编程逻辑、可编程I/O、互连线、IP核等资源,很多学过数字电路的人都知道与或非门可以构成几乎所有的数字电路,但是FPGA内部最基本的主要单元并不是这些与或非门,而是由无数个查找表(Look Up Tabe,简称为LUT)和寄存器构成。
虽然FPGA的内部结构对于初学者来说是云里雾里,一头雾水,但是了解FPGA的内部结构能让我们更好的理解FPGA设计过程中我们所编写的代码和硬件是怎样的一个映射关系,从而更深刻理解FPGA和单片机、ARM的不同。当我们对FPGA内部结构了解透彻后,就可以把FPGA的设计了如指掌,才能有助于进一步优化我们的设计,优化好的设计能使我们设计的整个系统跑的更快、更加节省资源、功耗更低,稳定性更好。
我们选用的是CycloneIV系列的EP4CE10F17C8,很多入门开发板一般都配置的这款芯片,其主要资源如下图所示。
首先我们来认识一下FPGA内部的一些资源。点击下图所示图标打开Chip Planner来查看这款FPGA芯片的版图模型。
打开后的版图模型如下图所示,第一张图是未进行布局不线的图,因为资源未被使用所以都是浅色。第二张图是已经布局布线后的图,也就是已经将使用的资源映射到了版图模型上(只有全编译后才能看到映射效果),其中深色表示该资源已经被使用,而颜色越深的地方表示资源利用率越高。黑色区域为一些固定功能的资源或没有资源,用户不可对其进行任意配置。
①逻辑阵列块(Logic Array Block,也简称为LAB):每个LAB由16个LE(Logic Element)组成,下图是两个已经映射资源后的LAB,资源利用率不同的LAB其颜色深浅也有所差异(左边使用的资源少,颜色就浅;右边使用的资源多,颜色就深)。
放大后的LE如下图所示,每个LE由左边一个蓝色LUT和右边一个红色寄存器组成。整个芯片中共有10320个LE。
双击其中一个LE可以观察到其大致的内部结构(内部结构只有被使用才能够双击打开查看),我们可以看到主要的两个部分,一是左边的4输入LUT,另一个是可编程寄存器,还包括一些选择器、与门等辅助逻辑电路。(蓝色高亮的部分是已经使用的资源,未高亮灰色的部分是未被使用的资源)。
②用户可编程I/O(User I/Os,也被称为IOE):可编程I/O资源分布在整个芯片的四周。该芯片共有256个管脚,除去一些固定功能的管脚,可供用户任意配置的管脚资源只有180个,下图是其中一个可编程I/O单元,里面又包含三个最小单元(每个可编程I/O单元中的最小单元个数不固定,有的包含两个,也有的包含四个)。
下图是可编程I/O最小单元内部结构图,包括双向I/O缓冲器、OE寄存器、对齐寄存器、同步寄存器、DDR输出寄存器、三态门、延时模块等组成。
③嵌入式存储单元(Memory Bits,也被称为Block RAM或简称为BRAM):该部分资源主要用于生成RAM、ROM、FIFO、移位寄存器,在存储较多数据或作跨时钟域处理时常用到。该芯片共有423936bit存储单元,并以每9Kbit容量为一个块,共有46个,下图所示为一个M9K的RAM块。相对于LUT构成的分布式RAM(Distribute RAM,简称为DRAM),这种专门的存储单元容量更大,从而避免LUT资源的浪费。
下图是一个M9K内部结构图。由输入输出寄存器和一个RAM块构成。
④嵌入式乘法单元(Embedded multiPlier 9-bit elements,也称为DSP块):该单元主要用于各种复杂的数学运算,乘法、除法以及常用的功能函数如:有限冲激响应滤波器(FIR),无限冲击响应滤波器(IIR),快速傅里叶变换(FFT),离散余弦变换(DCT)等时会消耗很多逻辑资源,而FPGA中的LUT和寄存器资源有限,这时候使用嵌入式乘法单元这部分资源就不会造成逻辑资源的浪费。该芯片共有46个DSP块,成列式分布在芯片的中间位置,下图为一对DSP块资源。
下图是嵌入式乘法器单元DSP块的内部结构图。包含输入输出寄存器和一个乘数块。
⑤锁相环(Phase Lock Loop,也简称为PLL):该芯片一共有两个锁相环,一个在右上角处附近,一个在左下角附近。PLL的参考时钟输入都是由专用时钟管脚上的晶振进来的,用于时钟的倍频、分频,以及相位、占空比调制。PLL出来的时钟都会连接到全局时钟网络上,以保证时钟的质量,减小时钟偏斜(Skew)和抖动(Jitter)。
下图是锁相环内部的结构图,每个锁相环可以分出五个同源时钟信号。