当前位置:   article > 正文

学习日记——FPGA入门基础_fpga可以重复编程吗

fpga可以重复编程吗

一、FPGA基础概念

1、FPGA是什么

  • FPGA 就是“可反复编程的逻辑器件”。
  • FPGA(Field Programmable GateArray)是在PAL、GAL等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
  • FPGA 取自 Field Programmable Gate Array 这四个英文单词的首个字母,译为“现场(Field)可编程(Programmable)逻辑阵列(Gate Array)”。该芯片的“可编程性”是针对“数字电路”而言,与 CPU 中软件的可编程是完全不同的。采用该芯片,工程师可以根据需要进行灵活编程,添加各种新功能,以满足不断发展的协议标准或规范,工程师们甚至可以在设计的最后阶段对它进行修改和升级。低成本、高灵活性的 FPGA 是各种应用中定制芯片的绝佳替代品。

2、FPGA 与 ASIC

(1)ASIC:即专用集成电路(Application Specific Integrated Circuit)的简称。电子产品中,它们无所不在,还真是比 FPGA 普及得多得多。但是 ASIC 的功能相对固定,它是为了专一功能或专一应用领域而生,希望对它进行任何的功能和性能的改善往往是无济于事的。
ASIC 是布满铅字的印刷品,那么 FPGA 就是可以自由发挥的白纸一张。

(2)FPGA:使用了 FPGA 器件的电子产品,在产品发布后仍然可以对产品设计作出修改,大大方便了产品的更新以及针对新的协议标准作出的相应改进,从而可以加速产品的上市时间,并降低产品的失败风险和维护成本。相对于无法对售后产品设计进行修改的 ASIC 来说,这是 FPGA特有的一个优势。由于 FPGA 可编程的灵活性以及近年来电子技术领域的快速发展,FPGA 也正在向高集成、高性能、低功耗、低价格的方向发展,并且逐渐具备了与 ASIC 相当的性能,使其被广泛地应用在各行各业的电子及通信设备中。

(3)相同点:当然,FPGA 与 ASIC 的开发过程有一些共通之处(当然并不完全一样,区别也是有的),例如它们都可以使用硬件编程语言 Verilog 或 VHDL,它们在时序设计、仿真验证方面的基本原理、方法或优化技巧基本是相通的。ASIC 开发通常分为前端和后端,前端是后端的输入,前端最终的产出是一个能够描述所实现功能的逻辑门电路及其连接的网表,FPGA 在综合后也是得到一个类似的网表;ASIC 设计后端的任务是把前端得到的网表通过布局布线(需要人工参与)映射到具体的物理结构上,而 FPGA 上与此类似的映射过程通常完全由开发工具包办了,它并不需要设计者太多的参与。当然了,从这样简单的开发对比也可以多少体会到 ASIC 和 FPGA 在成本、功耗或性能上为何存在差异。

3、FPGA、ARM 和 DSP

  • 与 ASIC 相比,FPGA、ARM 和 DSP 都具备与生俱来的可编程特性。FPGA、ARM 和 DSP 都或多或少集成了一些 ASIC功能,正是这些 ASIC 功能,加上“可编程”特性,使得它们相互区别开了,并且各自独霸一方。
  • ARM:是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的 RISC 处理器、相关技术及软件。由 ARM 公司设计的处理器风靡全球,大有嵌入式系统无处不 ARM 的趋势。我们通常所说的 ARM,更多的是指 ARM 公司的处理器,即 ARM处理器。ARM 通常包含一颗强大的处理器内核,并且为这颗处理器量身配套了很多成熟的软件工具以及高级编程语言,这也是它倍受青睐的原因之一。当然了,ARM 不只是一颗处理器
    而已,因为在 ARM 内核处理器周边,各种各样精于控制的外设比比皆是,什么 GPIO、PWM、AD/DA、UART、SPI、IIC……一列一箩筐。ARM 的长处在控制和管理,在很多工业自动化中大有用武之地。
  • DSP:即数字信号处理器,是一种独特的微处理器,有自己的完整指令系统,能够进行高速、高吞吐量的数字信号运算处理。它对各种语音、数据和视频做运算处理;DSP 是为各种数学运算量身打造的。
  • FPGA用于很多原型产品设计过程中,在一些灵活性要求高、定制化程度高、性能要求也特别高的场合,FPGA再合适不过了。FPGA 固然强大,但是它成本、功耗和开发复杂性都很高,而在这些方面,ARM 和 DSP 正好弥补了 FPGA 所带来的缺憾。
  • 之所以会有 ARM、DSP 和 FPGA 的存在,和实际应用情景是非常相关的。对于 ARM,它的主要应用情景常常是有一些低速数据的采集、简单的处理和传输,也还需要一些人机交互手段的存在。前面提到,ARM处理器周边通常外设丰富,且它本身就精于控制,所以就很适合此类应用。对于DSP,有无人机交互就无所谓了,它的应用情景最主要的特点一定是高速数据的实时采集、较复杂的运算处理和传输。DSP对此作过专门优化。FPGA,可以这么说,它是可以补前面二者的“缺”和“漏”,FPGA 可以在 ARM 和 DSP 之外满足各种定制化的需求。ARM 和 DSP 在大批量、低成本的应用中较为常见;而 FPGA 则更多的在小批量、定制化、成本不敏感的行业中应用。

