|
一、FPGA是什么? ^0Mt*e{q <Y}R#o1Z } }59V&'t 在《FPGA至简设计原理与应用》一书里是这样描述的:『FPGA的全称为Field-Programmable Gate Array,即现场可编程门阵列。在开始学习FPGA之前,同学们首先应该清楚地了解FPGA的概念,明白FPGA到底是什么东西,可以用来做什么。FPGA是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物,是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。简而言之,FPGA就是一个可以通过编程来改变内部结构的芯片。 {;2PL^i YOcO4
a|X a3E 直观来说,FPGA就是一个可以“改变”内部结构的芯片,而让这个芯片来实现怎样的功能,就需要通过编程即设计硬件描述语言,经过EDA工具编译、综合、布局布线成后转换为可烧录的文件,最终加载到FPGA器件中去,改变FPGA内部的连线,最终完成所实现的功能。此时的FPGA就可以认为是用来实现具体功能的一个粗糙的芯片。 Hj}K{20 @{25xTt }4,L%$@n 稍微接触过硬件的人大概都听说过另一种集成电路芯片即单片机,那么FPGA与单片机在结构上有着怎样的差别呢?对于单片机而言,FPGA是一种微处理器,类似于电脑的CPU,一般是基于哈佛总线结构或者冯·诺依曼结构。单片机用途广泛,多用于控制流水线上;FPGA的结构是查找表,它的结构比较复杂,相对应的它可以实现的功能也很强大,一般应用于通信接口设计、数字信号处理等比较高端的场合,而且FPGA还有一个特殊的应用场合,即ASIC的原型验证。 ?`?)QE8 4%4 }5UYN \.-bZ$ 相较于专职专用的ASIC,FPGA工具在开发难度上降低了许多,并且大大缩短了开发周期,而且由于FPGA是可重复编程的,其研发成本与风险也要比ASIC减少许多,更适用于复杂多变的数据中心等应用。 FYpzQ6s~ [@.!~E)P j:v@pzTD 但是FPGA也不是万能的,优势有时候也是劣势。虽然FPGA相比于单片机、CPU等集成电路芯片拥有效率更高、功耗更低的特点,但是易于开发程度远远不如单片机、CPU;在数字芯片设计领域,FPGA虽然相比ASIC具有更短的开发周期与开发难度,但是其存在着成本过高、性能较差并且在资源的利用率上远不及ASIC等问题,不能真正的替代ASIC。』 ?{[
v+t# |!4K!_y YuO.yh_ 这段描述非常的接地气且通俗易懂,但从另一个层面来讲,FPGA对于不同的人有不同的意义。FPGA有多种类型,每一种类型具有不同的功能和组合。 z:wutqru ,5h)x"s a^I\ /&aw' 二、FPGA的基本结构 %$.3V#? rbWP78 lNYt`xp FPGA可编程的特性决定了其实现数字逻辑的结构不能像专用ASIC那样通过固定的逻辑门电路来完成,而只能采用一种可以重复配置的结构来实现,而查找表(LUT)可以很好地满足这一要求,目前主流的FPGA芯片仍是基于SRAM工艺的查找表结构。 %xI p5h] $|@
( :/nj@X6 在任意一款FPGA芯片说明书中可以查看到该器件具体的参数指标,其中包含可编程逻辑模块的数量、固定功能逻辑模块(如乘法器)的数目及存储器资源(如嵌入式RAM)的大小。当然仅仅依靠这些结构是构成不了FPGA的基本结构的,在芯片中还有其他众多部分,但是在比较FPGA时,上述结构是最重要的参考指标。在最底层的可配置逻辑模块(如片上的逻辑单元)上,存在着基本的两种部件:触发器和查找表(LUT),而触发器和查找表的组合方式不同,是各个FPGA家族之间区别的重要依据,并且查找表本身的结构也可能各不相同(有4输入或6输入或其他)。 "]}
bFO7C YpVD2.jy fumm<:<CLO 查找表(Look-Up-Table)简称为LUT,其本质上就是一个RAM。目前FPGA内部中多使用4输入的LUT,每一个LUT可以看成一个有4位地址线的RAM。当用户在EDA工具上通过原理图或硬件描述语言设计了一个逻辑电路以后,FPGA开发软件会自动计算逻辑电路的所有可能结果,并把真值表(即结果)事先写入RAM中。这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查找表操作,通过地址找到对应的RAM中的结果,最后将其输出。 A
PEE~ JkbQyn Wi)_H$KII 以实现数字逻辑Y=A&B&C的功能为例。如果是在专用ASIC中,为了实现该逻辑,逻辑门都已经事先确定好,Y的输出值为两个逻辑与运算后的结果,其基本的实现结构如下图所示: ~x1$h#Cx' 图 1 Y=A&B&C的实现结构 ;@oN s- 而在FPGA的结构中若要实现同样的逻辑功能,用户首先在EDA工具中使用硬件描述语言设计出“Y=A&B&C”逻辑代码,EDA工具(QUARTUS或其他开发工具)分析这一行代码,得出A、B、C在不同输入组合下(共8种),Y的值分别是多少,其真值表如下表所示: `r9!zffyS W:pIPDx1=! (5-FV p
fb ,s"^kFl 然后软件工具将所有的结果写到查找表上,从而实现了该代码的功能。下图就是FPGA的实现基本结构。查找表就类似于一个RAM,输入A、B、C则相当于地址,通过A、B、C的地址就得读到值赋给Y并输出。 p$]3'jw 图2 Y=A&B&C的FPGA实现基本结构 H& |