第一部分 基本知识
第1章 FPGA开发概述
本章导读
本章从FPGA的一些基本概念入手,将ASIC、ASSP、ARM、DSP与FPGA比对,同时也论及FPGA开发语言及主要厂商;接着对FPGA技术在嵌入式应用中的优势和局限性进行讨论;FPGA是一项综合性很强的技术门类,因此我们在本章也会关注它所涉及的一些基本技能;最后我们将论述FPGA的应用领域和开发流程。当然了,如果你自认为已经入门FPGA,对于本章可能会提及的一些基础概念耳熟能详,那么不妨跳过本章。
1.1 FPGA基础入门
2015年伊始,Intel欲出资百亿美金收购Altera的新闻在半导体业内引发一场不小的轰动。而时隔不到半年,这则新闻居然成为现实,并且最终的收购价格167亿美金也比传闻要高出许多(如图1-1所示)。在早些年里,其实Intel与Altera已经或多或少有些合作了。Intel此举的动机非常明显,不仅是希望在PC领域继续拓展服务器市场与数据中心的应用——Altera的可编程器件在这方面能够提供强劲的性能竞争力;而且也是期望借助Altera来扩宽自身的多元化发展战略——Altera是目前唯一一家毛利率好于Intel的半导体公司,并且其三分之二的收入来自于电信、无线、军事和太空等领域。无论如何,Altera能够以其单一的FPGA产品线“傍上”Intel,或多或少都证明了FPGA存在的价值。
图1-1 Intel与Altera的联姻
要说Intel,谁人不晓,基本上家家户户都或多或少有一些带着Intel烙印的家当;而反观Altera,别人可以不知道,但是你要是不知道就要遭受各种鄙视了。身处电子行业,没有玩过FPGA不稀奇,但是没有听说过FPGA就有些难为情了。FPGA? Altera?什么情况?好吧,就当你真的什么都不知道吧,下面先开始我们的“扫盲行动”。入过门的别嫌烦,直接略过本节就好。
1. FPGA是什么
简单来说,FPGA就是“可反复编程的逻辑器件”。如图1-2所示,这是一个Altera公司最新的Cyclone V Soc FPGA器件,从外观上看,似乎和一般的CPU芯片没有太大差别。
图1-2 Altera公司最新的Cyclone V Soc FPGA器件
FPGA取 自Field Programmable Gate Array这 四个英文单词的首个字母,译为“现场(Field)可编程(Programmable)逻辑阵列(Gate Array)”。至于FPGA到底是什么,能够干什么,又有什么过人之处?下面我们就把它和它的“师兄师弟”摆在一起,一一呈现这些问题的答案。
2. FPGA、ASIC和ASSP
抛开FPGA不提,大家一定都很熟悉ASIC与ASSP。所谓ASIC,即专用集成电路(Application Specific Integrated Circuit)的简称;而ASSP,即专用标准产品(Application Specific Standard Parts)的简称。电子产品中,它们无所不在,还真是比FPGA普及得多得多。但是ASIC以及ASSP的功能相对固定,它是为了专一功能或专一应用领域而生,希望对它进行任何的功能和性能的改善往往是无济于事的。打个浅显的比喻,如图1-3所示,如果说ASIC或ASSP是布满铅字的印刷品,那么FPGA就是可以自由发挥的白纸一张。
图1-3 ASIC/ASSP和FPGA就如同印刷品和白纸
使用了FPGA器件的电子产品,在产品发布后仍然可以对产品设计做出修改,大大方便了产品的更新以及针对新的协议标准做出的相应改进,从而可以加速产品的上市时间,并降低产品的失败风险和维护成本。相对于无法对售后产品设计进行修改的ASIC和ASSP来说,这是FPGA特有的一个优势。由于FPGA可编程的灵活性以及近年来电子技术领域的快速发展,FPGA也正在向高集成、高性能、低功耗、低价格的方向发展,并且逐渐具备了与ASIC和ASSP相当的性能,使其被广泛地应用在各行各业的电子及通信设备中。
3. FPGA、ARM和DSP
与ASIC相比,FPGA、ARM和DSP都具备与生俱来的可编程特性。或许身处开发第一线的底层工程师要说No了,很多ASIC不是也开放了一些可配置选项,实现“可编程”特性吗?是的,但与FPGA、ARM、DSP能够“为所欲为”的任意操控一整个系统而言,ASIC的那点“可编程”性的确摆不上台面。当然,换个角度来看,FPGA、ARM和DSP都或多或少集成了一些ASIC功能,正是这些ASIC功能,加上“可编程”特性,使得它们相互区别开了,并且各自独霸一方。
ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。由ARM公司设计的处理器风靡全球,大有嵌入式系统无处不ARM的趋势。因此,我们通常所说的ARM,更多的是指ARM公司的处理器,即ARM处理器,如图1-4所示。ARM通常包含一颗强大的处理器内核,并且为这颗处理器量身配套了很多成熟的软件工具以及高级编程语言,这也是它备受青睐的原因之一。当然了,ARM不只是一颗处理器而已,因为在ARM内核处理器周边,各种各样精于控制的外设比比皆是,例如GPIO、PWM、AD/DA、UART、SPI、IIC……ARM的长处是控制和管理,在很多工业自动化中大有用武之地。
图1-4 ARM处理器
DSP(digital singnal processor),如图1-5所示,即数字信号处理器,是一种独特的微处理器,有自己的完整指令系统,能够进行高速、高吞吐量的数字信号处理。它不像ARM那么“胡里花俏”,它更“专”。它只专注一件事,就是对各种语音、数据和视频做运算处理;或者也可以这么说,DSP是为各种数学运算量身打造的。
图1-5 DSP
相比之下,套用近些年一句业内很火的广告词“All Programmable”来形容FPGA再合适不过了。ARM虽然有很多外设,DSP虽然具备强大的信号运算能力,但在FPGA眼里,这些都不过是“小菜一碟”。或许说得有些过了,但是,毫不夸张地讲,ARM能做的,DSP能做的,FPGA一定也都能做;而FPGA可以做的,ARM不一定行,DSP也不一定行。在很多原型产品设计过程中,时不时有人会提出基于FPGA的方案。在一些灵活性要求高、定制化程度高、性能要求也特别高的场合,FPGA(如图1-6所示)再合适不过了,甚至有时会是设计者别无选择的选择;当然了,客观来看,FPGA固然强大,它高高在上的成本、功耗和开发复杂性还是会让很多潜在的目标产品望而却步,而在这些方面,ARM和DSP正好弥补了FPGA所带来的缺憾。
图1-6 FPGA器件
总而言之,在嵌入式系统设计领域,FPGA、ARM和DSP互有优劣,各有所长。很多时候它们所实现的功能无法简单的相互替代,否则我们就不会见到如TI的达芬奇系列ARM中有DSP、Xilinx的Zynq或Altera的Soc FPGA中有ARM的共生现象了。FPGA、ARM和DSP,它们将在未来很长的一段时间内呈现三足鼎立的局面。
4. Verilog与VHDL
说到FPGA,我们一定关心它的开发方式。FPGA开发本质上就是一些逻辑电路的实现而已,因此早期的FPGA开发通过绘制原理图(和现在的硬件工程师绘制原理图的方式大体相仿)完成。而随着FPGA规模和复杂性的不断攀升,这种落后的设计方式几乎已经被大家遗忘了,取而代之的是能够实现更好的编辑性和可移植性的代码输入方式。
说到FPGA的设计代码方式,经过近三十年的发展,只有Verilog和VHDL二者最终脱颖而出,成为了公认的行业标准。对于这两种不同的语法,它们的历史渊源、孰优孰劣这里就不提了。美国和中国台湾地区的逻辑设计公司大都以Verilog语言为主,国内目前学习和使用Verilog的人数也在逐渐超过VHDL。从学习的角度来讲,Verilog相对VHDL有着快速上手、易于使用的特点,博得了更多工程师的青睐。即便是从来没有接触过Verilog的初学者,只要凭着一点C语言的底子加上一些硬件基础,三两个月很快就可以熟悉Verilog语法。当然了,仅仅是入门还是远远不够的,真正掌握Verilog必须花费很多时间和精力,并通过一些项目的实践,才会慢慢对可编程逻辑器件的设计有更深入的理解和认识。
5. Altera、Xilinx和Lattice
相比于互联网的那些“暴发户”,半导体行业则更讲究历史底蕴,“今天丑小鸭,明天白天鹅”的故事要少得多,因此两家历史最为久远的FPGA供应商Altera和Xilinx凭着一直以来的专注,确保了它们在这个行业的统治地位。当然了,很大程度上也是由于FPGA技术相对于一般的半导体产品有着更高的门槛,从器件本身到一系列配套的工具链,再到终端客户的技术支持——这一箩筐的麻烦事,想想就头疼。
不过,提醒大家注意的是,开篇我们提到的Intel大手笔新闻,无论是不是空穴来风,最终Altera是否能够嫁入豪门,这都在预示着一个新的趋势——FPGA技术将迎来它的又一个繁茂复活的春天。
唠叨一大气,赶紧回到我们的主题上来。目前FPGA器件的主流厂商Altera公司和Xilinx公司,它们的可编程逻辑器件占到了全球市场的60%以上。从明面上的“竞争对手”到今天暗地里还客气地互称“友商”,不难看出两家公司走过历史长河,虽然有“明争暗斗”,但确也不经意间的彼此促进,互相激励。的确,翻看FPGA的发展史,往往充斥着这两家公司不断上演的“你方唱罢我登场”的情节,并且偶尔也会有第三者如Lattice小弟的“插足”戏份。不过这好在新千年过后,各方重新定位,Altera和Xilinx便牢牢把持住象征统治地位的中高端市场,而Lattice也只能在低端市场找找“山中无老虎,猴子称大王”的感觉了。
不论是Altera、Xilinx还是Lattice,甚至一些后来者,如笔者接触过的国内FPGA厂商京微雅格,它们的FPGA器件内部结构虽然略有差异,但在开发流程、开发工具乃至原厂提供的各种支持上,都是“换汤不换药”的。所以,这对于用户而言,绝对是一个福音,只要好好掌握一套方法论,任何厂商的器件都可以通吃。
1.2 FPGA的优势与局限性
若要准确评估FPGA技术能否满足开发产品的功能、性能以及其他各方面的需求,深入理解FPGA技术是至关重要的。在产品的整个生命周期中,如果产品功能可能会有较大的升级或变更,那么使用FPGA技术来实现就会有很大的优势。
在考虑是否使用FPGA技术来实现目标产品时,我们需要重点从以下几个方面进行评估。
❏ 可升级性——产生在设计过程中,甚至将来产品发布后,是否有较大的功能升级需求?是否应该选择具有易于更换的同等级、不同规模的FPGA器件?
❏ 开发周期——产品开发周期是否非常紧迫?若使用FPGA开发,是否比其他方案具有更高的开发难度,能否面对必须在最短的时间内开发出产品的挑战?
❏ 产品性能——产品的数据速率、吞吐量或处理能力是否有特殊要求?是否应该选择性能更好或速度等级更快的FPGA器件?
❏ 实现成本——是否有基于其他ASIC、ARM或DSP的方案,能够以更低的成本实现设计?FPGA开发所需的工具、技术支持、培训等额外的成本有哪些?通过开发可复用的设计,是否可以将开发成本分摊到多个项目中?是否有已经实现的参考设计或者IP核可供使用?
❏ 可用性——器件的性能和尺寸的实现,是否可以赶上量产?是否有固定功能的器件可以代替?在产品及其衍生品的开发过程中,是否实现了固定功能?
❏ 其他限制因素——产品是否要求低功耗设计?电路板面积是否大大受限?工程实现中是否还有其他的特殊限制?
基于以上的这些考虑因素,我们可以从如下三大方面总结出在产品的开发或产品的生命周期中,使用FPGA技术实现所能够带来的潜在优势。
❏ 灵活性
可重编程,可定制。
易于维护,方便移植、升级或扩展。
降低NRE成本,加速产品上市时间。
支持丰富的外设接口,可根据需求配置。
❏ 并行性
更快的速度、更高的带宽。
满足实时处理的要求。
❏ 集成性
更多的接口和协议支持。
可将各种端接匹配元件整合到器件内部,有效降低BOM成本。
单片解决方案,可以替代很多数字芯片。
减少板级走线,有效降低布局布线难度。
当然了,在很多情况下,FPGA不是万能的。FPGA技术也存在着一些固有的局限性。从以下这些方面看,选择FPGA技术来实现产品的开发设计有时并不是明智的决定。
❏ 在某些性能上,FPGA可能比不上专用芯片;或者至少在稳定性方面,FPGA可能要逊色一些。
❏ 如果设计不需要太多的灵活性,FPGA的灵活性反而是一种浪费,会潜在增加产品的成本。
❏ 相比特定功能、应用集中的ASIC,使用FPGA实现相同功能可能产生更高的功耗。
❏ 在FPGA中除了实现专用标准器件(ASSP)所具有的复杂功能,还要添加一些额外的功能,实属一大挑战。FPGA的设计复杂性和难度可能会给产品的开发带来一场噩梦。
1.3 FPGA开发所需的技能
前面的文字已经做了很多铺垫,相信读者在初学FPGA时也一定早有耳闻。的确,FPGA是一门相对复杂的技术,先不说设计本身,单是器件的内部结构、烦琐的开发流程、开发过程中需要接触的各种EDA工具,有时都会把工程师们折腾得晕头转向。
相比于单一处理器的开发,今天的FPGA开发却可能会涉及嵌入式系统设计的方方面面。如图1-7所示,很多时候,FPGA工程师需要具备的技能可能要比其他任何设计团队多得多,如系统设计、功能分配、嵌入式处理器的实现、DSP算法的实现、HDL设计输入、仿真、设计优化和高速电路板的布局布线以及特定信号接口的实现等。
图1-7 FPGA技术是多种设计技能的交叉
至今在业内可能还有争论,到底FPGA是属于纯粹软件的范畴还是纯粹硬件的范畴。从FPGA设计的方式和手段上看,和软件有些相似;但从FPGA设计的思想和实现方面看,更多的趋向于硬件层面。因此,用“软硬兼施”这个词来形容FPGA工程师的工作就再贴切不过了。我们说的“软”,一方面的确是传统意义上的软件编程工作可能需要在FPGA中实现,另一方面的“软”则指的是FPGA逻辑实现所需要的代码输入方式。
单纯的软和硬,还只是很低级的技能。无论是在FPGA中内嵌了处理器,还是FPGA外部需要接口的处理器,FPGA都不可避免地要和纯软件打交道,这种软硬衔接部分的设计非常有讲究,这也是FPGA工程师系统思维的一种要求。
虽然FPGA开发中需要涉及众多的技能门类,对于一些规模不大的工程项目,可能FPGA工程师确实要承担起“既当爹又当妈”的重任;但是对于中大规模的工程项目,一定会有一个分工明确的团队协作完成。这样的团队,绝对是一个不折不扣的嵌入式系统精英大荟萃:板级硬件工程师进行FPGA的板级原理图绘制、layout等工作;FPGA工程师做底层逻辑实现;嵌入式软件工程师做软件编程工作;也可能会有算法工程师的参与;当然还可能会有系统工程师统领全局(实际情况是,这个角色往往由项目经理兼任),对各个模块(包括软硬衔接部分)和接口进行划分和界定。
1.4 FPGA应用领域
目前FPGA虽然还受制于较高的开发门槛以及器件本身昂贵的价格,并从应用的普及率上来看和ARM、DSP还是有一定的差距,但是在非常多的应用场合,工程师们还是要别无选择地使用它。FPGA所固有的灵活性和并行性是其他芯片所不具备的,所以它的应用领域涵盖得很广。从技术角度来看,主要是有以下需求的应用场合(如图1-8所示):
图1-8 FPGA应用精彩纷呈
❏ 逻辑粘合,如一些嵌入式处理常常需要地址或外设扩展,CPLD器件尤其适合。已经少有项目会选择一颗FPGA器件专门用于逻辑粘合的应用,但是在已经使用的FPGA器件中顺便做些逻辑粘合的工作倒是非常普遍。
❏ 实时控制,如液晶屏或电机等设备的驱动控制,此类应用也以CPLD或低端FPGA为主。
❏ 高速信号采集和处理,如高速AD前端或图像前端的采集和预处理,近年来持续升温的机器视觉应用也几乎无一例外地使用了FPGA器件。
❏ 协议实现,如更新较快的各种有线和无线通信标准、广播视频及其编解码算法、各种加密算法等,使用FPGA比ASIC更有竞争力。
❏ 各种原型验证系统,由于工艺的提升,流片成本也不断攀升,而在流片前使用FPGA做前期的验证已成为非常流行的做法。
❏ 片上系统,如Altera公司的Soc FPGA和Xilinx公司的Zynq,这类FPGA器件,既有成熟的ARM硬核处理器,又有丰富的FPGA资源,大有单芯片一统天下的架势。
当然了,若从具体的应用领域来看,FPGA在电信、无线通信、有线通信、消费电子产品、视频和图像处理、车载、航空航天和国防、ASIC原型开发、测试测量、存储、数据安全、医疗电子、高性能计算以及各种定制设计中都有涉猎。总而言之,FPGA所诞生并发展的时代是一个好时代,与生俱来的一些特性也注定了它将会在这个时代的大舞台上大放光彩。
1.5 FPGA开发流程
如图1-9所示。这个流程图是一个相对比较高等级的FPGA开发流程,从项目提上议程开始,设计者需要进行FPGA功能的需求分析,然后进行模块的划分,比较复杂和庞大的设计则会通过模块划分把工作交给一个团队的多人协作完成。各个模块的具体任务和功能划分完毕(通常各个模块间的通信和接口方式也同时被确定),则可以着手进行详细设计,包括代码输入、综合优化、实现(映射和布局布线)。为了保证设计达到预期要求,各种设计的约束输入以及仿真验证也穿插其间。在EDA工具上验证无误后,则可以生成下载配置文件烧录到实际器件中进行板级的调试工作。从图1-9中的箭头示意不难看出,设计的迭代性是FPGA开发过程中的一个重要特点,这就要求设计者从一开始就要非常认真细致,否则后续的很多工作量可能就是不断返工。
图1-9 FPGA开发流程
当然了,对于没有实际工程经验的初学者而言,这个流程图可能不是那么容易理解。不过没有关系,我们会简化这个过程,从实际操作角度,以一个比较简化的顺序的方式来理解这个流程。如图1-10所示,从大的方面来看,FPGA开发流程不过是三个阶段,第一个阶段是概念阶段,或者也可以称之为架构阶段,这个阶段的任务是项目前期的立项准备,如需求的定义和分析、各个设计模块的划分;第二个阶段是设计实现阶段,这个阶段包括编写RTL代码、并对其进行初步的功能验证、逻辑综合和布局布线、时序验证,这一阶段是详细设计阶段;第三个阶段是FPGA器件实现,除了器件烧录和板级调试外,其实这个阶段也应该包括第二个阶段的布局布线和时序验证,因为这两个步骤都是和FPGA器件紧密相关的。我们这么粗略的三个阶段划分并没有把FPGA整个设计流程完全的孤立开来,恰恰相反,从我们的阶段划分中,我们也看到FPGA设计的各个环节是紧密衔接、相互影响的。
图1-10 简化的FPGA开发流程