阅读关于FPGA的信息,如果我理解正确的话,它们基本上是完全可配置的逻辑门电路。因此,可以与他们一起设计任何东西。可以以最定制的方式设计一切,因此可以以微控制器更高效的方式达到相同的目的。有了它,看起来FPGA可以随时随地击败微控制器。所以我的问题是,如果FPGA确实如此出色,是什么使它们无法比微控制器流行得多?从这个角度来看,在我看来,FPGA应该早就淘汰了微控制器。那么为什么不这样呢?是成本,编程FPGA的困难还是完全其他?
阅读关于FPGA的信息,如果我理解正确的话,它们基本上是完全可配置的逻辑门电路。因此,可以与他们一起设计任何东西。可以以最定制的方式设计一切,因此可以以微控制器更高效的方式达到相同的目的。有了它,看起来FPGA可以随时随地击败微控制器。所以我的问题是,如果FPGA确实如此出色,是什么使它们无法比微控制器流行得多?从这个角度来看,在我看来,FPGA应该早就淘汰了微控制器。那么为什么不这样呢?是成本,编程FPGA的困难还是完全其他?
Answers:
您会忽略很多影响设计选择的因素:
与微控制器相比,FPGA的主要优势在于它们速度更快,并且可以并行执行更多操作。除此之外,您宁愿使用微型。因此,在设计过程中,通常是从微型芯片开始,然后在确实需要速度和/或并发高速运行时勉强使用FPGA。即使这样,您也只能在FPGA中实现对速度要求严格的部件,而将较低的速度控制功能等保留在微控制器中。
我在这里尚未详细说明的一个区别是,FPGA的使用和运行方式与处理器完全不同。
FPGA确实擅长于一遍又一遍地执行完全相同的任务。例如,处理视频,音频或RF信号。或路由以太网数据包。或模拟流体流动。在任何情况下,您都会非常快速地抛出大量相同类型的数据,并且您希望以相同的方式处理所有这些数据。或者您想重复运行相同的算法。FPGA实际上没有启动和停止的“任务” [1],它的全部工作是对打开的所有数据执行相同的操作。它不会改变齿轮,也不会做其他任何事情。它是最终的生产线工人。它将永远重复尽可能快地重复同一件事。
另一方面,CPU是灵活性的缩影。可以对它们进行编程以完全执行任何操作,并且可以对它们进行编程以同时执行多种不同的操作。它们具有启动和停止的任务,它们变速,多任务,不断切换和改变功能。
FPGA和CPU完全相反。CPU的商品是时间-它必须更快地完成工作。您的应用程序运行得越快越好。
FPGA的商品就是空间。您的FPGA很大,只有太多可用的门来执行您想要的任务。在大多数情况下,问题不仅仅是速度[2]。
可以使FPGA像CPU一样工作。您可以将CPU IP核放入FPGA中,但是由于其他人已描述的原因,很难证明其合理性[3]。FPGA和CPU是对立的,两者各有优缺点,因此各有千秋。
笔记:
1)FPGA可以设计为执行不同的任务,但是即使那样,它也将是为其预先设计的特定编号。
2)速度也是FPGA设计规范。这实际上是速度和大小之间的权衡。
3)将CPU放入FPGA的操作比较频繁,但是要根据具体应用情况,视情况而定。例如,如果您需要一个非常小的微控制器并具有额外的FPGA空间。
最后:答案很简单-FPGA的使用方式千差万别,非常复杂,这是对它们一般使用方式的简要概述。
正如Olin所说,诸如Micro之类的东西在许多任务上效率更高,而且几乎总是可以找到FPGA出现在任何地方使用的Micro。所用硅的面积(以非线性方式转化为成本)和功耗要小得多。因此,在FPGA上实现“软” MCU并不少见,但是这种微控制器的成本和性能却难以承受。
一些现代的FPGA包含一个或多个“硬”核,例如无处不在的ARM系列。而且,它们可能包含专用的内存块,因为从门外制作内存确实效率很低。在典型的FPGA中,32位微核仅占硅片面积的一小部分,因此您可以了解相对成本。
开发非常困难,并且IP往往不如Micros和专用SOC解决方案那样自由可用,例如LCD控制器,PCI接口,以太网MAC。部分原因是通过公开HDL逻辑描述,他们转移了设计,而不仅仅是设计的实例。另一个原因是性能取决于FPGA中逻辑的布局,这在开发过程中需要付出很多努力。
更为复杂的是,大多数复杂的FPGA均基于RAM进行配置,并且处理成本高昂,因此需要外部非易失性存储器来存储板载任何MCU的配置和程序存储器。上电时必须将该内存加载到RAM中。
FPGA是工具箱中非常有用的工具,但它们不会在短期内普遍取代MCU或ASIC。
硅在工作中的最佳用途是ASIC,没有浪费,但是它们具有巨大的学习曲线,NRE和灵活性。
有两种将灵活性构建到芯片中的方法。a)拥有一个空间优化的ALU,并一遍又一遍地用于存储的数据。这就是所谓的MCU,它需要大面积的“无所事事”的芯片,程序存储器,从单元到单元运行的宽总线以及总线访问开关。b)具有细粒度的逻辑,并具有一些可选的空间优化部件,例如乘法器,小型RAM和简单CPU。这就是所谓的FPGA,它需要“不做任何事情”的大量硅片,可编程开关和连接线。
显然,采用这些结构,MCU最适合可分解为串行块的任务,而FPGA最适合需要高速并行操作的任务。当应用程序繁重且成本由硅成本决定时,这就是自然使用这两种类型的方式。
当应用重量轻但体积大时,成本主要由封装而不是硅决定,并且任何一种都是可行的。Altera具有一些非常小的非常低功耗的FPGA,可以与极少数的MCU竞争。
对于小批量的应用程序,开发成本往往占主导地位,并且只要它们具有速度,MCU就可以胜出。
在功耗和芯片利用率方面,FPGA与微处理器相比非常差。
FPGA在逻辑配置电路中消耗了大部分硅面积,这不适用于微控制器。可用的互连必须比微处理器的专用实现所需的互连更多。
FPGA的功耗比诸如微处理器之类的专用ASIC的功耗更高,因为逻辑的实现效率不高。
在专用ASIC中,可以在FPGA中实现的任何功能都可以更高效,更便宜,功耗更低,电路板空间更小等方式完成。假设卷的大小足以抵消NRE。
基于微处理器的dsystem,以及后来的微控制器,已经能够通过使用其中的许多独立电路来在不同的时间完成许多不同的任务而实现极大的功能。我认为将1976年设计的街机机Tank与在世界第二台微处理器控制的游戏机Atari 2600上运行的Combat游戏进行比较很有启发。以最低的成本实施类似Tank的游戏;可以通过插入不同的ROM盒来玩不同的游戏,这是一个很好的奖励。
游戏Tank允许两名玩家在屏幕上驾驶坦克并向对方开枪。它具有每个坦克X和Y位置的“滑点”计数器,每个球员的射击X和Y位置的“滑点”计数器,每个球员的角度和每个球员的射角的向上/向下计数器,每个球员的得分的计数器,X和Y光栅光束位计数器,以及在这些东西之上的许多控制电路。它具有从ROM提取比赛场数据并显示它的硬件,还具有从两个ROM提取两个玩家的坦克的形状并从ROM显示分数的硬件。
Atari 2600拥有一个滑动计数器,用于分别记录两个玩家对象,两个导弹对象中每个对象的水平位置,以及一个称为“球”的附加对象,该对象在Combat中不使用,但在其他一些游戏中使用。对于每个播放器对象,它都具有输出存储在8位锁存器中的模式的硬件以及每个播放器的“延迟”八位锁存器,每当其他播放器的播放器被复制到主8位锁存器时,它就会输出。形状已更新。它还具有一个水平光束位置计数器,以及一个20位运动场形状的锁存器,该锁存器每条扫描线输出到屏幕两次,右侧副本显示为左侧的重复或反射。它具有检测碰撞的硬件,但由于碰撞而无法执行任何操作。它不 没有任何对象的垂直位置的硬件,也没有光栅束的垂直位置(!),也没有与得分保持,得分显示,游戏时间等相关的任何硬件。
2600省略了硬件的所有功能都由墨盒中的软件处理。每条扫描线只需要对照光栅的位置检查每个对象的垂直位置一次,每帧最多更新一次玩家的得分和剩余游戏时间即可,玩家的得分存储在运动场上方的扫描线上因此可能共享用于运动场等的相同硬件。
在FPGA中实现类似“坦克”这样的游戏的通常方法是使用单独的电路来实现不同的功能,这与1976年的街机游戏机几乎相同。这种方法可行,但要使用大量的硬件。基于微处理器的方法可以消除一半以上的硬件,而增加一个微处理器,这可能比其替换的硬件包含更少的电路(2600可以实现比Tank更复杂的游戏,而Tank需要更多的硬件如果他们不使用微处理器)。
在需要一种可以同时执行许多简单任务的设备的情况下,FPGA非常有用。但是,在需要执行许多任务但不需要同时处理它们的情况下,基于微处理器(或基于微控制器)的系统通常会更好一些,因为它们使少量使用变得容易电路以实现大量不同的目的。
这完全是成本。当微型器件的价格低至30美分时,便宜的FPGA的价格就在5美元左右。成本似乎并不高,但是当您制作一百万个放屁的新颖玩具以10美元的价格出售时,FPGA的价格扼杀了您的底线。
只是要补充其他非常好的答案,我认为FPGA的采用也要解决问题:例如,对于神经形态设备,FPGA板变得无处不在,因为对并行性的需求非常大,这很重要。 FPGA。
如果您推断神经形态设备的趋势,您可以想象并行化基于或迫切需要的其他领域可能会更多地采用FPGA。因此,也许FPGA不会在消费级产品中变得无处不在,但它可能适用于特定领域,因为它似乎正在出现在神经形态设备中。