Answers:
它们是为您的电路增加逻辑的电子组件(因此它们类似于微控制器)。但是设计方法与uC(微控制器)完全不同。在uC中,您无法更改内部uC设计。您只能在其上运行“经典”程序。对FPGA进行编程更像是创建新硬件。您可以在逻辑门之间创建新的连接,并创建一个新的专用处理器。您可以在家里,办公桌和PC上完成所有操作。
听起来不错?是的,但是有一些缺点。例如,价格(但我认为很难比较),更高的功耗和更低的时钟速度(但是您可以以一种智能的方式设计应用程序,并在一个时钟周期内执行更多的操作)。
有用的链接:
用法示例:http://nsa.unaligned.org/
FPGA实际上是可以在现场进行编程的逻辑门阵列。触发器,多路复用器,4位查找表等可以使用类C语言(Verilog)以任意方式连接。
uC(例如AVR)也由类似的逻辑门组成,但是在制造设备时会对其进行配置。当然,它具有RAM和Flash,因此您可以编写软件来读取输入和控制输出,但不能更改门的实际布置。门将始终排列在ALU,存储器控制器,串行端口等中。
uC的好处是,您可以使用一种易于使用,熟悉的高级语言(例如C)在现场(在办公桌上)对其进行编程。问题在于软件的速度很慢。要使输入控件具有输出,在最简单的情况下,您可以编写:
void loop(){buttonState = digitalRead(buttonPin); 如果(buttonState == HIGH){
digitalWrite(ledPin,HIGH);
} else {digitalWrite(ledPin,LOW); }}
那将变成一打汇编指令,因此循环将需要一微秒左右的时间来控制来自一个输入的一个输出。而且,整个uC芯片需要这么快地完成。当然,您可以做更多的事情,但是随着uC忙于做其他事情,控制输出的能力将会降低。
在FPGA中,我可以将门配置为在1个时钟内使输入控制输出。因此,输出跟随输入的时间可能会延迟25纳秒。使用相同的时钟周期,速度快40倍。FPGA中的其余门可用于执行许多其他操作,这不会影响此小功能的速度。
FPGA的代码将是一个简单的触发器:
总是@(摆姿势时钟)ledPin <= buttonPin;
在一个FPGA的成千上万个中,这只需要一个FPGA单元,大约40个门。
我可以对FPGA进行重新编程以执行其他操作,例如,仍然使用一个FPGA单元,仍然在一个时钟中基于四个输入的组合来控制led。或者在几个FPGA单元中,基于来自输入的串行流控制led,这将是100个门。因此,我可以基于串行数据(例如“ ON”或“ OFF”)以非常高的速率(轻松达到20MHz)控制串行流的LED,而仍然仅使用FPGA容量的一小部分。
因此,FPGA的优势显然是速度。它可以完成uC可以做的任何事情,并且可以并行完成所有事情,并且可以更快地完成它。uC需要几毫秒完成的复杂事情,FPGA可以完成几毫秒或更短的时间。只要FPGA中还剩下门,我就可以向其中添加更多功能,而不会影响FPGA中以前功能的速度或操作。顺便说一下,FPGA可以很容易地以20MHz的时钟速率运行。
成本不是差异。我可以花5美元买到一个FPGA,它几乎可以实现我见过的几乎所有Arduino设计,与Arduino AVR芯片差不多。还有一些免费的FPGA工具链(IDE,编译器,调试器)。
力量不是差异。由于我可以以低得多的时钟速率运行FPGA以实现与uC相同的功能,并使用其门的一小部分(未使用的门仅使用泄漏功率),因此FPGA可以击败几乎任何基于uC的功率设计。
FPGA的最大缺点是,与uC程序相比,定义,编写代码和调试非平凡的FPGA设计要复杂得多且耗时得多。一个晚上可能要完成的典型uC项目在FPGA上可能要花费几天的时间。
其他可能会解决的问题是,大多数人都接受过软件编程方面的培训,但很少有人了解硬件编程。您可以相当轻松地学习Verilog。但是您还需要考虑硬件设计而不是软件设计。设计模式有很大不同。
另一个问题是FPGA很少采用8至20引脚的DIP封装。它们往往采用100引脚或更大的表面贴装封装,因此构建电路板变得更加困难。
最后一个问题是,可以在易于使用的uC中很好地实现很多有趣的项目,那么为什么还要烦恼FPGA?
如果您熟悉基本逻辑门,则应该知道它们实际上是瞬时的。当A,B或C更改时,操作A和B或C立即更改。
FPGA是可编程逻辑门的矩阵(或其中的一种)。您可以定义输入和输出(作为输入的组合)。
在uC中,A + B / C * sqrt(D)将花费几个时钟周期和一些内存。在FPGA中,结果几乎是即时的。
它们非常适合视频,DSP,密码学...
那是主要优势。现代FPGA现在适合存储,并且有uC / FPGA混合。