4、Verilog 与 VHDL

  • 早期的 FPGA 开发通过绘制原理图(和现在的硬件工程师绘制原理图的方式大体相仿)完成。而随着 FPGA 规模和复杂性的不断攀升,这种落后的设计方式几乎已经被大家遗忘了,取而代之的是能够实现更好的编辑性和可移植性的代码输入方式。这两种语言都是通过一系列分层次的模块来表示复杂的数字系统,逐个模块的仿真验证后,再集成各个模块交由综合工具生成门级的网表,最后由布局布线工具将其映射到最终的 FPGA 器件上。
  • Verilog :是在 1983 年由 Gateway Automation 公司的 Philip Moorby 发明,此人也是目前 EDA 行业鼎鼎有名的 Cadence 公司的第一合伙人。时隔 10 年,1993 年,几乎所有的 ASIC厂商都开始支持 Verilog,当然 FPGA 厂商也不例外,此时,IEEE(电气和电子工程师协会)正式将当时的 Verilog2.0 作为标准的提案。1995 年,IEEE 制定了 Verilog 的标准 IEEE1364-1995,即称之为Verilog-95 的标准。2001 年,在进行了一番修正和扩展之后,发布了 IEEE 1364-2001 标准,即 Verilog-2001。2005 年,Verilog 再次做出了细微的修正,发布了IEEE1364-2005 标准,即 Verilog-2005。
  • VHDL :是 Very High Speed Integrated Circuit Hardware Description Language 的缩写,也是诞生于上世纪 80 年代初期,但它与 Verilog 的民间背景不同,VHDL 则是美国军方研发,且早在 1987 年就被 IEEE 和美国国防部确认为标准硬件描述语言,并公布了 VHDL 的标准版本 IEEE-1076-1987(简称 87 版)。1993 年,IEEE 对 VHDL 进行了修订,从更高的抽象层次和系统描述能力上扩展 VHDL 的内容,公布了新版本的 VHDL,即 IEEE 标准的 1076-1993版本(简称 93 版)。

