FPGA是如何搭建的

前文介绍了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。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qe12UVmX-1602468990606)(D:\OneDrive\图片\我的博客图片\FPGA\FPGA原理与结构\FPGA原理与结构-查找表输入数与面积和延迟的关系-202010121008.png#pic_center)]

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)有输入和输出两种,对应的参数是输入自由度Fc.in 和 输出自由度 Fc.out

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

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

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

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

3.2 布线线段的长度

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ALwrUe8i-1602468990611)(C:\Users\xu\AppData\Roaming\Typora\typora-user-images\image-20200930153714204.png#pic_center)]

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是如何搭建的相关推荐

  1. 二、E906移植----项目解读与FPGA基本工程搭建

    二.E906移植----项目解读与FPGA基本工程搭建 上篇介绍了基本的环境搭建,并跑了一下官方例程,查看了一下仿真波形.本篇则主要讲一下官方的例程是如何跑通的,涉及到哪些必要步骤,以及对应步骤具体是 ...

  2. SOC FPGA linux系统搭建(Terasic DE10-Nano开发板)

    Embeeding linux for Cyclone V SoC FPGAs(Terasic DE10-Nano) 本设计使用黄金硬件参考设计 (GHRD) 和添加自定义 IP 到开发 Linux ...

  3. 用FPGA搭建一个STM32内核?

    1.必要的基础知识 为了更快的完成在FPGA上实现ARM Cortex-M3软核,一些必要的基础知识还是要有的! FPGA开发基础知识,如FPGA开发流程,设计.综合.布局.布线.约束.下载 Xili ...

  4. 从接触FPGA开始...

    我常年担任多个有关FPGA学习研讨的QQ群管理员,长期以来很多新入群的菜鸟们总是在重复的问一些非常简单但是又让新手困惑不解的问题.作为管理员经常要给这些菜鸟们普及基础知识,但是非常不幸的是很多菜鸟怀着 ...

  5. quick time不可用是什么意思_fpga是什么意思(fpga怎么用)

    1.不熟悉 FPGA的内部结构,不了解可编程逻辑器件的基本原理.FPGA为什么是可以编程的?恐怕很多菜鸟不知道,他们也不想知道.因为他们觉得这是无关紧要的. 他们潜意识的认为可编程嘛,肯定就是像写软件 ...

  6. FPGA你必须知道的那些事儿

    转载地址:http://www.cnblogs.com/yuphone/archive/2010/10/28/1863822.html 我常年担任多个有关FPGA学习研讨的QQ群管理员,长期以来很多新 ...

  7. [笔记]|[FPGA]|[寄存器]|[模拟信号数字信号]《FPGA学习之道》学习笔记(1)

    [笔记]|[FPGA]|[寄存器]|[模拟信号数字信号]<FPGA学习之道>学习笔记(1) 笔记为笔者学习狄超所著**<FPGA之道>**时所写 –仅作为自己后续查看的笔记 文 ...

  8. 为什么很多人会觉得FPGA难学?

    1) 不熟悉FPGA的内部结构,不了解可编程逻辑器件的基本原理. FPGA为什么是可以编程的? 恐怕很多自以为入门都不知道,可能也不想知道.因为觉得这是无关紧要的.潜意识的认为可编程嘛,肯定就是像写软 ...

  9. 初学者必须要知道的FPGA基础知识

    初学者必须要知道的FPGA基础知识 一.FPGA是什么? 在<FPGA至简设计原理与应用>一书里是这样描述的:『FPGA的全称为Field-Programmable Gate Array, ...

最新文章

  1. 程序员学霸!top2大学毕业!不到30岁第一次升P9失败!挫折感极强,怀疑人生?网友:没升P7的我,不要面子的吗??...
  2. 谷歌等揭露「AI任务疑难」:存在局限的ImageNet等基准,就像无法代表「整个世界」的博物馆...
  3. SIGGRAPH最佳博士论文奖又落华人手中,胡渊鸣的这位师兄不一般
  4. SSD成就了《扩散性百万亚瑟王》
  5. rxjs里scan operator的执行研究
  6. php 类的实现 完整例子
  7. 第12篇:Flowable-BPMN操作流程之用户任务UserTask
  8. 为什么把端口号改为80之后,访问的时候就可以不写端口号
  9. 白领体检异常率连年走高,这5本书教你怎样科学养生
  10. GT_Trace的使用
  11. mysql数据库中更新数据表用以下哪一项_删除数据表用以下哪一项()_学小易找答案...
  12. latex acm-sigconf使用总结
  13. 防病毒服务器维护记录表,机房巡检记录表.doc
  14. coverity持续集成_美国新思科技发布2017年Coverity Scan报告
  15. Linux中du命令使用方法
  16. iOS:iOS 的 APP 如何适应 iPhone 5s/6/6Plus 三种屏幕的尺寸?
  17. 实参可以是任意类型吗_5本可以解决书荒的粮草小说,类型随机,看看有你喜欢的吗?...
  18. 透过分布地图,看我中华大地!
  19. kubeadm部署kubernetes
  20. LYZ-Ice Skates

热门文章

  1. 约数个数shlqsh
  2. linux修改ip地址方法如何保存_修改电脑IP地址方法
  3. c# wpf listbox 高度_WPF快速入门系列(1)——WPF布局概览
  4. 如何运行一段python代码_Python退出时强制运行一段代码如何实现 Python退出时强制运行一段代码实现方法...
  5. cxf客户端访问方式
  6. 用C#操作word替换字符,用spire
  7. js window.open()打开的页面关闭后刷新父页面
  8. css 让div 的高度和屏幕的高度一样
  9. MyBatis 相同事物查询缓存问题
  10. js入门·表单详解一(修改表单属性,修改表单元素值)