什么是FPGA?


38

我以前见过很多人谈论FPGA,我知道它代表现场可编程门阵列,但是它如何工作,使用FPGA的目的是什么?

Answers:


30

它们是为您的电路增加逻辑的电子组件(因此它们类似于微控制器)。但是设计方法与uC(微控制器)完全不同。在uC中,您无法更改内部uC设计。您只能在其上运行“经典”程序。对FPGA进行编程更像是创建新硬件。您可以在逻辑门之间创建新的连接,并创建一个新的专用处理器。您可以在家里,办公桌和PC上完成所有操作。

听起来不错?是的,但是有一些缺点。例如,价格(但我认为很难比较),更高的功耗和更低的时钟速度(但是您可以以一种智能的方式设计应用程序,并在一个时钟周期内执行更多的操作)。

有用的链接:

用法示例:http//nsa.unaligned.org/


3
我将注意到,许多FPGA足够大,可以包含多个CPU内核,因此,FPGA本身就是一台完整的计算机。
Craig Trader

3
需要注意的是,我认为较低的时钟速度可能会引起误解。与PC相比,是的。与pic16相比,它们可以更快,但这取决于成本。我用过的大多数便宜的产品都可以在40MHz上运行,但还是会因产品而异。
Kortuk

23

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?


2
“很抱歉,我可以以5美元的价格购买到一种可以实现几乎我见过的任何Arduino设计的FPGA”。哪里?
2013年

9

如果您熟悉基本逻辑门,则应该知道它们实际上是瞬时的。当A,B或C更改时,操作A和B或C立即更改。

FPGA是可编程逻辑门的矩阵(或其中的一种)。您可以定义输入和输出(作为输入的组合)。

在uC中,A + B / C * sqrt(D)将花费几个时钟周期和一些内存。在FPGA中,结果几乎是即时的。

它们非常适合视频,DSP,密码学...

那是主要优势。现代FPGA现在适合存储,并且有uC / FPGA混合。


我知道许多具有多年实践经验的执业EE,通常都是通过FPGA进入设计而不是曾经使用过uC的uC。我真的认为它们非常适合接口处理。
Kortuk

是的,我认为这是一个很好的示例:armadeus.com/english/index.html。很感兴趣,我是伺服控制的例子:marwww.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/...
Maciek Sawicki

2
还要注意的是,有越来越多的“ C到VHDL”或“ C到Verilog”转换器。它们不是最有效的方法,但是您可以将已经编写的代码转换为可用于提高速度的硬件。如果您问我(以及您是否准备好面团),那就太酷了。
克里斯·加梅尔

5

它们用于破解加密密钥的速度比通用计算机快得多。:D


1
哈哈,我很喜欢您的实用说明。它们在并行处理方面绝对令人赞叹。
Kortuk

一个密码破译项目:copacobana.org
HHH

2

与ASIC相比省钱又省钱。除非你

  1. 深深地关心权力或
  2. 正在构建一堆(例如,> 1万个单元)

进行ASIC的固定成本(NRE)使其成本过高。

由于您可以轻松地更换FPGA,因此您可以减少仿真设计并更快地进入实验室。您也可以像在软件中一样进行部分设计并在其上进行构建。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.