FPGA 101:入门指南

如果您是二元思维的人,那么不要错过第 1 到 4 部分内容。在这篇博客中,我将简单介绍我最感兴趣的电子器件:现场可编程门阵列 (FPGA)。当我和人们谈起 FPGA 时,我听到很多人说:“我不知道它们的工作原理”、“它们太复杂了”、“我无法用 C 语言编程”。我不希望看到这样一种神奇的器件遭受如此冷遇,因此下面我将尝试解答一些常见问题。

什么是现场可编程门阵列?

详细解答如下:顾名思义,有人推断它是可编程的逻辑门结构。这种解释很接近,但又不太准确,因为内部逻辑阵列实际并不是利用门来实现的。相反,我们将阵列中的这些块称为逻辑单元。这些逻辑单元通常由查找表 (LUT)(用于实现任意逻辑功能)以及一些辅助电路(例如多路复用器、加法器和触发器)构成。您会经常听到人们将这种逻辑单元阵列称为“FPGA 结构”。

图 1:FPGA 逻辑单元示例。(图片来源:Wikimedia Commons

简而言之,我可以将 FPGA 比作一个盒子,里面装有各种没有商标、用于构建数字电路的彩色构件。我可以通过适合我的应用的任何方式,将这些构件连接到一起。如果您能描述数字电路如何工作,就能用足够的逻辑单元在 FPGA 内构建该电路。需要 25 个 PWM 输出?没问题。需要特殊通信协议?对某些硬件进行编程来处理该协议。

为什么我会需要 FPGA?

FPGA 可用于实现数字系统,但简单的微控制器通常也能够达到同样的效果。微控制器价格低廉,而且易于放置在印刷电路板上。虽然 FPGA 是一种功能强大的工具,但未必适合所有情况。它们有更多的功耗、布局和外部电路要求,甚至可能非常苛刻。使用成本高昂且具有诸多特殊要求的 FPGA 似乎有些不合时宜。

但您也许已经猜到了需要 FPGA 的原因:灵活性。您拥有可配置的逻辑块,就意味着不再受到硬件的制约。您不会再遇到定时器或 UART 不够用的情况,只要您拥有逻辑单元便可创建更多定时器或 UART。它能够随着技术和要求的变化,在今后进行重新配置,从而延长产品的生命周期。

第二个原因是速度。微控制器只能按顺序一次执行一条指令。由于硬件特性,FPGA 结构本身是并行的。因此它能同时执行多个指令,这对于 FFT 或图形处理等操作非常有用,因为在按顺序执行的处理器上,这些操作可能产生很高的成本。与 LVDS 等典型微控制器相比,FPGA 还提供了更多高速 I/O 选项,收发器能够以 10+ Gbps 的速度处理 HDMI 等协议。

如何为 FPGA 编程?

FPGA 采用一种名为 HDL(即硬件描述语言)的特殊语言。它主要包含两种语言:Verilog 和 VHDL。几乎所有开发套件(例如 Quartus 或 Vivado)都支持这两种语言,所以选择哪种语言只是偏好问题。然后对这两种语言进行“合成”,这类似于微控制器的编译。合成工具告诉 FPGA 如何连接其逻辑单元,以产生代码所描述的效果。请记住,代码被转换为硬件指令而非 CPU 指令,在您开始使用时,务必牢记这一点。

为了简化开发,FPGA 供应商提供了常用代码块目录,供您轻松置入到设计中。其中包括倍频器、RAM 和通信块等。您可对它们进行配置并添加到设计中,而无需查看涉及的 HDL 代码,从而加快开发速度。

图 2:显示来自 Xilinx 目录和 HLS 的 IP 块的部分框图。(图片来源:eewiki.net

有些供应商还提供高级别合成 (HLS) 工具,能够将使用 C 或 C++ 语言编写的功能转换为 HDL 代码块。使用这些工具,可以通过抽除一些低级别细节,显著减少具有软件背景的开发人员的入门障碍。

仍然不太相信?我最喜欢的 FPGA 功能之一是它能够使用软处理器。软处理器是从 FPGA 的逻辑单元构建的完整处理器。利用软处理器,您能够为处理器构建定制的辅助硬件,并使用 C 语言编写应用程序。您可在短短几分钟内完成简单的软处理器系统设置和编程。如果您仍然需要传统处理器,可考虑在单一封装中包含 FPGA 和硬 ARM 处理器的 SoC。

总而言之,与典型的微控制器相比,FPGA 的成本更高,使用难度更大,但如果您需要,它们能够提供更强的性能和灵活性。随着技术的改进,集成度的提高,FPGA 的成本变得更低,它们甚至能够取代传统的微控制器。如果您对上述任何内容感兴趣,可以立即开始使用 FPGA,这将让您能够走在业界的前沿。如果您正在寻找一种低成本的入门开发板,请了解我们的 FPGA 供应商提供的这些开发板:DE10-Lite(来自 Terasic)、Arty(来自 Digilent)、Mobile Dev Board(来自 Lattice)、Maker Kit(来自 Microsemi)。

关于此作者

Image of Taylor Roorda Taylor Roorda 是 DigiKey 的助理应用工程师,于 2015 年加入公司,主要负责嵌入式系统、可编程逻辑和信号处理领域的工作。Taylor 拥有北达科他州立大学电子工程学士学位,业余时间喜欢弹吉他和搞音乐创作。
More posts by Taylor Roorda
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum