咱们知道FPGA内部有不少可供用户任意配置的资源,其中包括:可编程逻辑、可编程I/O、互连线、IP核等资源,不少学过数字电路的人都知道与或非门能够构成几乎全部的数字电路,可是FPGA内部最基本的主要单元并非这些与或非门,而是由无数个查找表(Look Up Tabe,简称为LUT)和寄存器构成。编程
虽然FPGA的内部结构对于初学者来讲是云里雾里,一头雾水,可是了解FPGA的内部结构能让咱们更好的理解FPGA设计过程当中咱们所编写的代码和硬件是怎样的一个映射关系,从而更深入理解FPGA和单片机、ARM的不一样。当咱们对FPGA内部结构了解透彻后,就能够把FPGA的设计了如指掌,才能有助于进一步优化咱们的设计,优化好的设计能使咱们设计的整个系统跑的更快、更加节省资源、功耗更低,稳定性更好。网络
咱们选用的是CycloneIV系列的EP4CE10F17C8,不少入门开发板通常都配置的这款芯片,其主要资源以下图所示。分布式
首先咱们来认识一下FPGA内部的一些资源。点击下图所示图标打开Chip Planner来查看这款FPGA芯片的版图模型。函数
打开后的版图模型以下图所示,第一张图是未进行布局不线的图,由于资源未被使用因此都是浅色。第二张图是已经布局布线后的图,也就是已经将使用的资源映射到了版图模型上(只有全编译后才能看到映射效果),其中深色表示该资源已经被使用,而颜色越深的地方表示资源利用率越高。黑色区域为一些固定功能的资源或没有资源,用户不可对其进行任意配置。oop
①逻辑阵列块(Logic Array Block,也简称为LAB):每一个LAB由16个LE(Logic Element)组成,下图是两个已经映射资源后的LAB,资源利用率不一样的LAB其颜色深浅也有所差别(左边使用的资源少,颜色就浅;右边使用的资源多,颜色就深)。布局
放大后的LE以下图所示,每一个LE由左边一个蓝色LUT和右边一个红色寄存器组成。整个芯片中共有10320个LE。 优化
双击其中一个LE能够观察到其大体的内部结构(内部结构只有被使用才可以双击打开查看),咱们能够看到主要的两个部分,一是左边的4输入LUT,另外一个是可编程寄存器,还包括一些选择器、与门等辅助逻辑电路。(蓝色高亮的部分是已经使用的资源,未高亮灰色的部分是未被使用的资源)。spa
②用户可编程I/O(User I/Os,也被称为IOE):可编程I/O资源分布在整个芯片的四周。该芯片共有256个管脚,除去一些固定功能的管脚,可供用户任意配置的管脚资源只有180个,下图是其中一个可编程I/O单元,里面又包含三个最小单元(每一个可编程I/O单元中的最小单元个数不固定,有的包含两个,也有的包含四个)。设计
下图是可编程I/O最小单元内部结构图,包括双向I/O缓冲器、OE寄存器、对齐寄存器、同步寄存器、DDR输出寄存器、三态门、延时模块等组成。3d
③嵌入式存储单元(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)。
下图是锁相环内部的结构图,每一个锁相环能够分出五个同源时钟信号。