跳至正文

FPGA是如何搭建的

标签:
FPGA是如何搭建的_0


前言

前文介绍了FPGA的可编程技术,知道了现在大部分的FPGA是采用的SRAM工艺构成可编程开关,内部集成了百万甚至千万个可编程的CMOS门电路,正如FPGA的名字——现场可编程门阵列。但是,FPGA并非单纯的由“门”形成的结构,下文将详细介绍构成FPGA的多种结构以及这些结构如何相互合作实现特定功能。

传送门:FPGA可编程技术


一. FPGA的结构划分

FPGA大致由三大部分构成:

  1. 实现逻辑电路的逻辑要素 —— 逻辑块(Logic Block,LB)。此要素以触发器和门电路为底层单元,这些触发器和门电路组成多种逻辑功能块,如:乘积项(实现乘法和加法功能)、查找表(实现任意组合逻辑)和数据选择器(MUX)等。这些逻辑块可相互组合实现各种逻辑。
  2. 和外部信号连接的输入/输出要素 —— IO块(Input/Output Block,IOB)。此要素的功能是连接IO引脚和内部布线要素,其中通常包含上拉、下拉、输入/输出的方向和极性、转换速率(slew rate)、开漏(open drain)等控制电路,以及触发器等数据存储电路。现在的FPGA通常支持多种规格的输入/输出,如:LVTTL、PCI、PCI express、SSTL等单端标准IO 和 LVDA等差分标准IO。
  3. 连接前两种要素的布线要素 —— 布线要素,包括布线通道开关块(Switch Block,SB)和 连接块(Connection Block,CB)。用于逻辑块的互联或是逻辑块与IO块的连接。除了上面所展示的岛型构造外,还有多层构造、H-tree构造等多种类型。

下图展示了一种基本的岛型(island style)FPGA结构,可以看到FPGA的三种基本要素是如何排布的。

这三种要素可组合实现任意逻辑电路,但实际FPGA中为了更方便更可靠的实现某些特定功能还会加入一些必要的电路,例如时钟树、配置/扫描链(configuration chain)、测试电路等。现在的FPGA还会在内部集成处理器(如ARM核/DSP)、块存储器(BRAM)、乘法器、生成时钟用的PLL或DLL等专用硬逻辑电路来提高性能。

下图展示了一种带有存储器块和乘法器块的岛型FPGA结构。其中,相邻的逻辑块、连接块、开关块组成一个可重复逻辑块,如图中左上角红色框所示。这些可重复逻辑呈阵列排列,中间再嵌入一些专用硬核电路,最终形成岛型FPGA。

注意这里对FPGA内嵌的存储器块和乘法器块的称呼——专用硬逻辑电路。它不同于经常说的硬核,FPGA里的硬核专指硬核处理器,如ZYNQ芯片内部集成的两个Cortex-A9 ARM处理器核心。

相邻的逻辑块、开关块和连接块组成一个可重复逻辑模块,然后模块呈阵列形排列最终形成岛形FPGA。下图展示了带有乘法器块和存储器块的岛形FPGA结构。


二. 逻辑块

逻辑块LB是实现任意逻辑的核心。FPGA供应商对各自FPGA芯片中的逻辑块结构有不同的称呼,Xilinx公司称之为CLB(Configurable Logic Block,可配置逻辑块),而Altera公司称之为LAB(Logic Array Block,逻辑阵列块)。虽然称呼不同,但不同公司LB的内部构成和功能是类似的。

在今天的复杂CAD工具出现之前,工程师门还在手动处理电路,那时基于MUX的FPGA结构能达到最好的结果,但随着FPGA集成度的快速增加,人工手工布局布线已不可能,且MUX结构并没有提供高速进位逻辑链,这导致MUX用作算术运算时性能不佳。基于以上的两个原因,现在的FPGA基本都放弃了MUX结构而使用基于LUT(Look-Up Table,查找表)的结构。

2.1 基本逻辑单元

BLE(Basic Logic Element,基本逻辑单元)是构成逻辑块的基本要素。BLE由实现组合电路的LUT,实现时序电路的触发器 以及 MUX构成。BLE的内部组成如下图所示。MUX的控制端M0决定直接输出LUT的值还是输出FF中存储的值。

从上图可见,4-LUT(4输入查找表)是组成BLE的主要部分,它可以实现4个输入的任意组合逻辑,但当要实现更多输入的逻辑时,有两个办法是能轻松想到的,一种是多个4-LUT组合;另一种是使用一个k-LUT。这里就涉及到一个问题,到底几输入的LUT才是合适的呢

2.2 几输入查找表是最优解

FPGA的设计所关注的两个最重要的问题是面积和速度。

先说面积,FPGA的总面积 = 逻辑块数 × 单个可重复逻辑块面积。k-LUT直接影响每个逻辑块的大小,k越大,每个逻辑块功能越强,实现电路使用的逻辑块数越少,但是逻辑块自身的面积会增大,因此每个可重复逻辑模块的面积会增大。所以,从FPGA面积的角度看,k的选择需要权衡。

