FPGA 编程如何工作?

硬件与软件的微妙界限

硬件和软件之间的界限有时非常模糊。在为计算机等电子设备设计硬件时,务必确保硬件能够正常运转并执行指令代码。

现场可编程门阵列 (FPGA) 是一种硬件架构,它允许用户在需要时自定义电路。

如果您希望在计算机科学或技术领域发展,理解FPGA编程原理将对您的职业生涯非常有益。

本文将探讨FPGA编程的定义、工作原理、应用领域,并分享相关学习资源以帮助您深入了解。

FPGA编程

FPGA 是一种集成电路 (IC),其内部包含可配置的逻辑块以及其他可由用户编程和重新编程的多种功能单元。

“现场可编程”意味着FPGA的功能不是预先固化的,而是可以根据需要进行调整的。因此,用户可以随时修改电路的功能,以满足特定的设计需求。

FPGA编程可以被定义为使用FPGA创建计算解决方案的过程。

程序员需要规划、设计和实现门电路的结构,以构建满足用户需求的特定功能电路。 FPGA编程的最终目标是创建一个通电后能产生特定输出的硬件电路。

FPGA上的电路板通常用于模拟实际电路的行为。因此,质量保证团队经常使用此类电路板来测试新产品。一个完整的FPGA系统包含多种硬件元素。

逻辑门是FPGA的基本构建模块。逻辑门对输入和输出数据执行布尔运算。此外,还有路由资源,用于将信号从一个位置传输到另一个位置。

FPGA编程的应用场景

FPGA 编程对当今世界的开发人员具有很强的吸引力。

以下是一些主要的应用场景:

#1. 设计专用集成电路 (ASIC)

开发人员现在能够使用FPGA来设计专用集成电路(ASIC)。ASIC在比特币挖矿领域的应用非常广泛。

FPGA的设计使其易于进行错误修正。FPGA的优势在于它可以作为其他项目的模型,从而从长远来看节省时间和资源。

#2. 可再生能源领域

在全球气候变暖的背景下,风能和太阳能等可再生能源日益普及。输配电(T&D)变电站需要高效的电力网络才能使智能电网发挥最佳性能。

FPGA在提高智能电网的可扩展性和性能方面具有重要作用,同时保持低功耗。

#3. 航空航天和国防

飞机有时需要在极端恶劣的环境中飞行。因此,制造商生产具有抗辐射能力的FPGA,与传统的ASIC相比,这些FPGA在极端环境下的可靠性、性能和生命周期方面都有更好的表现。

#4. 服务器应用

随着对数据处理速度的需求日益增长,数据中心和服务器变得至关重要。即使在空间和时间受限的情况下,也需要实时处理数据。

FPGA可以通过其片上块状随机访问存储器(BRAM)提供与外部数据存储元件的连接,从而加速片上数据处理。

FPGA编程的优势

  • FPGA具有可重构性。您可以配置一个FPGA,然后重新配置它以用于不同的应用程序。
  • FPGA需要较少的人工干预。在FPGA环境中,软件可以处理布线、时序和布局等任务。如果手动处理这些任务,将非常耗时且复杂。
  • FPGA就像一张空白的画布。与具有预定义功能的传统ASIC不同,FPGA可以针对不同的应用场景进行重新编程。因此,工程师可以使用硬件描述语言 (HDL) 对FPGA进行编程以满足不同的应用需求。
  • 原型设计。制造ASIC的成本很高,一个简单的错误可能会导致巨大的损失。在将ASIC推向市场之前,务必确保系统运行正常并满足设计目标。FPGA具有可重新编程的特性,这意味着您可以反复测试直到设计达到要求。

如何对FPGA进行编程

用于运行FPGA的设计主要使用硬件描述语言(HDL)进行编码,例如SystemVerilog、Verilog和VHDL。

#1. Verilog

如果您希望通过几行代码对FPGA进行编程,Verilog是一个理想的选择。虽然它是为硬件架构设计的,但它的语法类似于C语言。Verilog的创建旨在使HDL更加灵活和强大。

#2. SystemVerilog

SystemVerilog是作为Verilog的扩展而创建的。它既是一种硬件验证语言,也是一种硬件描述语言。使用SystemVerilog,您可以描述硬件模型,将其转换为数字代码,然后将其上传到FPGA系统中以执行指定的任务。

#3. VHDL

VHDL是超高速集成电路硬件描述语言的缩写。使用VHDL,您可以描述FPGA的硬件,这允许用户在将其编码到实际硬件之前对其进行建模和仿真。