二、FPGA 发展概述

  • 上世纪 60 年代中期,TI 公司设计制造了各式各样的实现基本逻辑门电路功能的芯片,相信今天很多的工程师仍然很熟悉这些主要面对军工应用的 54XX 和商业应用的 74XX 芯片。据说早期的工程师甚至能够单凭着这些芯片架构出一颗简单 CPU 的功能。
  • 从 1971 年 Intel 公司的第一颗 4 位微处理器 Intel 4004 到上世纪 80 年代初被奉为经典的8051 单片机,再到今天各大嵌入式处理器厂商竞相使用的由 ARM 公司推出的各种 Cortex内核。深入处理器的底层结构,你会发现他们最本质的东西并没有太大的改变。而处理器再强大,一颗芯片尽可以将各种外设嵌入其中,但对于任何一颗已经批量出货的芯片而言,它的功能是固定的,若想在既有外设功能的基础上有任何的扩展,或许不是遇到电气特性不支持就是遇到 IO 太少的尴
    尬,而这些问题也就催生了可编程逻辑器件的诞生。
  • 今天的 CPU 周围已很难看见 54 或 74字样的 ASIC 了,取而代之的可能是管脚密集的 CPLD 或 FPGA。在系统的可扩展性和灵活性方面,FPGA/CPLD 有着得天独厚的优势。它更多的被应用到了通信、数据采集、网络、图像处理、算法实现等对数据传输吞吐量和处理速度有更高要求的场合。
  • 第一款可编程逻辑器件(PLD)最初是在 1970 年以 PROM 的形式进入人们的视野,这种 PROM 结构的可编程逻辑器件可以实现简单的逻辑功能,很容易便可替代当时流行的 54 或 74 系列逻辑门电路。受限于 PROM 的结构,第一款可编程逻辑器件的输入接口相对较少。因此,可编程逻辑阵列(PAL)便孕育而生,PAL 由一个可编程的“与”平面和一个固定的“或”平面构成,或门的输出可以通过触发器有选择地被置为寄存状态。PAL 器件是现场可编程的,它的实现工艺有反熔丝技术、EPROM 技术和 EEPROM 技术。
  • PAL 的问题在于其实现方式使得信号通过可编程连线的时间相对较长。在 PAL 的基础上,又发展了一种通用阵列逻辑 GAL,它要比 PAL速度快许多,它采用了 EEPROM 工艺,实现了电可擦除、电可改写,其输出结构是可编程的逻辑宏单元,因而它的设计具有很强的灵活性,至今仍有许多人使用。
  • 这些早期的 PLD 器件的一个共同特点是可以实现速度特性较好的逻辑功能,但其过于简单的结构也使它们只能实现规模较小的电路。电子领域的发展趋势总是朝着速度更快、功能更强、体积更小、成本更廉价的方向迈进。复杂可编程逻辑器件(CPLD)的诞生也就顺理成章了。Altera 公司于 1984 年发明了基于CMOS 和 EPROM 技术相结合的 CPLD。CPLD 可实现的逻辑功能相比 PAL 和 GAL 有了大幅度的提升,已经可以胜任设计中复杂性较高、速度也较快的逻辑功能,尤其在接口转换、总线控制和扩展方面有着较多的应用。经过几十年的发展,今天的 CPLD 功能和性能也得到了进一步的提升,其基本结构由可编程 IO 单元、基本逻辑单元、布线池以及其他相关辅助功能块组成。Altera、Xilinx 和 Lattice 是主要的 CPLD 供应商。
  • 创始人之一 Ross Freeman 发明了现场可编程门阵列(FPGA),Freeman 先生发明的 FPGA 是一块全部由“开放式门”组成的计算机芯片。采用该芯片,工程师可以根据需要进行灵活编程,添加各种新功能,以满足不断发展的协议标准或规范,工程师们甚至可以在设计的最后阶段对它进行修改和升级。Freeman 先生当时就推测低成本、高灵活性的 FPGA 将成为各种应用中定制芯片的替代品。
  • 三十多年后的今天,伴随着制造工艺的不断进步,FPGA 在深亚微米甚至深亚纳米时代一直走在了创新第一线。如今的 FPGA 器件,其组成不仅限于基本的可编程逻辑单元、可编程 IO 单元、丰富的布线资源,而且还拥有灵活的时钟管理单元、嵌入式块 RAM 以及各种通用的内嵌功能单元,很多器件还顺应市场需求内嵌专用的硬件模块。

三、FPGA 的优势

