FPGA编程是如何工作的?
硬件和软件之间存在着一条非常细微的界线。在为计算机等设备创建硬件时,必须确保其能够运行和执行代码。
可编程门阵列(FPGA)是一种硬件架构形式,允许用户在任何时间、任何地点自定义电路。
如果您想追求计算机科学或技术的职业生涯,了解FPGA编程的工作原理将非常有价值。
在本文中,我们将描述FPGA编程是什么,它是如何工作的以及它的应用领域,并分享各种资源以更多地解释它。
FPGA编程
FPGA是一种具有可配置逻辑块和其他各种功能的集成电路(IC),可以由用户对其进行编程和重新编程。
“可编程”一词表示FPGA的功能不是硬连线的,而是可调整的。因此,用户可以随时修改电路的功能以满足其特定的设计意图。
FPGA编程可以描述为使用FPGA创建计算解决方案的过程。
程序员必须计划、设计和执行门电路的架构,以创建满足用户需求的功能电路。 FPGA编程的最终目标是在通电时生成特定输出的硬件电路。
FPGA上的电路板被设计成模仿现实电路的行为。因此,这些电路板最常被团队用于测试新产品。FPGA系统将具有各种硬件元素。
逻辑门在基本层面上充当FPGA的构建块。逻辑门对输入和输出数据执行布尔运算。还有用于将信号从一点路由到另一点的路由资源。
FPGA编程的用途
FPGA编程在现代开发者中变得非常有吸引力。
以下是一些应用案例:
#1. 设计ASIC
开发者现在可以设计特定应用集成电路(ASIC)。ASIC在计算世界中变得非常流行。
FPGA的设计使得纠正错误变得容易。FPGA的美妙之处在于您可以将其用作其他项目的模型,从而在长远来看节省时间和资源。
#2. 可再生能源领域
在面对全球变暖挑战的世界中,来自风能和太阳能的可再生能源变得越来越受欢迎。传输和配电(T&D)变电站需要高效的电力网络才能使智能电网发挥最佳性能。
FPGA在提高智能电网的可伸缩性和性能方面非常有用,同时仍保持低功耗。
#3. 航天和国防
飞机有时会在恶劣的环境中飞行。因此,制造公司生产出更可靠、性能更好、寿命周期要求超过传统ASIC的抗辐射和耐辐射FPGA。
#4. 服务器应用
数据中心/服务器已成为一种趋势,因为每天对速度的需求不断增加。数据需要在有限的空间和时间约束下实时处理。
通过BRAM,FPGA可以为外部元素提供连接性,加速芯片上的数据处理。
FPGA编程的好处
- FPGAs可重构。必须考虑FGPAs的可用性。您可以配置一个并重新配置它以在另一个应用中使用。
- FGPA需要较少的手动干预。软件处理FGPA环境中的路由、时序和布局任务。如果手动处理,这些任务可能耗时且复杂。
- FPGAs就像空白画布。与具有预定义功能的传统ASIC不同,FPGAs可以重新编程以适应不同的用例。因此,工程师可以使用HDL(硬件设计语言)将这样的系统编程为不同的用例。
- 原型制作。裸片(ASIC)的制造成本很高,一个简单的错误可能代价高昂。在将ASIC发布到市场之前,确保系统功能正常并达到设计目标非常重要。FPGAs可重新编程,这意味着您可以进行测试运行,直到设计正确为止。
如何编程FPGA
用于运行FPGAs的设计主要使用硬件描述语言(HDL),如SystemVerilog、Verilog和VHDL进行编码。
#1. Verilog
Verilog在几行代码内即可编程FPGAs,非常理想。尽管Verilog是为硬件架构设计的,但它与C相似。Verilog的创建旨在使HDL更灵活和强大。
#2. SystemVerilog
SystemVerilog是Verilog的扩展。它既是硬件验证语言,也是硬件描述语言。使用此语言,可以描述硬件模式,将其转换为数字代码,然后将其上传到FPGA系统中执行指定的任务。
#3. VHDL
VHDL是“Very High-Speed Integrated Circuit Hardware Description Language”的缩写。借助VHDL,可以描述FPGA的硬件,使用户能够在对实际硬件进行编码之前对其进行建模和模拟。
使用VHDL编程可以轻松确定电路中的潜在错误,用户可以在最终编码之前进行修复。VHDL允许用户编写结构化代码。
在希望编程FPGA的开发人员中,使用一种基于C的子集进行设计,并通过编译器将代码转换为Verilog代码的高级综合(HLS)非常流行。
因此,开发人员可以使用他们熟悉的语言通过统一的软件平台设计FPGAs。
#4. Python
这种多功能编程语言可以用于编程FPGA。为了实现这一目标,Python使用了一个名为PYNQ的开源项目,使得在AMD平台上工作变得更加容易。
#5. C和C++
基于C的语言非常适合FPGA设计,因为高级综合(HLS)。AMD Vivado™ HLS编译器提供了一个与专用和标准处理器共享关键技术的编程环境,优化了基于C的程序。
#6. 像TensorFlow和PyTorch这样的AI平台
工程师们使用来自Pytorch或Tensorflow的训练好的模型进行FPGA加速编译。这种方法消除了对低级硬件编程的需求,同时实现了快速编译。
使用常规编程语言(如Python、C或C++)编写的代码通过综合工具合成并转换为专有的互连描述。
包含互连描述的结果文件称为比特流(bitstream)。比特流描述了如何配置FPGA(如何通过FPGA的互连矩阵连接触发器、门和各种数字电路元件)。
FPGA具有内建配置,可以通过各种途径读取比特流文件,例如并行闪存、JTAG和串行闪存。
FPGA板制造商提供用于配置/编程系统的软件/说明。
大多数FPGA系统可以重编程多次。唯一的限制是当这些系统受到超出规格条件(如磨损、温度或高电压)的损坏时。
您可以通过这些学习资源了解有关FPGA编程的更多信息
学习资源
#1. FPGA编程入门
本书使用SystemVerilog向您介绍FPGA编程的世界。教学方法是基于项目的,您将开发实际应用程序,如键盘和计算器。
预览 | 产品 | 评级 | 价格 | |
---|---|---|---|---|
|
FPGA Programming for Beginners: Bring your ideas to life by creating hardware designs and electronic… | $41.99 | Buy on Amazon |
本书介绍了FPGA架构,然后探讨了如何编写SystemVerilog RTL。本书还介绍了计算机数学基础、流水线和并行性。本书还涉及高级主题,如AXI和与PS/2的键盘接口。
本书适合程序员、工程师和嵌入式系统开发人员,他们希望学习FPGA和SystemVerilog编程。该资源也适用于渴望通过实践经验创建实际项目的FPGA设计师。
#2. 面向软件程序员的FPGA
本书向软件工程师介绍了FPGA和可重构技术的世界。本书首先介绍了FPGA及其编程模型。如果您想了解FPGA如何实现各种应用程序而无需进行低级硬件设计过程,则可以使用本书。
预览 | 产品 | 评级 | 价格 | |
---|---|---|---|---|
|
FPGAs for Software Programmers | 尚无评级 | $73.60 | Buy on Amazon |
本书从软件工程师的角度提供了适用于FPGAs的问题和解决方案的实际感知。本书的用户导向方法使得易于理解FPGA技术的适用范围和使用方式。本书的目标读者是软件设计师和FPGA设计工程师。
#3. 开始学习FPGA: 编程金属
本书教导读者如何使用BeMicro MAX 10构建温度传感器、运动传感器、温度传感器和Knight Rider的KITT汽车显示屏。本书适合初学者,无编程技能或电子工程学位的人士也可以使用。
预览 | 产品 | 评级 | 价格 | |
---|---|---|---|---|
|
Beginning FPGA: Programming Metal: Your brain on hardware | $60.73 | Buy on Amazon |
本书介绍了FPGAs并解释了它们与微控制器或ASIC的区别。本书还是介绍如何设置工具链和使用VHDL编程FPGA的资源。本书适合电子和 Raspberry Pi 爱好者,他们希望亲身体验FPGA世界的入门指南。
#4. FPGA编程:开始使用Verilog
如果您从未接触过Verilog和FPGAs,本书非常适合您。如果FPGA编程对您来说是一个新词,这是一个很好的入门地点。典型的示例,如计数器和7段显示器,将帮助学习者开始入门。
预览 | 产品 | 评级 | 价格 | |
---|---|---|---|---|
|
Programming FPGAs: Getting Started with Verilog | $13.04 | Buy on Amazon |
本书介绍了Verilog,并提供了各种中级示例,如VGA。如果您已经具备Verilog和FPGA知识,则可能不适合使用该资源。本书有Kindle版本和平装版本。
结论
FPGA在低延迟的深度学习应用中有时可以比GPU表现更好。FPGA编程是一项重要的技能,因为FPGA可以用于消费电子产品、工业应用automation和军事应用等众多领域。FPGA仍在不断发展,我们只能等待看到它们在更多用例和更好性能方面的精细调整。