2.5 FPGA内部硬件结构简介
FPGA之所以能实现现场可编程,是因为FPGA内部有很多可供用户任意配置的资源,其中包括可编程逻辑阵列、可编程I/O、互连线、IP核等。学过数字电路的读者都知道,使用与、或、非门的任意组合几乎可以实现所有数字电路,但是FPGA内部最基本的主要单元并不是这些与、或、非门,而是无数个查找表(Look Up Tabe,LUT)和寄存器。
初看FPGA内部结构,初学者可能会迷惑,但了解FPGA的内部结构是有重要意义的。这能让我们了解在FPGA设计过程中,我们所编写的代码和硬件之间的映射关系是怎样的,从而更加深入地了解FPGA和单片机、ARM的区别。透彻了解了FPGA内部结构,才能对FPGA的设计了如指掌,这有助于进一步的系统优化,实现低功耗、省资源、高稳定性的系统设计。
下面以本开发板使用的FPGA芯片进行介绍,其主要资源如图2-12所示(下面的演示可以等学习完第3章后再尝试操作)。
图2-12 芯片主要资源
首先,我们来认识一下FPGA内部的诸多资源。单击图2-13所示图标打开“Chip Planner”来查看这款FPGA芯片的版图模型。
图2-13 打开版图模型
打开后的Chip Planner视图如图2-14和图2-15所示,图2-14展示的是未进行布局布线的视图,片内资源未被使用,所以呈现浅色。图2-15展示的是已经进行过布局布线操作后的视图,片内使用资源已映射到了版图模型(只有全编译后才能看到映射效果),其中深色表示该资源已经被使用,颜色越深,表示资源利用率越高;黑色区域为一些固定功能资源或无资源区域,用户不可对其进行任意配置。
图2-14 未进行布局布线操作的版图模型
图2-15 进行布局布线操作后的版图模型
(1)LAB(Logic Array Block,逻辑阵列块)
每个LAB由16个LE(Logic Element)组成,图2-16所示是两个已经映射资源的LAB,资源利用率不同的LAB会有颜色差异(左边LAB使用资源量少,颜色较浅;右边LAB使用资源量多,颜色较深)。
图2-16 映射资源后的LAB
放大后的LE如图2-17所示,每个LE主要由查找表(深色)和寄存器(浅色)组成。整个芯片中共有10 320个LE,约为10k,对应芯片型号“EP4CE10F17C8N”中的10。
图2-17 放大后的LE图
双击其中一个LE可以观察到其内部的大致结构(内部结构只有被使用才能够双击打开查看)。由图2-18可以看出,其结构主要分为两部分:左侧为一个4输入的查找表,右侧为可编程寄存器,此外还包括数据选择器、进位链等。查找表和多路选择器完成组合逻辑功能,寄存器完成时序逻辑功能(黑色粗实线部分是已经使用的资源,灰色细实线部分是未被使用的资源)。
图2-18 LE内部结构图
这里的4输入查找表类似于一个容量为16 bit的ROM(24=16)(工艺上是珍贵的SRAM资源),4表示地址输入位宽为4 bit,查找表的存储内容作为输出结果与不同输入信号一一对应,在FPGA配置时载入。
标注①处为查找表:目前主流FPGA都采用了基于SRAM工艺的查找表结构。查找表本质上就是一个RAM。当用户通过原理图或HDL语言描述设计出逻辑电路后,FPGA开发软件会自动计算逻辑电路的所有可能结果,将其列成真值表的形式,并把真值表(即输入对应的输出逻辑)事先写入RAM,这样每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。目前FPGA中多使用4输入的查找表,所以每一个查找表可以看成一个有4位地址线的RAM。
标注②处为寄存器:可以配置成多种工作方式,比如触发器或锁存器、同步复位或异步复位、复位高有效或低有效。
标注③处为进位链:超前进位加法器,方便加法器实现,加快复杂加法的运算。
标注④处为数据选择器:数据选择器一般在FPGA配置后固定下来。
(2)用户可编程I/O(User I/O,也称IOE)
可编程I/O资源分布在整个芯片的四周。本芯片共有256个引脚,除去一些固定功能的引脚,可供用户任意配置的引脚资源只有180个,图2-19所示是其中一个可编程I/O单元,里面又包含3个最小单元(每个可编程I/O单元中的最小单元个数不固定,有的包含2个,也有的包含4个)。
图2-19 I/O资源图
图2-20所示为可编程I/O最小单元内部结构图,包括双向I/O缓冲器、OE寄存器、对齐寄存器、同步寄存器、DDR输出寄存器、三态门、延时模块等。
图2-20 可编程I/O最小单元内部结构图
为了便于管理和适应多种电器标准,FPGA的IOE部分被划分为若干个组(Bank),每个Bank的接口标准由其接口电压VCCIO决定,一个Bank只能有一种VCCIO,但不同Bank的VCCIO可以不同。只有相同电气标准和物理特性的端口才能连接在一起,VCCIO电压相同是接口标准的基本条件。图2-21所示为EP4CE10F17C8N芯片“Pin Planner”的整体视图,用于引脚的绑定,图中芯片被划分为8个部分,每个部分称为一个Bank。
图2-21 引脚绑定整体视图
(3)互连线(Interconnect)资源
布线资源连通FPGA内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。
FPGA芯片内部有着丰富的布线资源,根据工艺、长度、宽度和分布位置的不同划分为4类:第1类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;第2类是长线资源,用于完成芯片Bank间的高速信号和第二全局时钟信号的布线;第3类是短线资源,用于实现基本逻辑单元之间的逻辑互连;第4类是分布式的布线资源,用于专有时钟、复位等控制信号线。图2-22中的箭头为由LAB中的LE的寄存器与IOE中的互连线。
图2-22 互连线资源
(4)嵌入式存储单元(Memory Bit,也称为Block RAM或BRAM,见图2-23)
图2-23 嵌入式存储单元
该部分资源主要用于生成RAM、ROM、FIFO以及移位寄存器等常用的存储模块,常用于大数据存储或跨时钟域处理。BRAM由一定数量固定大小的存储块构成,使用BRAM资源不占用额外的逻辑资源,不过使用时消耗的BRAM资源只能是其块大小的整数倍,就算只存储了1 bit,也要占用一个完整的BRAM。
图2-24所示为一个M9K的内部结构图。M9K由输入输出寄存器和一个RAM块构成,该芯片共有423 936bit存储单元,并以每9Kbit容量为一个块,共有46个。相对于LUT构成的分布式RAM(Distribute RAM,DRAM),这种专用存储单元速度更快,容量更大,可以避免LUT资源的浪费,只有在BRAM资源不够时才不得不使用分布式RAM。
图2-24 M9K内部结构图
(5)嵌入式乘法单元(Embedded MultiPlier 9-bit Element,也简称DSP块)
该单元主要用于各种复杂的数学运算,乘法、除法以及常用的功能函数,如有限冲激响应滤波器(FIR)、无限冲击响应滤波器(IIR)、快速傅里叶变换(FFT)、离散余弦变换(DCT)等。因为FPGA中的LUT和寄存器资源有限,使用嵌入式乘法单元可大大节省逻辑资源。本芯片共有46个DSP块,成列式分布在芯片的中间位置,图2-25所示为一对DSP块资源。
图2-25 一对DSP块资源
图2-26所示为嵌入式乘法器单元DSP块的内部结构,包含输入输出寄存器和一个乘数块。
图2-26 嵌入式乘法器单元DSP块的内部结构图
(6)锁相环(Phase Lock Loop,PLL)
锁相环的表示形式如图2-27所示。本芯片一共有两个锁相环,芯片右上角、左下角各一个。PLL的参考时钟由晶振通过专用时钟引脚传入,用于时钟的倍频、分频以及相位、占空比的调整。PLL输出的时钟信号会连接到全局时钟网络上,以保证时钟的质量,减小时钟偏斜(skew)和抖动(jitter)。
图2-27 锁相环
图2-28所示为锁相环内部的结构图,每个锁相环可以分出五个同源时钟信号,图中只输出了两路。
图2-28 锁相环内部的结构图
不同系列的FPGA芯片其内部资源量会稍有差异,但都会包含以上几类主要的内部资源,上面提到的诸多资源在后面的学习中都会用到,届时再进行详细说明。