1、在考虑是否使用 FPGA 技术来实现目标产品时,我们需要重点从以下几个方面进行评估。
● 可升级性——产生在设计过程中,甚至将来产品发布后,是否有较大的功能升级需求?是否应该选择具有易于更换的同等级、不同规模的 FPGA 器件?
● 开发周期——产品开发周期是否非常紧迫?若使用 FPGA 开发,是否比其他方案具有更高的开发难度,能否面对必须在最短的时间内开发出产品的挑战?
● 产品性能——产品的数据速率、吞吐量或处理能力上是否有特殊要求?是否应该选择性能更好或速度等级更快的 FPGA 器件?
● 实现成本——是否有基于其它 ASIC、ARM 或 DSP 的方案,能够以更低的成本实现设计?FPGA 开发所需的工具、技术支持、培训等额外的成本有哪些?通过开发可复用的设计,是否可以将开发成本分摊到多个项目中?是否有已经实现的参考设计或者IP 核可供使用?
● 可用性——器件的性能和尺寸的实现,是否可以赶上量产?是否有固定功能的器件可以代替?在产品及其衍生品的开发过程中,是否实现了固定功能? ● 其它限制因素——产品是否要求低功耗设计?电路板面积是否大大受限?工程实现中是否还有其它的特殊限制?
2、基于以上的这些考虑因素,我们可以从如下三大方面总结出在产品的开发或产品的生命周期中,使用 FPGA 技术实现所能够带来的潜在优势。
● 灵活性:
可重编程,可定制。
易于维护,方便移植、升级或扩展。
降低 NRE 成本,加速产品上市时间。
支持丰富的外设接口,可根据需求配置。
● 并行性
更快的速度、更高的带宽。
满足实时处理的要求。
● 集成性
更多的接口和协议支持。
可将各种端接匹配元件整合到器件内部,有效降低 BOM 成本。
单片解决方案,可以替代很多数字芯片。
减少板级走线,有效降低布局布线难度。
3、以下这些方面看,选择 FPGA 技术来实现产品的开发设计有时并不是明智的决定。
● 在某些性能上,FPGA 可能比不上专用芯片;或者至少在稳定性方面,FPGA 可能要逊色一些。
● 如果设计不需要太多的灵活性,FPGA 的灵活性反而是一种浪费,会潜在的增加产品的成本。
● 相比特定功能、应用集中的 ASIC,使用 FPGA 实现相同功能可能产生更高的功耗。
● 在 FPGA 中除了实现专用标准器件(ASSP)所具有的复杂功能,还得添加一些额外的功能,实属一大挑战。FPGA 的设计复杂性和难度可能会给产品的开发带来一场噩梦。

四、FPGA 应用领域

1、从技术角度来看,主要是有以下需求的应用场合。
● 逻辑粘合,如一些嵌入式处理常常需要地址或外设扩展,CPLD 器件尤其适合。今天已经少有项目会选择一颗 FPGA 器件专门用于逻辑粘合的应用,但是在已经使用的FPGA 器件中顺便做些逻辑粘合的工作倒是非常普遍。
● 实时控制,如液晶屏或电机等设备的驱动控制,此类应用也以 CPLD 或低端 FPGA 为主。
● 高速信号采集和处理,如高速 AD 前端或图像前端的采集和预处理,近年来持续升温的机器视觉应用也几乎是无一例外的都使用了 FPGA 器件。
● 协议实现,如更新较快的各种有线和无线通信标准、广播视频及其编解码算法、各种加密算法等,诸如此类小批量、定制化、更新换代频繁的应用使用FPGA 比 ASIC更有竞争力。
● 各种原型验证系统。由于工艺的提升,流片成本也不断攀升,而在流片前使用 FPGA做前期的验证已成为非常流行的做法。
● 并行计算。过去传统的 CPU 计算受限于其串行顺序处理的架构,已经很难适应今天的云计算和数据中心对大数据运算的需求了;而 GPU 虽然在并行处理以及所使用的高级编程语言上有不小的优势,也在过去一段时间内成为了此类应用的主流方案,但也受限于极高的成本和功耗代价;相比之下,单位功耗性能是 GPU的 3~4 倍的 FPGA则大有取而代之之势。
● 片上系统,如 Altera 公司的 Soc FPGA 和 Xilinx 公司的 Zynq,这类 FPGA 器件,既有成熟的 ARM 硬核处理器,又有丰富的 FPGA 资源,大有单芯片一统天下的架势。
2、若从具体的行业细分来看

  • FPGA 在电信、无线通信、有线通信、消费电子产品、视频和图像处理、车载、航空航天和国防、ASIC 原型开发、测试测量、存储、数据安全、医疗电子、高性能计算以及各种定制设计中都有涉猎。

