深入浅出带你了解FPGA架构
数字集成电路有两种类型:ASIC和FPGA(现场可编程门阵列)。专用集成电路(ASIC)有一个预先定义的特定硬件功能,在生产后不能重新编程。但FPGA可以在制造后可无限编程。
FPGA是一种集成电路,一种可编程芯片,它允许工程师对定制的数字逻辑进行编程,可以根据程序改变其硬件逻辑。主要目的是允许工程师重新设计和重新配置他们的芯片更快,更便宜,只要他们想要,然而世界上没有什么理想的,FPGA芯片也有局限性!
FPGA最早出现于20世纪80年代,其最初的应用是允许工程师拥有通用可编程逻辑芯片。然而,这需要大量的编程才能执行简单的功能,所以工程师们尽量避免使用这些功能。但是,虽然在1980年的FPGA是一个简单的接口设备,主要针对难以用于设计复杂系统的胶水逻辑,但它成为了一个系统级集成电路,具有自己的内存块、微处理器和接口,允许设计重要的系统。
基本特点
1) 采用FPGA设计ASIC电路(专用集成电路),用户不需要投片生产,就能得到合用的芯片。
2) FPGA可做其它全定制或半定制ASIC电路的中试样片。
3) FPGA内部有丰富的触发器和I/O引脚。
4) FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
5) FPGA采用高速CMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
6)使工程师能够精确地构建所需硬件,而不必使用标准集成电路,或花费与ASIC设计相关的时间、成本和风险。
7)与微处理器或微控制器相比,它们以更快、更节能和更简单的方式进行操作。
8)FPGA功能可以像任何其他软件代码一样更新,即使硬件已经离开了生产点。这可以帮助修复bug或添加新特性。
可以说,FPGA芯片是提高系统集成度、可靠性的最佳选择之一。FPGA是由存放在片内RAM中的程序来设置其工作状态,因此,工作时需要对片内RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。
CPLD和FPGA
CPLD是复杂可编程逻辑器件,也是一种制造后可重新编程的器件。在这个意义上,它们类似于FPGA。然而,也有显著的差异。FPGA由多个逻辑单元组成,而CPLD由较少的逻辑单元组成。由于它们的尺寸,CPLD通常更便宜和更快。然而,CPLD的功能非常有限,它们不能用于构建复杂的系统,它们通常用于简单的设计,如胶合逻辑[1]。
各个厂家叫法不尽相同。PLD(Programmable Logic Device)是可编程逻辑器件的总称,早期多EEPROM工艺,基于乘积项结构。FPGA最早由Xilinx公司发明。多为SRAM 工艺,基于查找表(Look Up Table)结构,要外挂配置用的EPROM。Xilinx把SRAM工艺,要外挂配置用的EPROM的PLD叫FPGA,把Flash工艺(类似EEPROM工艺),乘积项结构的PLD叫CPLD;Altera把自己的PLD产品:MAX系列(EEPROM工艺),FLEX/ACEX/APEX系列(SRAM工艺)都叫作CPLD,即复杂PLD(Complex PLD)。
FPGA的应用
目前FPGA的应用有很多。当我们在生产过程中不确定我们的需求,或者需求会随着时间而改变。FPGA是最快、最便宜的原型制作方法之一,但它并不局限于此。它被用于不同的目的:从灵活的设计和机器学习训练到快速交易和加密挖掘。服务器应用是FPGA设备最新的案例。
然而,它们也有缺点:
硬件成本
速度要求
FPGA的架构
FPGA由构建块组成,这些构建块就像可以用来构建系统的乐高积木。它有一个基本的逻辑构建块称为逻辑单元(CLB),但也可以包含更大的其他块,如PLL、接口、内存等。单个FPGA芯片将拥有数十万个逻辑单元。除了CLB,芯片还有输出输入模块IOB(Input Output Block)和内部连线(Interconnect)。
我们有一个查找表(LUT)作为FPGA逻辑块的核心。本质上就是一个RAM。它把数据事先写入RAM后,每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。构建块的输出是多路复用的。多路复用器的一个输入是LUT的直接输出,用于纯组合逻辑,如NAND, NOR, XOR或其他逻辑门。多路复用器的另一个输入是经过d型触发器并与时钟同步存储的LUT的注册输出。
一个逻辑单元本身是一个简单的电路,不能做太多的事情,但当有很多逻辑单元时,我们可以实现任何我们想要的功能。为了做到这一点,逻辑单元被连接到一个阵列的其他逻辑单元。
CLB块之间的橙色矩形是可编程开关,它可以将逻辑单元的输出路由到任何地方。这是一个非常简单的图表;事实上,比这里显示的更多的电线和互连线。
注意携带和携带引脚。每个加法器只有一位宽,而使用进位/进位引脚,可以非常快速和有效地创建大的加法器和计数器。拥有快速、专用的携带链是FPGA相对于其他可编程逻辑器件(如CPLD)的最大优势之一。
在FPGA中,时钟可以实现所有触发器,因为没有时钟的数字设计几乎不可想象。FPGA有非常高级的时钟资源,包括内置的可配置PLL(锁相环)和DLL(延迟锁环)。由于几乎所有的现代数字设计都需要多个具有不同频率和相位延迟的时钟,因此时钟管理非常重要。
FPGA也有用于读取和输出数据的输入输出块。除了标准的I/O块,大多数FPGA有以下I/O特性:
触发器输出同步I/O
微分信号
双数据速率(DDR)
序列化器和反序列化器(SERDES)
上拉、下拉和三态I/O
回转速度可调,驱动强度可调
就像内存中内置的RAM块一样,分布式RAM可以在100Kb和100Mb之间变化。最新一代的FPGA设备也有DSP乘法器片,主要用于DSP应用(数字信号处理)。大多数FPGA有其他内置块:
ADC和DAC
外部存储器控制器,如DRAM, DDR, DDR2。
串行总线控制器
以太网MAC
专用的先进先出[2]
高速收发器
这些块在FPGA设备上设计为“硬块”,而不是在制造过程后由逻辑块和开关构建,因为它们通常是所有复杂系统都需要的。因为它们存在于所有的系统中,并且使用得非常频繁,所以我们希望它们能够存在以节省时间(总使用clb和开关从头开始设计它们没有意义,相反我们将它们设计为单独的可配置块,以便设计师能够更改它们的参数),但更重要的是,我们希望它们具有非常好的特性,非常高效地工作并占用更少的空间。此外,这些模块中有一些模拟部件需要手工设计,不能仅通过数字单元来构建。
如何对FPGA进行编程和配置
为了配置FPGA,我们需要对它进行编程。我们可以使用Verilog、System Verilog和VHDL等FPGA硬件描述语言进行编程。这些语言有一些区别,这里便不再赘述。使用FPGA定义硬件的工作流程如下:
每个步骤都需要一些工具集。大多数FPGA制造商都提供了具备所有所需工具的编程环境。
高手玩家
FPGA市场前景诱人,但是门槛之高在芯片行业里无出其右。全球有60多家公司先后斥资数十亿美元,前赴后继地尝试登顶FPGA高地,其中不乏英特尔、IBM、德州仪器、摩托罗拉、飞利浦、东芝、三星这样的行业巨鳄,但是最终登顶成功的只有位于美国硅谷的四家公司:Xilinx(赛灵思)、Altera、Lattice(莱迪思)、Microsemi,其中,Xilinx与Altera这两家公司共占有近90%的市场份额,专利达到6000余项之多,如此之多的技术专利构成的技术壁垒高不可攀。
Xilinx
Xilinx公司成立于 1984年,Xilinx首创了现场可编程逻辑阵列(FPGA)这一创新性的技术,并于1985年首次推出商业化产品,是全球领先的可编程逻辑完整解决方案的供应商,也是目前排名第一的FPGA解决方案提供商。
产品系列包括:
Spartan系列:定位于低端市场,目前最新器件为采用28nm工艺的Spartan7;
Artix系列:定位于低端Spartan和高端Kintex之间的中端市场,目前在售的主流产品为采用28nm工艺的Artix-7;
Kintex系列:定位于高端市场,包含有28nm工艺的Kintex7系列,20nm的Kintex7 Ultrascale系列,还有16nm的Kintex7 Ultrascale+系列;
Virtex系列:定位于高端市场,包含有采用28nm工艺的Virtex7系列,20nm的Virtex7 Ultrascale系列,还有16nm的Virtex7 Ultrascale+系列;
全可编程 SoC 和 MPSoC系列:包括有Zynq-7000和Zynq UltraScale+ MPSoC系列FPGA、内嵌有ARM Cortex系列CPU;
AI Engine系列:Versal ACAP、Alveo系列等。
Intel(Altera)
与Xilinx齐名的FPGA供应商,2015年被CPU届的大佬Intel收购。
产品系列包括:
MAXII系列:实质上是CPLD;
Cyclone系列:定位于中低端市场,类似于Xilinx 公司的Spartan系列和Artix系列,最新产品为Cyclone10。
Stratix系列:定位于高端市场,与Xilinx的Kintex、Virtex系列竞争,最新产品为Stratix10;
Arria系列:SOC系列FPGA, 内置ARM Cotex A9的核;
Intel Arria 10系列:支持DDR4存储器接口的FPGA,硬件设计人员可以使用Quartus II 软件v14.1,在Arria 10 FPGA和SoC设计中实现666 Mbps DDR4存储器数据速率;
Agilex系列:面向数据中心等高端市场,采用10nm工艺,异构 3D 系统级封装 (SiP) 技术的一款FPGA产品。
Microchip(Microsemi)
Microsemi并购了Actel,专注于美国军工和航空领域,产品为反熔丝结构FPGA和基于Flash的FPGA为主,具有抗辐照和可靠性高的优势,Microsemi又被Microchip(微芯)并购。
产品系列包括:
基于FLASH的通用FPGA系列:包括PolarFire Mid-Range FPGAs、RTG4 Radiation-Tolerant FPGAs、IGLOO2 Low-DensityFPGAs三个高、中、低端系列。
Lattice
CPLD的发明者,著名的可编程逻辑解决方案供应商,仅次于Xilinx和Altera。
产品系列包括:
ECP系列:为Lattice自己的开发的FPGA系列,提供低成本,高密度的FPGA解决方案,而且还有高速Serdes等接口,适用于民品解决方案居多;
ICE系列:为收购SilioncBlue的超低功耗FPGA,曾用在iPhone7里面,实现了FPGA首次在消费类产品中应用;
Mach系列:替代CPLD,实现粘合逻辑的最佳选择。
QuickLogic Corp
QuickLogicCorporation 诞生于1988年,是一家超低功耗嵌入式现场可编程门阵列 (eFPGA) IP、多核语音识别 SoC、显示器桥接和可编程序逻辑解决方案开发公司。
eFPGA产品系列包括:采用65nm和40nm工艺的ArcticPro系列和采用GF-22工艺的ArcticPro 2 eFPGA。
Achronix
Achronix 作为后起之秀,早期推出了eFPGA IP,但是限于IP产品的变现速度太慢,随后推出了FPGA芯片,今年5月发布的新品叫Speedater7t。
EFINIX
EFINIX可以说是后起之秀,它改变了传统FPGA的设计理念:
eXchangeable Logic and Routing (XLR) cell
我们将逻辑资源比作一个城市。随着城市的扩大,就必须建立更宽的道路,道路间要建立不少的立交,而且这些立交的层次都可能很复杂,还需要更多的交通灯,以及匝道来汇聚和分开车流。这些实际上和一块FPGA的结构非常类似,你可以自然联想到,芯片规模越大,就只有两个办法来完成逻辑之间的互联互通。要不就是把走线的资源增加很多层,要不就是把芯片做到更大的面积来增加布线。甚至两个方面都要加强。
传统的FPGA中的运算单元LE(Logic Element)和互连资源Routing Switch在功能上各司其职,而数量和位置都是固定的。因此,如果你的设计中有很多Logic,那么很可能片上的LE不够用,而互连资源会有很多富裕;而如果你的设计中需要很多的连线,比如复杂的总线,大量的Mux,那么很可能互连资源成为瓶颈。
Efinix的想法就是设计一种新的Cell,XLR,它既可以作为运算资源,又可以作为互连资源。
国内主要玩家
[1] gule logic的中文含意是“胶合逻辑”,它是连接复杂逻辑电路的简单逻辑电路的统称。例如,一个ASIC芯片可能包含许多诸如微处理器、存储器功能块或者通信功能块之类的功能单元,这些功能单元之间通过较少的粘合逻辑连接起来。在印制板(PCB)层,粘合逻辑可以使用具有较少逻辑门的“粘合芯片”实现,例如PAL、GAL、CPLD等。
[2] 先进先出(FIFO,first-in,first-out)为处理从队列或堆栈发出的程序工作要求的一种方法,它使最早的要求被最先处理。
FPGA基础知识及其工作原理(多图)
高端设计工具为少有甚是没有硬件设计技术的工程师和科学家提供现场可编程门阵列(FPGA)。无论你使用图形化设计程序,ANSI C语言还是VHDL语言,如此复杂的合成工艺会不禁让人去想FPGA真实的运作情况。在这个芯片中的程序在这些可设置硅片间到底是如何工作的。本文会使非数字化设计人员明白FPGA(现场可编程门阵列)的基础知识及其工作原理。此信息在使用高端设计工具时同样十分有用,希望可以为理解这一特别技术提供一些线索。
1. FPGA-现场可编程门阵列
每一块FPGA芯片都是由有限多个带有可编程连接的预定义源组成来实现一种可重构数字电路。
图1.FPGA不同构成
FPGA芯片说明书中,包含了可编程逻辑模块的数量、固定功能逻辑模块(如乘法器)的数目及存储器资源(如嵌入式RAM)的大小。FPGA芯片中还有很多其它的部分,但是以上指标通常是为特定应用选择和比较FPGA时,最重要的参考指标。
在最底层,可配置逻辑模块(如片或逻辑单元)有着两种最基本的部件:触发器和查找表(LUT)。这很重要,因为各种FPGA家族之所以各不相同,就是因为触发器和查找表组合的方式不同。例如,Virtex-II 系列的FPGA ,它的片具有两个查找表和两个触发器,而Virtex-5 FPGA的片具有4个查找表和4个触发器。查找表本身的结构也可能各不相同(4输入或6输入)。关于查找表工作原理的更多信息将在后面的章节中给出。
表1中列出了在NI LabVIEW FPGA硬件目标中使用的FPGA的指标。逻辑门的数量是一种将FPGA芯片与ASIC技术进行比较的传统方法,但是它并不能真实地表述FPGA内部的独立单元的数量。这就是Xilinx公司没有在新型Virtex-5系列中指定逻辑门数量的原因之一。
表1.不同系列FPGA源规格
为了更好地理解这些规格的意义,将编码考虑为合成的数字电路模式。对任何一段合成代码,或图形化或文本形式,都有相应的电路图反映逻辑组件该如何连线。通过一段简单布尔逻辑电路了解下相应的示意图。图2表示的是传递5个布尔信号并且可图形化计算所得的二进制值的功能组。
图2.载入5个信号的简单布尔逻辑
在通常情况下(LabVIEW SCTL—单周期定时环路外),图2所示相应电路图同图3所示相近。
图3.为图2中布尔逻辑的相应电路图
虽然很难明白,但是实际上这里创建了两个并行分支的电路。最上面的5条黑线被反馈到第一个分支,它在每个布尔操作间添加了触发器。最下面的5条黑线构成了第二个逻辑链。其中一支路在每步操作之间增加了同步寄存器,另一条逻辑链是确保执行数据流的。本电路图正常工作时总共需要12个触发器和12个查找表。上端分支和每个元件将在以后章节分析。
2. 触发器
图4.触发器符号
触发器是二进制移位寄存器,用于同步逻辑以及保存时钟(脉冲)周期内的逻辑状态。在每个时间(脉冲)边沿,触发器在输入时锁定1(真)或0(假)值并且保存此值直到下次时钟(脉冲)边沿。在正常情况下,LabVIEW FPGA在每次操作之间都设置一个触发器,以保证有足够的时间来执行每步操作。对此律的例外只发生在SCTL结构中写代码的情况。在这个特殊的环路结构中,触发器只放置在闭环迭代的始末段,并且由编程者考虑定时因素来决定如何放置。对SCTL内代码如何同步的更多内容将在以后章节中讨论。图5表示的是图3的上端分支,触发器由红色高亮表示。
图5.绘制由红色高亮表示出触发器的电路图
3. 查找表
图6.双四输入查找表
图6所示示意图中的其他逻辑电路通过使用少量查找表形式的随机存取存储器实现。我们可以简单地假定FPGA中系统门的数量可参考与非门(NAND)以及或非门(NOR)的数量,但实际上,所有的组合逻辑(与门、或门、与非门、异或门等)都是通过查找表存储器中的真值表来实现。真值表是输出对应于每个输入值组合的预定义表(现在卡诺图的重要性在你的头脑中可能会慢慢淡化)。以下是对数字逻辑电路课程的快速回顾:比如,图7是布尔逻辑与门操作过程。
这是对数字逻辑课程的快速回顾:
例如,图7中显示了布尔型AND操作。
图7.布尔型AND操作
表2.布尔与门操作的真值表
你可以认为输入值是所有输出值的数字索引,如表3所示。
表3.布尔与门擦操作的真值查找表实现
Virtex-II和Spartan-3系列FPGA芯片有着4输入查找表来实现真正的4输入信号的16种组合。图8就是一个四输入电路实现的例子。
图8.输入布尔逻辑的四信号电路
表4所示为使用双四输入查找表实现的相应的真值表。
表4.图8中所示相应真值表
Virtex-5系列的FPGA使用双六输入查找表,可以通过6个不同输入信号的64种组合来实现真值表。因为触发器之间的组合逻辑十分复杂,所以在LabVIEW FPGA中使用SCTL也越来越重要。下一节将讲述SCTL如何优化利用LabVIEW中的FPGA源。
4. SCTL
上几节中使用的代码例子假定代码是设置在SCTL外部,并为保证执行同步数据量也同步了附加电路。SCTL是LabVIEW FPGA中一个特殊结构,生成一个更为优化的电路图,以期望达到在一个时钟(脉冲)周期内执行完所有逻辑电路分支。例如,若设置SCTL在40MHZ运行,则所有逻辑电路分支将在25ns内执行完毕。
如果在SCTL中设置前例中同样的布尔逻辑电路(如图9所示),则生成如图10所示的相应电路示意图。
图9.附有STCL的简单布尔逻辑
图10.图9所示布尔逻辑相应的电路图
很明显,这种实现方法简单多了。在Virtex-II或Spartan-3系列FPGA中,触发器间的逻辑需要至少2个4输入查找表,如图11所示。
图11.图10中电路图的双四输入查找表实现
由于Virtex-5系列FPGA有着6输入的查找表,用户可以在一个查找表中实现相同数量的逻辑,如图12所示。
图12.图10中双六输入查找表实
本例中使用的SCTL(如图9所示)设置在40MHZ下运行,这意味着在任意触发器之间逻辑电路必须在25ns内完成执行。电子在电路中传播的速度决定了代码执行的最大速度。关键路线是有最长传播延迟的逻辑电路分支,它决定了该部分电路中理论最大时钟速率。Virtex-5 FPGA上的双六输入查找表不仅减少实现给定逻辑电路所需要的查找表总数,而且减少电子通过逻辑电路的传播延迟(时间)。Virtex-5系列FPGA中的6输入查找表不仅可以减少实现特定逻辑而需要的查找表的数量,而且可以降低逻辑中电流的传输延时。这意味着,您可简单地通过选择一个基于Virtex-5的硬件指标设置相同的SCTL,追求更快的时间速度。
5. 乘数器和DSP片
图13.乘数器功能
看起来简单的两数相乘运算在数字电路中实现起来是十分复杂的,也是极为消耗资源的。为提供相关参考,图14所示是一种使用组合逻辑电路实现4×4字节乘数器的示意图。
图14.两个4字节输入相乘的电路图
试想两个32字节的数字相乘要通过2000多步操作才能得到结果。因此,FPGA预设了乘数器电路,在数学和信号处理应用中保存对查找表和触发器使用。Virtex-II和Spartan-3 FPGA拥有18×18bit乘法器,所以两个32字节数字相乘的运算需要三个乘法器来实现。许多信号处理算法都包括连乘运算结果的功能,因此Virtex-5等高性能FPGA都预设被称为DSP片的乘数器累加电路.这些预设处理组件,也被称为DSP48片,包括25×18bit乘数器以及加法器电路,尽管您可单独使用乘数器功能。表5所示为不同FPGA系列DSP决策。
表5.不同FPGA的DSP源
6. 块随机存取存储器(RAM)
选择FPGA时,记忆源是另一个需要考虑的关键因素。嵌入FPGA芯片中的用户自定义随机存取存储器(RAM),对储存数据设置或平行环路之间传送数值很有帮助。基于FPGA系列,您可在16或36kb组件中设置板载RAM,或者使用触发器以数组来执行数据设置;然而,对于FPGA逻辑源来说,大型数组很快就变得十分“奢侈”。由100个32字节元素数组可消耗Virtex-II 1000 FPGA中超过30%的触发器,或者占用少于1%的嵌入式块RAM。DSP算法通常需要追踪整个数据块或是复杂等式的系数,而在没有板载存储器情况下,许多处理功能在FPGA芯片的硬件逻辑电路中都不适用。图16所示为使用块RAM读写存储器的图形化功能。
图15.用于读写存储器的块RAM函数
同样,你也可以使用内存块,将一段完整周期存储为数值和索引的顺序表,为板载信号发生器存储周期性波形数据。输出信号的最终频率由检索数值的速度决定,这样您就可用此方法动态改变输出频率,而不需要输入波形中的急剧变化。
图17.用于先进先出缓冲器的块RAM功能
FPGA固有的并行执行要求逻辑电路独立元件可在不用时间脉冲下驱动。在不同运行速度下的逻辑电路之间传递数据是很棘手的。使用先进先出(FIFO)缓冲器时,板载存储器可用来是传输更加平稳。如图16所示,用户可以将FIFO缓冲器配置成不同大小以确保数据在FPGA芯片的非同步部件间不会丢失。表6所示为嵌入不同FPGA系列的用户可设置快RAM。
表6.不同FPGA的记忆源
7. 总结
随着高端技术的发展以及新概念的深入概括,FPGA技术地采用将不断增加。然而探究FPGA其中奥秘,感叹这硅片中在方框图间汇编出的变化,也是十分重要的。在发展阶段,如果您懂得如何利用和优化资源,比较和选择触发器、查找表、乘数器和块RAM等硬件指标是十分有帮助的。 这些基本的功能块并不是包含所有资源的完整清单,而且这篇白皮书并没有包含对所有FPGA部件的讨论。
相关问答
半导体、汽车和新能源三个行业,哪个最有前景?这三个行业是全球最大的行业,在中国半导体,汽车,新能源都是全球顶尖规模的行业。(注意我说的是体量大)。因为你是学材料,慢慢的你会发现这三个行业在应用...但...
为什么英特尔CPU处理器有巨大性能提升空间但总是挤牙膏似的提升?英特尔这几年一直挤牙膏有外部原因,也有内部原因。不过这里主要说的是i3/i5/i7消费级CPU,在高端至强CPU阵营中,英特尔的核心数量加的还是很猛的,还算不上挤牙...
在线的老铁帮个忙呗!!性价比高STM公司,STM排名怎么样大家...[回答]我是用STM32的fsmc功能来控制LCD的设置好了FSMC也能控制LCD了,但是我有疑问啊。是在固定的管脚输出吗?由于CPU与FPGA通信的需要,以及对8080总线的...
医疗、白酒上涨,新能源大跌,后期的行情如何看?回望全球科技30年,我们已经站在下一轮超级创新周期的起点,与上一轮主要靠智能手机和移动互联拉动不同,本轮的超级周期的主导因素是:新能源(电车+风光电新能...1...
华为工具软件供应商?业务领域涵盖:通信设备的高速互连解决方案、无线通信网络的天馈/室分系统、汽车电子、楼宇及数据中心布线系统、测试与测量产品、医疗与工业连接产品等。33、...