再说速度,FPGA的延迟 = 逻辑块互联延迟 + 逻辑块内部延迟。k越大,实现电路使用的逻辑块数量越小,那么互联次数越小,互联延迟越小,但逻辑块内部的延迟越大。

因此,LUT的输入数量与FPGA的面积、延迟均有着密切关系。

FPGA的发展过程中,使用过3-LUT,4-LUT,5-LUT,6-LUT,之前业内的主流意见认为4-LUT最为高效。但后来关于LUT输入数与面积和延迟的研究表明,6-LUT才是最优解,相关结果如下图。因此,现在的FPGA都倾向于采用6-LUT。

2.3 自适应查找表

需要注意的是,6-LUT的结构在实现5输入逻辑时,有一半的配置内存是闲置的。逻辑输入数越少,资源浪费的问题越严重,比如6-LUT实现2输入逻辑时就有93%的配置内存闲置。这是造成FPGA资源使用率低的主要原因之一。如果6-LUT结构是可拆分的,当实现2输入逻辑时拆分为 2-LUT + 4-LUT;当实现3输入逻辑时拆分为两个3-LUT,这种可拆分结构的LUT显然可以改善资源浪费的问题。这种可拆分的LUT被称为自适应查找表(adaptive LUT)。Altera公司的Stratix II 和 Xilinx公司的 Virtex 5 都采用了自适应LUT。


三. 布线要素

布线要素指的是FPGA各个逻辑块之间,以及逻辑块与IO块之间的连接线路。它包含布线通道、开关块和连接块。按照布线要素的拓扑结构可分为以下四类:

  1. 完全连接型
  2. 一次元阵列型
  3. 层次型
  4. 二次元阵列型(或者说 岛型)

随着FPGA的发展,因为效率、制程、工艺、性能等方面的原因,前三种连接线路结构已经不再使用了,目前,主流的FPGA的内部线路的连接方式是是岛型,或者说目前的FPGA都是岛型FPGA。

3.1 岛型FPGA详细布线架构

布线通道中连线的数量定义为通道宽度W。

连接逻辑块和布线通道的连接块(CB)有输入和输出两种,对应的参数是输入自由度F~c.in~ 和 输出自由度 F~c.out~。

输入自由度 = 输入连接点数量 / W,下图的 F~c.in~ = 2 / 4

输出自由度 = 输出连接点数量 / W,下图的 F~c.out~ = 1 / 4

纵向和横向布线通道的交叉处是开关块(SB),开关块的自由度F~s~,下图所示的开关块每个输出都可以从来自三个方向的输入中选择,所以开关自由度是3。

布线的自由度由连接自由度和开关自由度共同决定,自由度越高意味着布线越灵活。但是,布线自由度和性能间存在着复杂的权衡,如果为提高自由度而增加开关数量,面积和延迟会恶化;如果减小开关数量,布线资源会减少,更可能因资源不足导致布线失败。

3.2 布线线段的长度

FPGA的布线通道中,同时存在短距离、中距离、长距离等不同长度的布线线段。这里的布线线段长度指的是连线所跨越的逻辑块的数量,如下图,只跨越一个逻辑块的长度为1(单倍线),同理,还有长度为2的双倍线,长度为4的四倍线。此外,一些FPGA上还有横跨整个器件的长距离连线,称为长线。

3.3 单向连线与双向连线

传输信号的连接线分两种:双向连线和单向连线。

下图(a)所示为双向连线,基于双向连线的结构可以减少布线通道中连线的数量,但总有一个方向的开关会闲置,并且会增加连线电容影响延迟。

下图(b)所示为单向连线,基于单向连线的结构布线数量是双向连线的两倍,但开关不会闲置,且连线电容小。

现在的FPGA制程发展很快。芯片内部金属层数增长,可以实现更多的连线,再从设计难度上考虑,FPGA正从使用双向连线向单向连线转变。

3.4 开关块

开关块由可编程开关构成,它的功能是控制布线路径。按拓扑类型分,开关块可分为三种:

  1. 不相交(Disjoint)型
  2. 通用(Universal)型
  3. 威尔顿(Wilton)型

下图展示了通道宽度W=4时的三种开关块的拓扑结构。交叉点处的白色圆点代表此处有可编程开关。所有的开关块都有3条连接路径可以选择,如下图左中不相交型 L0 可以与 T0、B0 或 R0 连接。所以开关块的自由度是3。

3.4.1 不相交型开关块

Xilinx公司的XC4000系列使用的是不相交型开关块,故这类开关块又被称为Xilinx型开关块。不相交型连接结构较为简单,只有相同序号的线道可以互联,即标号为i的线道自能连到其它标号也为i的线道上。也就是说,如果线网中的一条线道用线道i来实现,线网中的其他线道也必须用线道i来实现。如果线道i被其他线网占用,那么这个连接不能完成。因此,不相交型开关块将整个布线通道分为W(通道宽度)个子集,各子集之间不互通,降低了可布线性。