五、FPGA 开发流程

在这里插入图片描述

  • 如图所示,这是一个基于 FPGA 开发工具的开发流程图。当然了,在此之前,从FPGA 项目的提上议程开始,设计者需要进行 FPGA功能的需求分析,然后进行模块的划分,比较复杂和庞大的设计,则会通过模块划分把工作交给一个团队的多人协作完成。各个模块的具体任务和功能划分完毕(通常各个模块间的通信和接口方式也同时被确定),则可以着手进行详细设计,其各个步骤包括设计输入、设计综合、约束输入、设计实现、分析实现结果(查看工具给出的各种报告结果)。为了保证设计达到预期要求,设计仿真以及设计优化则穿插其间。在EDA 工具上验证无误后,则可以生成下载配置文件烧录到实际器件中进行板 级的调试工作。从图中的箭头示意不难看出,设计的迭代性是 FPGA开发过程中的一个重要特点,这就要求设计者从一开始就要非常认真细致,否则后续的很多工作量可能就是不断的返工。

1、设计输入

  • 设计输入阶段,设计者需要创建 FPGA 工程,并且创建或添加设计源文件到工程中。FPGA工程包含了各种不同类型的源文件和设计模块,比如HDL 文件、EDIF 或 NGC 网表文件、原理图、IP 核模块、嵌入式处理器以及数字信号处理器模块等。

2、设计综合

  • 设计综合阶段,FPGA 开发工具的综合引擎将编译整个设计,并将 HDL 源文件转译为特定结构的设计网表。Vivado 设计工具内置 Synthesis 综合功能,也支持第三方综合工具,如 Synplify, Synplify Pro 和 Precision 等软件工具的使用。

3、约束输入

  • 约束输入阶段,设计者可以指定时序、布局布线或者其它的设计要求。Vivado 工具支持专用的编辑器实现时序约束、I/O引脚约束和布局布线约束。

4、设计仿真

  • 在整个开发过程的任意时刻,设计者都可以使用仿真工具对 FPGA 工程进行功能验证,比如 Vivado 内置的仿真器或者第三方工具
    ModelSim 仿真器。

5、设计实现

  • 设计综合之后,接着就需要设计实现,将逻辑设计进一步转译为可以被下载烧录到目标FPGA 器件中的特定物理文件格式。使用 Vivado的工程导航窗口中支持的目标和策略设置属性,可以控制设计实现以及结果优化。为了更快的达到设计目标,可以使用SmartXplorer进行不同的处理策略实现,达到多次的自动实现处理以完成设计目标。

6、分析实现结果

  • 完成设计实现后,必须对设计约束、器件资源占用率、实现结果以及功耗等设计性能进行分析。既可以查看静态报告,也可以使用 Vivado中内置的工具动态的查看设计综合实现 的结果。对于时序结果和功耗结果,Vivado 内置工具中都可以进行查看。此外,在系统调试时也可以使用在线逻辑分析仪 ILA。

7、 设计优化

  • 基于对设计结果的分析,设计者可以对设计源文件、编译属性或设计约束进行修改,然 后重新综合、实现以达到设计最优化。

8、板级调试

  • 在生成下载配置文件后,设计者便可以对 FPGA 器件进行调试。在此过程中,既可以实现下载配置文件的快速在线烧录进行实时调试验证,也可以实现产品固化烧录使其可以离线 运行。

FPGA 开发流程是三个阶段

  • 第一个阶段是概念阶段,或者也可以称之为架构阶段,这个阶段的任务是项目前期的立项准备,如需求的定义和分析、各个设计模块的划分;

  • 第二个阶段是设计实现阶段,这个阶段包括编写 RTL代码、并对其进行初步的功能验证、逻辑综合和布局布线、时序验证,这一阶段是详细设计阶段;

  • 第三个阶段是 FPGA 器件实现,除了器件烧录和板级调试外,其实这个阶段也应该包括第二个阶段的布局布线和时序验证,因为这两个步骤都是和FPGA 器件紧密相关的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/623300
推荐阅读
相关标签
  

闽ICP备14008679号