1. 硬件说明篇¶
硬件说明篇只包含两个章节的内容,笔者会通过这两个章节,对FPGA芯片和教程配套的FPGA开发平台做系统性讲解。
不少读者都知道,哲学上对个人存在一个灵魂三问:“我是谁?我从哪里来?我要到哪里去?”。在本教程的第2章节,我们也针对FPGA提出提出了灵魂三问:“FPGA是什么?FPGA的优势是什么?FPGA能用来干什么?”。围绕这三个问题,在第2章节笔者对FPGA做了系统性介绍。完成第2章节的学习后,相信读者会对 FPGA有一个全新的的认识,同时,读者也会提出FPGA第四问:FPGA怎么使用?恭喜这位读者,你已经对FPGA产生了兴趣,而这一问题的答案正是本书编写的目的所在。
要加入FPGA 的学习,开发平台必不可少。在教程的第3章节的第1小节我们对教程配套的硬件开发平台“征途Pro”做了系统性的介绍,教程与板卡配套使用,事半功倍;第2小节对FPGA产业的国内外现在做了简单介绍;后面3个小节对主控芯片的相关内容做了详细介绍。
2. 初识FPGA¶
2.1. FPGA是什么¶
2.1.1. 名词解释¶
FPGA(Field Programmable Gate Array,简称FPGA),译文:现场可编程门阵列,一种主要以数字电路为主的集成芯片,于1985年由Xilinx创始人之一Ross Freeman发明,属于可编程逻辑器件PLD(Programmable Logic Device)的一种。真正意义上的第一颗FPGA芯片XC2064为Xilinx所发明,这个时间差不多比著名的摩尔定律晚20年左右,但是FPGA一经发明,后续的发展速度之快,超出大多数人的想象。
图 2‑1 FPGA
2.1.2. FPGA发展历程¶
在可编程逻辑器件PLD 未发明之前,工程师们使用包含若干个逻辑门的离散逻辑芯片进行电路系统的搭建,复杂的逻辑功能实现起来较为困难。
为了解决这一问题,20世纪70年代,可编程逻辑阵列PLA(Programmable Logic Array)问世,PLA中包含了一些固定数量的与门、非门,分别组成了“与平面”和“或平面”,即“与连接矩阵”和“或连接矩阵”,以及仅可编程一次的连接矩阵(因为编程基于的是熔丝工艺),因此可以实现一些相对复杂的与、或多项表达式的逻辑功能,PLA内部结构如图 2‑2所示。
与PLA同时问世的还有可编程只读存储器PROM(Programmable Read-Only Memory),PROM内部结构如图 2‑3所示。与PLA相同,PROM内部包含“与连接矩阵”和“或连接矩阵”,但是与门的连接矩阵是硬件固定的,只有或门的连接矩阵可编程。
图 2‑2 PLA内部结构
图 2‑3 PROM内部结构
若只有与门的连接矩阵可编程,而或门的连接矩阵是硬件固定的,那么这种芯片叫做可编程阵列逻辑器件PAL(Programmable Array Logic),根据输出电路工作模式的不同,PAL可分为几类,有三态输出、寄存器输出、互补输出,但PAL仍使用熔丝工艺,只可编程一次。PAL结构图如图 2‑4所示。
图 2‑4 PAL结构图
在PAL的基础上,又发展出了通用阵列逻辑器件GAL( Generic Array Logic),相比于PAL有两点改进:一是采用了电可擦除的CMOS工艺,可多次编译,增强了器件的可重配置性和灵活性;二是采用了可编程的输出逻辑宏单元 OLMC(Output Logic Macro Cell),通过编程OLMC可将GAL 的输出设置成为不同状态,仅用一个型号的GAL就可以实现所有PAL器件输出电路的工作模式,增强了器件的通用性。GAL结构图如图 2‑5所示。
图 2‑5 GAL结构图
早期的可编程逻辑器件主要由上述四种类型的芯片组成,即PROM、PLA、PAL和GAL。它们的共同特点是可以实现速度特性较好的逻辑功能,但由于其结构过于简单所以只能实现规模较小的数字电路。
随着科技的发展、社会的进步,人们对芯片的集成度要求越来越高。早期的PLD产品不能满足人们的需求,复杂可编程逻辑器件CPLD(Complex Programmable Logic Device)诞生。CPLD可以看成是PLA器件结构的延续,一个CPLD器件也可以看作若干个PLA和一个可编程连接矩阵的集合。CPLD内部结构图如图 2‑6所示。
图 2‑6 CPLD结构图
FPGA比CPLD早几年问世,和CPLD并称为高密度可编程逻辑器件,但它们有着本质的区别。FPGA芯片的内部架构并没有沿用类似PLA的结构,而是采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,改变以往PLD器件大量使用与门、非门的思想,大量使用查找表和寄存器。
除此之外,在资源类型、速度等方面FPGA和CPLD也存在差异,如图 2‑7所示。
图 2‑7 FPGA与CPLD性能比较
FPGA的类型从内部实现机理来讲,可以分为几类,分别是:基于SRAM 技术、基于反熔丝技术、基于 EEPROM/FLASH技术。就电路结构来讲,FPGA 可编程是指三个方面的可编程:可编程逻辑块、可编程 I/O、可编程布线资源。可编程逻辑块是 FPGA 可编程的核心,我们上面提到的三种技术也是针对可编程逻辑块的技术。这三方面的可编程资源,在后面的章节中会穿插讲解,在这里就不专门进行叙述了。FPGA结构图如图 2‑8所示。
图 2‑8 FPGA结构图
2.2. FPGA的技术优势¶
在上一小节中,我们着重讲述了FPGA的发展历程,了解了FPGA的前世今生,在本小节我们着重讲述一下FPGA 的技术优势。
许多读者都应该知道FPGA功能的强大,但它强大在哪儿?以单片机举例说明,我们都知道,单片机功能强大,几乎无所不能,而FPGA与之相比只强不弱。因为只要单片机能实现的功能FPGA就一定能实现,当然这需要加一个大前提——就是要在FPGA资源足够大的情况下;但是FPGA能实现的功能单片机却不一定能够轻松做 到,这是不争的事实,如果你不相信那只能够说明你还不了解FPGA。
说到这里,读者不禁要问:既然FPGA这么厉害,为什么单片机的使用范围更广?那是因为在商业中,价格往往是影响产品的重要因素之一。单片机的价格要远远低于FPGA,而且FPGA的价格根据性能和资源的不同,价格也存在很大差异,单枚FPGA芯片价格从几十元到几十万元不等。与之相比,单片机的价格要便宜很多,同样 的功能我们如果可以用价格低廉的单片机实现就不会选择相对昂贵的FPGA了,除非单片机满足不了功能需求。所以公司自身开发为了节约成本可能会选择更加便宜的单片机,而不会选择选择相对较贵的FPGA,因为单片机、ARM这种微处理器的需求量很大,所以价格上更有优势。
但无论是单片机、ARM还是FPGA它们都只是一种帮助我们实现功能的工具,具体如何选择需要具体问题具体分析。总之没有万能的工具,只有符合生产需求的工具。我们不要对某种工具存在着偏见,要综合的考虑,同样当你了解更多的时候,你会发现这些工具你最终都需要掌握。
相信读者在翻看本教材目录时,不禁会产生一些疑问,教程涉及的的诸多例程不就是单片机、ARM的那一套吗,也没发现FPGA能强大到哪里。其实本教程只是带你掌握FPGA的基本设计方法,更准确一点说这是一本FPGA的入门教程,FPGA有很多特殊的应用领域,而这些领域就不像是点亮一个小灯、驱动个数码管、搞个LC D显示、传输串口数据这么简单了,FPGA具体的应用方向我们会在下一小节详细列举。
图 2‑9 FPGA + ARM
FPGA的应用场景远没有单片机和ARM这么多,主要针对单片机和ARM无法解决的问题。比如要求灵活高效、高吞吐量、低批量延时、快速并行运算、可重构、可重复编程、可实现定制性能和定制功耗的情况,这些工作只能FPGA胜任。
而相对于专门目的而设计的集成电路(Application Specific Integrated Circuit,ASIC),FPGA具有3点优势:
灵活性:通过对 FPGA 编程,FPGA 能够执行 ASIC 能够执行的任何逻辑功能。FPGA 的独特优势在于其灵活性,即随时可以改变芯片功能,在技术还未成熟的阶段,这种特性能够降低产品的成本与风险,在 5G 初期这种特性尤为重要。
上市时间:由于 FPGA 买来编程后既可直接使用,FPGA 方案无需等待三个月至一年的芯片流片周期,为企业争取了产品上市时间。
成本:FPGA 与 ASIC 主要区别在 ASIC 方案有固定成本而 FPGA 方案几乎没有,在使用量小的时候,FPGA 方案由于无需支付一次性百万美元的流片成本,同时也不用承担流片失败风险,FPGA 方案的成本低于 ASIC,随着使用量的增加,FPGA 方案在成本上的优势逐渐缩小,超过某一使用量后,ASIC 方案由于大量流片产生了规模经济,在成本上更有优势。
图 2‑10 FPGA方案和ASIC方案成本比较
因此在FPGA通常在数字信号处理、视频处理、图像处理、5G通信领域、医疗领域、工业控制、云服务、加速计算、人工智能、数据中心、自动驾驶、芯片验证等领域发挥着不可替代的作用。只有掌握了通用的FPGA设计方法,才能够在FPGA独领风骚的领域中大展宏图。FPGA主要应用方向如图 2‑11所示。
图 2‑11 FPGA应用方向
2.3. FPGA的应用方向¶
学习一项技术的最开始就会有这样的问题,这项技术的可以来做什么?能够有多大的能耐?我们为什么要学?等等一系列很有求知欲的问题。为了让大家在正式开始 FPGA学习之前,明白自己将来可能在哪些领域找到自己的一片天空,这一节读者可以作为精神粮食,作为鼓舞自己学习下去的一个动力。
FPGA 的学习之路会比较痛苦,人每每遇到了痛苦就会出现逃避的自然反应,懒惰、放弃的思想油然而生,与其花钱买那些充满传奇色彩的励志书籍来安慰自己还不如重新看看这一小节,看看自己以后的美好发展空间,于是乎会有种找到天堂般的感觉。
FPGA是介于软硬件之间的一朵奇葩。你用它做接口、做通信,他就偏向硬件;你用它做算法、做控制,他就偏向软件。而且随着人工智能、机器视觉的崛起,FPGA更加偏向软件算法的异构,有和GPU一争高下的潜力。FPGA与GPU性能对比图,如图 2‑12所示。
图 2‑12 FPGA与GPU性能对比图
FPGA软件方向:以软件开发为主,开发FPGA在数据分析、人工智能、机器视觉等领域的加速应用能力,主要采用OpenCL和HLS技术实现软硬件协同开发。
FPGA硬件方向:以逻辑设计为主,针对FPGA特定领域的应用设计和集成电路设计,以及芯片验证能力。
FPGA 最初的应用领域是通信领域,但是随着信息产业和微电子技术的发展,FPGA 技术已经成为信息产业最热门的技术之一,应用范围扩大,遍及航空航天、汽车、医疗、广播、测试测量、消费电子、工业控制等热门领域,而且随着工艺的发展和技术的进步,从各个角度开始渗透到生活当中。下面我们主要简单列举目前FPGA应用比较广泛的几个领域,只有清楚了这些应用领域,对我们来讲才有更多的发展空间。
通信方向:通信领域是 FPGA 应用的传统领域,发展至今依然是 FPGA 应用和研究热点。我们这里将通信领域分成有线通信领域和无线通信领域分别介绍。FPGA和其他ASIC芯片最大不同在于它的可编程特性。FPGA在通信领域几乎是万能的,FPGA能做什么,很大程度上取决于用户的设计能力。
有线领域:从广域网和城域网到移动回程接入网和基于xPON 的接入网,FPGA都可提供全套的解决方案进行产品的快速开发。如目前的MSTP产品,从PDH到SDH,从EoP到EoS,所有的功能都可用FPGA实现; 如PTN产品,其OAM、QoS、PTP、以太网协议转换等;再如OTN产品,从ODU到OTU、以及SAR、Interlaken、Fabric等。以及目前接入的主流技术XPON产品,都可以用FPGA实现功能。
无线领域:由于FPGA自身嵌入了处理器(SOPC),其使其应用更加的广泛,具体应用领域如:实现语音合成,纠错编码,基带调制解调,以及系统控制等功能;实现基带调制解调功能;定时恢复、自动增益和频率控制、符号检测、脉冲整形、以及匹配滤波器等。但由于无线领域需要大量的复杂数学运算,对FPGA的要求非常高。
图 2‑13 FPGA无线领域的应用
视频图像处理方向:视频图像处理至始至终都是多媒体领域最热门的技术,特别在不断追逐更高清、更真实图像的欲望驱使下,视频图像的处理数据量越来越大。用FPGA做图像处理最关键的一点优势就是:FPGA能进行实时流水线运算,能达到最高的实时性。因此在一些对实时性要求非常高的应用领域,做图像处理基本 只能用FPGA。例如在一些分选设备中图像处理基本上用的都是FPGA,因为在其中相机从看到物料图像到给出执行指令之间的延时大概只有几毫秒,这就要求图像处理速度极快且延时固定,只有FPGA进行的实时流水线运算才能满足这一要求。如今嵌入式视觉的概念很宽,包括图像处理(ISP),视频处理,视频分析等,这些功 能都能在FPGA上面实现。在ISP方面,比如降噪、宽动态、去雾,3A等;在视频处理方面,比如缩放、去隔行、全景拼接、鱼眼矫正等;在视频分析方面,包括边缘,形状,纹理提取,物体检测、分类、背景建模等。产品例子包括全景相机、4K智能相机、高清微投、大屏显示等。
图 2‑14 FPGA视频图像处理方向的应用
数字信号处理方向:无线通信、软件无线电、高清影像编辑和处理等领域,对信号处理所需要的计算量提出了极高的要求。传统的解决方案一般是采用多片DSP并联构成多处理器系统来满足需求。但是多处理器系统带来的主要问题是设计复杂度和系统功耗都大幅度提升,系统稳定性受到影响。FPGA支持并行计算,而且密 度和性能都在不断提高,已经可以在很多领域替代传统的多DSP解决方案。例如,实现高清视频编码算法H.264。采用TI公司1GHz主频的DSP芯片需要4颗芯片,而采用Altera的StrtixII EP2S130芯片只需要一颗就可以完成相同的任务。FPGA的实现流程和ASIC芯片的前端设计相似,有利于导入芯片的后端设计。
图 2‑15 FPGA数字信号处理方向的应用
高速接口方向:FPGA可以用来做高速信号处理,一般如果AD采样率高,数据速率高,这时就需要FPGA对数据进行处理,比如对数据进行抽取滤波,降低数据速率,使信号容易处理,传输,存储。在实际的产品设计中,很多情况下需要与PC机进行数据通信。比如,将采集到的数据送给PC机处理,或者将处理后的结 果传给PC机进行显示等。PC机与外部系统通信的接口比较丰富,如ISA、PCI、PCI Express、PS/2、USB等。传统的设计中往往需要专用的接口芯片,比如PCI接口芯片。如果需要的接口比较多,就需要较多的外围芯片,体积、功耗都比较大。采用FPGA的方案后,接口逻辑都可以在FPGA内部来实现了 ,大大简化了外围电路的设计。在现代电子产品设计中,存储器得到了广泛的应用,例如SDRAM、SRAM、Flash等。这些存储器都有各自的特点和用途,合理地选择储存器类型可以实现产品的最佳性价比。由于FPGA的功能可以完全自己设计,因此可以实现各种存储接口的控制器。
图 2‑16 FPGA高速接口方向的应用
人工智能机器学习方向:近年来FPGA在人工智能机器学习中的应用越来越广泛,主要集中在前端和边缘侧。具体来讲,在ADAS/自动驾驶上可以实现车辆、行人、车道、交通标志以及可行驶区域检测,可以做传感器融合;在智能安防上,可以实现车辆、车型、车牌、交通违规、车流量、人流量、人脸等检测;在无人机 上,可以实现自动避障、自动跟随等功能;在医疗影像设备上,可以进行医疗图像的分析,帮助医生判断是不是可能有癌症或异常;在机器人上,可以实现增强学习,让机器人学习新的技能。
图 2‑17 FPGA人工智能方向的应用
IC原型验证:FPGA在数字IC领域中是必不可少的,已经被用于验证相对成熟的RTL,
IC原型验证:FPGA在数字IC领域中是必不可少的,已经被用于验证相对成熟的RTL,因为相比用仿真器,或者加速器等来跑仿真,FPGA的运行速度,更接近真实芯片,可以配合软件开发者来进行底层软件的开发。在纯硬件方面,由于FPGA供应商尽快转向最先进的制造工艺节点,FPGA原型设计变得更加简单和强大。
FPGA验证在代码设计完成,功能验证以后。目的是保证设计的功能可以在FPGA上实现,也就是做硬件仿真。这样能进一步保证在FPGA上验证的结果和流片的结果相同,当然最后还牵涉到后端设计和工艺。如果做的IC比较大,就需要裁减原来IC的功能再进行FPGA验证了。最终的目的也是为了保证芯片设计符合要求,顺利 流片。可以看到在芯片制造出来之前,很多精力会花费在RTL代码验证工作上,另外软件的相关开发工作,也会在得到芯片前开始,这两方面都需要借助FPGA原形来模拟芯片的行为,帮助硬件开发和软件开发者,共同提升工作效率。
图 2‑18 FPGA在IC芯片设计与验证方向的应用
总之还有很多FPGA可以大显身手的领域,这里不再列举更多,随着学习的深入,你会越来越了解FPGA的用处。本教程主要以学习FPGA工具通用的设计方法为主,其内容可能会涉及上面提到的一些大方向中的基础内容,但是不会针对某一个具体的方向或应用领域深入展开。本教程作为学习者在以后进入各大方向深入学习开发的一 个敲门砖,学好了本书中的内容,会让你掌握正确、高效的FPGA开发方法,只有掌握了真正的学习方法,才能使你以后无论从事哪个方面的具体应用,都能够自己独立深入下去,会对你有巨大的帮助。