微控制器无处不在,如果你是一个嵌入式软件工程师,你可能会注意到有不少玩具、工具、小配件和设备,它们都是由小而便宜的微控制器控制的,从电视遥控器到咖啡壶再到会说话的玩具,应有尽有;如果你是一名电子爱好者,你可能会熟悉Arduino,它由Atmel(现在的MicrochipTechnology公司,曾经的Actel公司也属于这家公司)的一个小型微控制器驱动,数以百万计的Arduinos已销售给世界各地的爱好者,它们便宜,有趣,而且相对容易使用。
那么,为什么到处都是微控制器,却没有FPGA呢?为什么FPGA无法控制咖啡机或让Elmo娃娃活过来?主要原因是成本。消费电子行业对成本非常敏感,总体上使用的微控制器数量最多。消费者想要买到最便宜的产品,生产这些产品的公司会尽可能地压缩每一分钱来实现这一目标。
微控制器的种类繁多,每种微处理器都为一个专用目的而设计,这有助于企业降低成本。例如,如果需要一个模数转换器(ADC)、两个USB接口和至少30个通用输入/输出(GPIO)引脚,则有一款微控制器完全符合这些规格。如果只需要一个USB接口怎么办?可能也有其他种类的微控制器具备这些规格。具备这样的多样性,就没有必要为额外的功能付费了,公司可以找到一个最便宜的微控制器,并在此过程中节省资金。
FPGA的通用性要大得多。使用单个FPGA,可以创建5个不带USB接口的ADC接口,或者创建3个不带ADC接口的USB接口。FPGA是一张白纸,许多不同的内部线路(称为路由)来支持所有这些不同的应用需求,路由增加了成本和复杂性。在绝大多情况下,你不会为不需要的额外功能和灵活性付费。
另一个影响成本的因素是数量。如果购买1000万个微控制器,将比只购买100,000个FPGA花更少的钱,这在消费电子领域并非不切实际。与此同时,FPGA通常以相对较少的数量生产和销售,因此它们的单位成本更高。这有点像鸡生蛋还是蛋生鸡的问题,如果FPGA数量多了,价格会更低,但数量一多,就必须降低价格。那么如果FPGA的成本和微控制器的成本一样,会使用更多的FPGA吗?很可能会有,但FPGA的使用更为复杂,这对FPGA不很有利。
由于微控制器是为特定用途而设计的,因此设置起来相对容易,可以在几个小时内完成微控制器的设置和运行。相比之下,需要对FPGA内部的所有组件进行编程,这非常耗时。尽管有一些硬IP模块可以让你入门,但大部分设备是可编程逻辑,也即是一片空白---需要自行设计。用Verilog或VHDL语言编写代码也比用C语言编写代码花费更长的时间,通常用C语言编写微控制器程序,C语言在高层级上编写代码,用一行代码可以做更多事情。使用Verilog和VHDL编码的层级要低得多:需要用代码创建独立的门和走线。可以把低层级编程想象成使用单个的乐高积木,高层级编程想象成使用预先构造好的乐高积木。这增加了复杂性,增加了时间,也增加了成本。工程师希望得到最简单的解决方案,而大多数情况下,微控制器比FPGA更简单。
另一个需要考量的因素是设备消耗的电量。许多电子设备都是靠电池运行的,因此通过尽可能降低设备的功耗来最大限度地延长其使用时长变得至关重要。消耗的电力越多,越需要经常更换电池,没有人愿意这样做。此外,由于微控制器是为特定用途而设计的,因此可以对其进行优化,以实现极低的功耗,例如,单节AAA电池可为蓝牙鼠标供电数月。FPGA在所有资源间路由,其功耗根本无法与微控制器的功耗竞争。这并不意味着不能在电池供电的应用中使用FPGA,但是在功耗方面,微控制器往往每次都会赢。
总之,微控制器在成本、易用性和功耗方面占据主导地位,那么为什么还会有人使用FPGA而不使用微控制器呢?还有其他的因素需要考虑,比如速度和灵活性,而在这两方面,形势转而对FPGA有利。
提到速度时,指的是带宽和计算。带宽是通过一条通路的数据传输速率,FPGA具有非常大的带宽,远远超过微控制器所能达到的带宽,它们可以轻松处理每秒数百千兆比特的数据。当驱动多个4K显示器时,这非常有用,FPGA通常用于需要大量带宽数据流的视频编辑硬件中,FPGA的高带宽使其能够以非常快的速率通过各种外部接口(USB-C、以太网、ADC、存储器等)传输大量数据。
至于计算速度,FPGA在一秒钟内完成的数学计算量使得微控制器相形见绌。微控制器通常只有一个处理器,并且由于所有的计算都由同一个处理器完成,所以每秒可以执行的计算数量有限。而FPGA可以并行运行多个计算,例如,可以同时运行数百个乘法运算,这在微控制器上根本不可能实现。FPGA在运行大型数学滤波器时,通常以非常快的速率进行众多乘法和加法运算,非常管用。
FPGA的另一个主要优点是它的灵活性。虽然微控制器的种类繁多,然而这只是一个小优势。如果有特殊的设计需求,比如说,如果需要16个ADC接口,无法找到能满足这一需求的微控制器。而FPGA的限制则要少得多,FPGA就像一块空白板,可以通过编程完成几乎任何事情,提供了巨大的灵活性,得以解决大量的数字逻辑问题。
当遇到工程问题时,应尽可能选择最好的工具来解决它。通常微控制器是首选,但偶尔由于速度或灵活性的问题,它却根本无法工作。此时,FPGA是一个很好的候选者,当然,还有另一种设备值得考虑:ASIC。
扫码有惊喜: