什么是FPGA?

电器工程 FPGA
2021-12-31 07:59:51

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

4个回答

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

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

有用的链接:

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

FPGA 实际上是可以在现场编程的逻辑门阵列。触发器、多路复用器、4 位查找表等可以使用类 C 语言 (Verilog) 以任何您想要的方式连接。

微控制器(例如 AVR)也由类似的逻辑门构成,但它们是在制造设备时配置的。当然,它具有 RAM 和闪存,因此您可以编写软件来读取输入和控制输出,但您无法更改门的实际排列。门将始终排列成 ALU、内存控制器、串行端口等。

uC 的好处是您可以在现场(在您的办公桌上)使用易于使用、熟悉的高级语言(例如 C)对其进行编程。问题是,软件“慢”。要让输入控制输出,在最简单的情况下,您可以编写:

无效循环(){ buttonState = digitalRead(buttonPin); if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
} else { digitalWrite(ledPin, LOW); } }

这将变成十几个汇编指令,因此循环需要大约一微秒来控制一个输入的一个输出。而且它需要整个 uC 芯片才能做到这么快。当然,您可以做更多的事情,但是随着 uC 忙于做其他事情,您控制输出的能力会减慢。

在 FPGA 中,我可以将门配置为让输入控制 1 个时钟的输出。因此输出将跟随输入,延迟可能为 25 纳秒。使用相同的时钟周期,速度提高了 40 倍。FPGA 中的其余门可以用来做许多其他事情,这不会影响这个小功能的速度。

FPGA 的代码将是一个简单的触发器:

总是@ (posedge 时钟) ledPin <= buttonPin;

这将只占用 1 个 FPGA 单元,大约 40 个门,在 FPGA 中的数以万计。

我可以重新编程我的 FPGA 以做其他事情,例如基于四个输入的组合控制 LED,仍然在一个时钟中,仍然使用那个 1 个 FPGA 单元。或者基于来自输入的串行流控制 LED,在几个 FPGA 单元中,这将是 100 个门。所以我可以根据串行数据控制 LED,比如“开”或“关”,串行流以非常高的速率(轻松 20MHz),并且仍然只使用 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 OR C 会立即改变。

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

在 uC 中,A+B/C*sqrt(D) 需要几个时钟周期和一些内存。在 FPGA 中,结果几乎是立竿见影的。

它们非常适合视频、DSP、密码学……

这是主要优势。现代 FPGA 现在适用于内存,并且有 uC/FPGA 混合。

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