图1: 嵌入式系统的现场可编程门阵列(FPGA)
虽然 FPGA 可以用来设计算术逻辑单元和其他数字电路来执行简单的计算任务,但它实际上在计算方面不能与微控制器或微处理器相比。微处理器或微控制器是一种具有复杂结构的真正的计算设备。然而,FPGA 是相当可比的应用专用集成电路,其中任何 ASIC 功能都可以定制设计和制造在 FPGA 上。
微控制器让工程师掌握高级语言或汇编语言来设计计算机软件,而 FPGA 让工程师自己设计计算机(一个简单的计算设备)。这种基于硬件的嵌入式设计需要对数字电路设计和计算机体系结构有详细的了解。就像微控制器使用汇编语言或高级语言(如 c)编程一样,FPGA 芯片使用 Verilog 或 VHDL 语言编程。就像 c 代码或汇编代码转换成机器代码在各自的 CPU 上执行一样,VHDL 语言转换成数字逻辑块,然后在 FPGA 芯片上加工,为特定应用设计定制计算机。工程师使用 VHDL 或 Verilog 从根级设计数据路径和 ALU 硬件。甚至一个微处理器或者微控制器都可以在 FPGA 上设计,只要它有足够的逻辑块来支持这样的设计。
FPGA-的优点
FPGA 不仅仅是学习数字设计和计算机体系结构的工具。FPGA 芯片在嵌入式系统工程中有一定的实际应用价值。FPGA 芯片为 asic 提供了真正的替代选择。FPGA 具有以下优点,这些优点也说明了它在嵌入式系统中的应用
多线程 FPGA 可以同时处理多条指令。他们可以并行处理指令。在许多应用中,与微控制器相比,这是一个很大的优势。微控制器一次只能执行一条指令,并且只能按顺序执行指令。由于多线程的特点,在许多应用中,FPGA 可以比任何微控制器更快地处理任务。此外,由于进程在逻辑上编码在硬件级别,FPGA 适合于严格专用的应用程序,不像微控制器有一个通用的架构和指令集可供他们处理,以解决一项任务。FPGA 能够高速处理多种简单的逻辑操作,这使得它非常适合于预处理传感器数据、加密、逻辑电路设计、数字音频应用、视频流等多种任务。
虽然微控制器最擅长以较慢的速度解决可能需要标准接口的复杂计算任务,但当应用程序中需要处理的数据量通常较大时,FPGA 具有优势。这都归功于 FPGA 的多线程特性。即使现在很多 FPGA 板都带有内置的 CPU。因此,所有需要的就是为特定于应用程序的处理设计附加逻辑。
设计的灵活性和范围-任何复杂的数字电路都可以在 FPGA 芯片上设计,只要芯片包含足够数量的逻辑块来
仿真设计。它可以用来设计任何外围设备和执行任何计算任务。微控制器没有这样的灵活性。微控制器带有一个通用的计算单元和内置的外围设备,如定时器、 GPIO、中断和串行接口。在微控制器的情况下,没有办法改变芯片以适应专门的应用程序。然而,一个 FPGA 可以编程有像30个定时器或20通道 UART 或50通道 PWM 发生器或任何东西。设计自己选择和要求的芯片的这种灵活性给了嵌入式工程师很大的权力,在这种情况下,应用程序中的计算芯片应该有一个专门的设计。
模拟因素-一般来说,在任何嵌入式系统中,控制器或处理器与提供模拟输入的传感器或需要从控制器或处理器输出模拟信号的执行器耦合。有现场可编程模拟阵列(FPAA) ,可编程进行模拟值。许多 FPGA 芯片是 FPGA 和 FPAA 的组合,其中芯片不仅可以编程到数字电路,而且可以编程到处理模拟信号。这些混合信号芯片包含 ADC (模数转换器)或 DAC (数模转换器)外围设备与模拟信号调理模块。在这种情况下,输出引脚,可以编程有驱动强度和转换率的负载在该引脚的要求。因此,FPGA 芯片不仅可以为模拟应用程序编程,而且还提供了灵活的设计,以适应专用传感器为基础的应用程序。
可重用性-FPGA 芯片可以重新编程,以模拟其他任何数字(以及模拟)电路。这并不是说一旦一个电路被装配在芯片上,它就会保持固定。当芯片接通
电源后,数字设计作为配置数据加载到芯片上。每次芯片启动时都会发生这种情况。这个设计一直保留在芯片上,直到它继续启动为止。这些配置数据可以在下一次启动时更改,因此下一次可以在芯片上仿真一个全新的数字设计。由于该芯片可重复使用,嵌入式工程师可以在同一芯片上进行无数次不同数字设计的实验。
单芯片解决方案-该 FPGA 芯片提供单芯片解决方案的应用。在使用微控制器时,可能需要与其他外围设备(可能不是微控制器内置的)、接口或在 FPGA 上的 asic 连接,所有所需的外围设备以及处理器或控制器都可以在单个芯片上设计。
实时处理-FPGA 芯片不是一般的计算集成电路。它们用于在芯片上制造一个专用的计算设备。与运行程序(机器码)的微控制器不同,数据通路和 ALU 是在 FPGA 上构造的,用于解决特定的计算任务。因此,与其运行一个程序,FPGA 本身被编程来运行一个特定的计算任务。这种硬件级的逻辑执行允许对数据和信息进行实时处理。这就是为什么,FPGA 通常用于高速关键应用,其中微控制器可能会失败,由于其通用架构和代码的依赖性,以运行在固定架构和有限的指令集。
有了上述优点,FPGA 最适合于高速并行处理,要么需要处理的数据量很大,要么处理芯片需要定制外围设备、可配置的模拟输出或执行时间关键的专用应用程序(否则在一般的 CPU 上是不可能的)。FPGA 使嵌入式工程师能够访问复杂的集成设计,否则这些设计只能以高工程成本获得。FPGA 就像一个迷你
半导体代工厂在一个信用卡大小的董事会得到一个良好的开端,在集成数字设计。
在现实世界中,FPGA 可以在生产量不高的特定垂直领域找到应用。它也被广泛地用于原型 ASIC 设计,以最短的时间上市,避免了 ASIC 设计的长制作方法的麻烦。FPGA 的常见应用包括数字信号处理、图像处理、生物信息学、密码学、软件设计的无线电、医学成像、语音识别、电信、数据中心、航空航天电子和安全系统等垂直领域。另一方面,微控制器广泛应用于消费电子、汽车、工业电子、
通信系统等垂直领域的一般嵌入式应用。
FPGA-的缺点
FPGA 具有所有的优点和应用,但缺点很少。这些缺点是由经济性、设计和开发等因素造成的。目前的 FPGA 技术存在以下缺点:
成本-FPGA 板并不便宜。FPGA 板通常价格在50美元或以上。这是许多倍高比任何微控制器板。许多微控制器板可用,甚至在不到10美元。FPGA 板的高成本是使用数字设计和 FPGA 开设嵌入式课程不受欢迎的原因之一。然而,由于 FPGA 板是可重复使用的,并且可以使用数百次,因此它们的高成本对于长期使用来说只是一个象征性的数字。因此,一块 FPGA 板的成本是物有所值的,用于研究和开发目的或原型目的。但是,考虑到 FPGA 板的生产,其高成本可能证明是一个昂贵的项目遥不可及。在这种情况下,尽管微控制器速度很慢,架构通用,缺乏多线程和实时处理,但对于制造商来说是可行的选择。
图2: FPGA
开发板
高功耗要求-大多数 FPGA 板由48v 背板提供动力。FPGA 板的高功耗和高功耗使得其不适用于许多嵌入式应用。另一方面,大多数的微控制器板需要5v 或3.3 v 的电源来运行。这使得微控制器成为设计任何电池供电的便携式嵌入式设备的显而易见的选择。
波动性——数字设计作为配置数据传递给 FPGA 板。当电路板通电时,电路板就会相应地配置,然后开始运行。配置数据要么以主模式存储在闪存中,要么以从模式通过边界扫描(JTAG)接口由处理器传递。一旦电路板断电,配置数据就会丢失。在大多数 FPGA 板中,这种不稳定的特性使得它们不适用于板可能受到电源中断或遭受电源损耗的应用。
启动时间-FPGA 板载入配置数据时,每次他们是加电。这就增加了重要的启动时间。然而,一旦配置数据被加载,FPGA 板可以比微控制器更快地运行。但是,在使用 FPGA 板的情况下,启动时间会导致应用程序的失败,而这些应用程序需要在嵌入式设备启动后立即执行时间关键操作。由于启动时间和配置数据的波动性,FPGA 板不适合嵌入式设备频繁开关的应用。此外,它不可能保持一个 FPGA 板总是在一个嵌入式设备的电源,由于其高功耗的要求。
高引脚计数-FPGA 芯片通常有高数量的引脚。这就是为什么,FPGA 不适用于大小受限的嵌入式应用程序,在这些应用程序中,计算处理器或控制器应该尽可能紧凑,引脚数量最少。相比之下,有许多微控制器有8个或更少的插脚,因此可以很容易地用在一个小工具或设备上。
复杂度——在 FPGA 上工作不像在微控制器上那么容易。年以前,从 FPGA 开始,工程师必须具备详细的数字设计和计算机体系结构知识。然后,VHDL 或 Verilog 比任何用于软件开发甚至汇编语言的高级编程语言都要复杂得多。虽然大多数在 FPGA 中开发所需的工具都是免费提供的,而且有许多 FPGA 板可以以合理的价格(约50美元)提供,但是这些工具使用起来很复杂,在可用的 FPGA 板中仍然很难做出选择。数字化设计还存在许多复杂性、陷阱和注意事项,只有通过实践经验才能掌握。
设计局限性——使用 FPGA,只能为数字设计互连逻辑块。但是,在门级没有控制,通常的综合是非标准的。然而,在测试体系结构或 ASIC 设计的早期阶段,FPGA 是非常有用的。
耐久性——与微控制器相比,FPGA 集成电路的使用寿命较短。虽然微控制器可以在一个设备中使用几十年,但是嵌入式设备中的 FPGA 芯片可能需要在2到5年内更换。
由于 FPGA 的高成本、易变性、启动时间长、功耗高、引脚数量多、使用寿命短以及设计上的局限性,使得 FPGA 芯片的应用越来越少。它们只出现在需要专用架构、定制外围设备和通过并行处理执行关键机器代码的高功率设备中。
结语 -
与微控制器相比,FPGA 芯片有其自身的优缺点。FPGA 可能不适合用于一般的或普通的嵌入式应用程序,但是 FPGA 可以访问和探索集成电路设计的世界,这是微控制器永远不可能做到的。一个嵌入式工程师必须在 FPGA 上工作,在微控制器和微处理器方面有丰富的经验。它将让工程师探索数字世界的内外。在使用微控制器和处理器之前,工程师只能用软件的方式思考问题,但在使用 FPGA 之后,他也可以用硬件的方式思考问题。通过在 FPGA 上工作,工程师获得了软件在处理器和控制器上如何工作的实际知识。
就像从头开始构建代码之后,软件开发透视图中的 api (应用程序编程接口)开始感觉像是编程的简单手柄。汇编语言或者在 VHDL 和 Verilog 之后的嵌入式 c 也是一样的情况。用于嵌入式开发的汇编语言和高级语言将开始感觉像是曾经使用过 VHDL 和 Verilog 的 api。因此,实际上,FPGA 等类似的 CPLD 技术完善和补充了嵌入式工程学科。