通过使用VHDL编程,可以很容易地识别电路中的潜在错误,用户可以在最终编码之前修复这些错误。VHDL允许用户编写结构化的代码。

高级综合(HLS)方法也越来越受欢迎,在这种方法中,设计在C语言的子集中完成,编译器将代码转换为Verilog代码。这使得开发人员可以使用他们熟悉的语言,通过统一的软件平台设计FPGA。

#4. Python

Python 这种多功能的编程语言也可用于对FPGA进行编程。为了实现这一点,Python 使用了 PYNQ,这是一个开源项目,可以轻松地与 AMD 平台一起工作。

#5. C 和 C++

由于高级综合(HLS)技术的发展,基于C语言的编程方式非常适合FPGA设计。AMD Vivado™ HLS 编译器提供了一个共享关键技术(例如专用处理器和标准处理器)的编程环境,从而优化基于 C 的程序。

#6. TensorFlow 和 PyTorch 等人工智能平台

工程师们使用来自Pytorch或Tensorflow的训练好的深度学习模型来编译FPGA加速器。这种方法无需进行低级的硬件编程,同时仍然能够实现超快的编译速度。

以Python、C或C++等常见编程语言编写的代码通过综合工具进行综合并转换为专有的互连描述。

包含互连描述的结果文件称为比特流。比特流描述了如何配置FPGA,即如何通过FPGA的互连矩阵连接触发器、门以及各种数字电路元件。

FPGA 具有内置的配置模块,可以读取比特流文件并相应地配置FPGA。 配置电路可以通过多种方式读取比特流文件,例如并行闪存、JTAG 和串行闪存。

FPGA板制造商会提供开发人员配置或编程系统的软件和指令。

大多数FPGA系统都可以重新编程多次。 唯一的限制是,当此类系统由于超出规格的条件(例如磨损、温度或高电压)而损坏时。

您可以通过以下学习资源了解更多关于FPGA编程的知识。

学习资源

#1. FPGA初学者编程

这本书向您介绍了使用SystemVerilog进行FPGA编程的世界。教学方法是基于项目的,您可以开发真实世界的应用程序,例如键盘和计算器。

在探讨如何编写SystemVerilog RTL之前,本书首先介绍了FPGA架构。本书还向您介绍了计算机数学基础、流水线和并行性。此外,本书还涉及一些高级主题,例如AXI和键盘与PS/2的接口。

本书非常适合希望学习FPGA和SystemVerilog编程的程序员、工程师和嵌入式系统开发人员。此资源也适用于渴望亲身体验创建真实项目的FPGA设计人员。

#2. 面向软件程序员的FPGA

本书向软件工程师介绍了FPGA和可重构技术的世界。本书首先介绍了FPGA及其编程模型。如果您想了解如何在没有低级硬件设计过程的情况下使用FPGA实现各种应用程序,也可以阅读这本书。

本书从软件工程师的角度对适合FPGA的问题以及如何实施解决方案给出了现实的认识。本书以用户为导向的方法使您很容易理解FPGA技术的适用范围和应用方式。本书的目标读者是软件设计师和FPGA设计工程师。

#3. FPGA入门:编程金属

本书教读者如何使用BeMicro MAX 10搭建《霹雳游侠》中的温度传感器、运动传感器、温度传感器和KITT车载显示器。这本书适合初学者,对于那些没有编程技能或电子工程学位的人来说都是不错的选择。

本书介绍了FPGA,并解释了它们与微控制器或ASIC的区别。同时,本书还介绍了如何设置工具链以及使用VHDL对FPGA进行编程。这本书非常适合想要亲身体验FPGA世界的电子产品和Raspberry Pi爱好者。

#4. FPGA编程:Verilog入门

如果您从未接触过Verilog和FPGA,那么这本书是完美的。如果FPGA编程对您来说是一个新概念,那么这是一个很好的起点。典型的示例(例如计数器和7段显示器)将使学习者掌握正确的知识。

本书向学习者介绍了Verilog,并提供了各种中间示例,例如VGA。如果您已经具备Verilog和FPGA知识,那么此资源可能并不适合您。这本书有Kindle和平装版。

结论

在低延迟的深度学习应用中,FPGA有时可以比GPU表现得更好。 FPGA编程是一项基本的技能,因为FPGA可用于消费电子产品、工业自动化和军事应用等诸多领域。 FPGA技术仍在不断发展,我们可以期待它们在更多应用场景中得到应用,并实现更好的性能。