下图展示了通道宽度W=5时,不相交开关块的连接图,开关块由6个开关共同决定,因此开关总数为6W。

3.4.2 通用型开关块

通用开关块两个成对的线道可以互联,如上图线道0和3,线道1和2分别成对。显然,只有通道宽度W为偶数时才能两两成对,当W为奇数时,最后的线道W-1无法成对,就采取和不相干型开关块一样的连接方法。从上图中可以看到,线道0可以连到相邻通道的线道0或者线道3,如果线道0被其它节点占用了,可以利用线道3完成必要的连接。显然,对比,对比不相交型开关块,通用开关块的可布线性有所提高。

另外,通用开关块自能对应单倍线,无法应用到其它长度的布线上。

3.4.3 威尔顿型开关块

威尔顿型开关块比前两个拓扑的可布线性更高。评价不同类型开关块性能的重要指标是实现相同功能时,使用的布线面积和布线延迟,布线面积越小越好,布线延迟越低越好。有研究指出,威尔顿型开关块具有最小的布线面积,而三种拓扑的布线延迟相当。因此,威尔顿型开关块的性能最优。另外,开关块类型对FPGA的延时特性影响很小。

3.5 连接块

连接块也由可编程开关构成,其功能是连接布线通道和逻辑块(或是专用硬核电路)。当通道宽度很大时,如果使用全交叉开关矩阵来实现,可编程开关的数量会很多,连接块的面积会非常大。实际中的连接块使用的是节省掉一些开关的稀疏开关矩阵。

下图展示了一个6输入逻辑块,通道宽度W=28的连接块的开关分布示例。示例中布线通道全部由单向连线组成,其中正向连线14根(F0 ~ F13),反向连线14根(B0 ~ B13)。这28根连线和逻辑块的6个输入(In0 ~ In5)通过连接块相连。逻辑块的每个输入都有14根连线与之相连,因此输入自由度 = 14 / 28 = 0.5。


四. IO块

IO块负责器件的IO引脚与逻辑块之间的接口部分,其功能包括:输入/输出缓冲、输出驱动、信号方向控制、高阻抗控制等,可以使输入/输出信号按指定的方式在逻辑块和IO引脚间传输。IO块里还有触发器,可以锁存输入/输出信号。

下图展示的是Xilinx公司XC4000系列IO块的内部结构,一般FPGA的IO块结构也与之基本相同,其主要特征如下:

  • 输出部分有上拉和下拉电阻,可以让输出锁定为0或者1。
  • 输出使能信号OE控制输出缓冲器。
  • 输入/输出各自都有触发器,可用来调整信号延迟。
  • 输出缓冲器的转换速率(slew rate)可调。
  • 输人缓冲器阈值符合TTL或CMOS标准。
  • MUX6带有延时电路,用来保证输入的保持时间。

IO块负责FPGA与外部的电气适配,要使FPGA能对应各种输出标准和输出电压。下图所示的是Inter公司的Stratix V 的IO规格。可见IO口支持包括高速差分信号(LVDS)在内的多种IO规格和输出电压。

随着IO规格的种类不断增多,很难让每个独立IO都能应对所有标准,所以,现在的FPGA通常将多个IO划为一组,称为IO分组,然后以IO分组为单位进行功能划分和管理。每个分组内共享电源电压和参考信号,这样,多个分组就能应对更多的IO规格,用户可以根据需要使用哪个IO组的哪个IO引脚。


五. 专用硬逻辑电路

现在的FPGA内部基本都嵌入有多个不同功能的专用硬核电路。像DSP块,ARM块,存储器块,时钟块等。这里只简单介绍FPGA的组成,所以这部分先略过不谈,后续会更新一篇或多篇博客来详细说明这些专用硬核电路。


六. 总结

FPGA由逻辑块、IO块和布线要素这三大部分搭建出基本结构,为追求更高性能,可能会嵌入几种专用硬核电路。现在的FPGA基本都是岛型架构,IO块在FPGA四周外围,逻辑块在内部,布线通道水平竖直交叉排布,围绕这各个像岛屿一样的逻辑块。


七. 参考

  1. 《FPGA原理与结构》第三章 日本 田野英晴主编, 赵谦译
  2. 高海霞. 基于SRAM技术的现场可编程门阵列器件设计技术研究[D].西安电子科技大学,2005.

如果本文对你有所帮助,欢迎点赞、转发、收藏、评论让更多人看到,赞赏支持就更好了。

如果对文章内容有疑问,请务必清楚描述问题,留言评论或私信告知我,我看到会回复。


徐晓康的博客持续分享高质量硬件、FPGA与嵌入式知识,软件,工具等内容,欢迎大家关注。

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
目录