时间:2024-08-03 来源:网络搜集 关于我们 0
现场可编程门阵列(FPGA)器件,其物理属性可通过使用硬件描述语言 (HDL)来操控,该器件可在软硬件编程之间架起一座桥梁,使
软硬件工程之间的界限变的更加模糊。
2. 什么是FPGA 以及为什么使用 FPGA?
FPGA是一种集成电路(IC),具有可配置逻辑块(CLB)以及其它用户可编程并可重新编程的特性。术语“现场可编程”表示FPGA的功能是可调节的,与其它由制造商硬连接的IC不一样。FPGA是属于可编程逻辑器件(PLD)范畴的集成电路(IC)。FPGA技术的基本功能建立在自适应硬件之上,具有制造后可修改的独特功能。硬件块阵列(每块都可配置)可根据需要进行连接,允许为所有应用构建特定域的高效架构。
图2:GPU VS FPGA典型特点对比
这种硬件灵活应变性是CPU和GPU所不具备的独特差异化特性。虽然CPU 灵活性很高,但其底层硬件是固定的。CPU一旦出厂,硬件就无法修改。它依靠软件来告诉它要针对内存中的哪个数据执行哪项具体运算(算术函数)。硬件必须能够执行所有可能的运算,称之为使用软件指令,通常一次只能执行一条指令。相比之下,FPGA可并行处理海量数据。与CPU相比,自适应硬件的优势因应用而异,很大程度上取决于计算的性质及其并行化的能力,但与功能可高度并行化的CPU实现方案相比,性能提高20倍的情况并不少见。
GPU不仅可弥补CPU的一个主要不足之处:并行处理大量数据的能力,而且运行的数据集还很宽。从根本上讲,GPU和CPU类似,因为它们有固定的硬件,而且使用软件指令运行。一条指令可处理1000个以上的数据,因此它们适用于图形加速、高性能计算、视频处理以及某些形式的机器学习等特定域。但从根本上讲,GPU的基本架构和数据流在制造之前是固定的。
FPGA可帮助编程人员和设计人员更灵活地适应和更新计算架构,从而带来更能满足其需求的特定域架构。FPGA并不是什么新事物,但因人工智能等领域的创新速度,其重要性日益凸显。第一款商用FPGA是AMD于1985年发明的,在目前的FPGA市场上占据60%至70%的份额。
3. FPGA 的用途与应用
今天,数据中心、航空航天工程、国防、人工智能(AI)、工业物联网 (IoT)、有线及无线网络以及汽车等众多行业无处不见其身影。这类器件通常处于用户需要实时信息的环境中。例如,一款家庭安防摄像头需要将即时图像以高分辨率和最小的时延传给房主的智能设备。随着消费者对通过手机收发即时信息的依赖程度越来越高,这些期望值只会增加。
4. FPGA 和硬件加速
FPGA 的架构使其成了硬件加速的高效解决方案。ASIC和GPU等器件使用一种过时的方法在编程和内存之间切换。而且它们也不能适应需要实时信息的应用,因为存储和检索任务所需的高功率会导致性能滞后。
图3:Xilinx KCU1500 万兆网络硬件加速卡
与 ASIC和GPU 不同, FPGA不需要在内存和编程之间切换,这使得存储和检索数据的过程更高效。FPGA架构灵活性更高,因此您可以自定义您希望 FPGA 用于特定任务的电源。
TensorFlow 和 Pytorch 等 AI 框架:有了Vitis AI, AI 科学家现在可直接从 TensorFlow 或 Pytorch 获取其训练有素的深度学习模型,并针对FPGA 加速进行编译。这不仅无需对低层次硬件进行编程,而且还可在几分钟内实现瞬间编译,从而能够与使用CPU和GPU的典型软件编译体验相媲美。
C 和 C++:在高层次综合(HLS)的帮助下,基于C语言的语言现在可用于 FPGA 设计。具体来说,AMD Vivado™ HLS编译器提供的编程环境能够与标准处理器及专用处理器共享关键技术,用于优化C语言程序和C++程序。这允许软件工程师优化代码,无需扫清有限内存空间或计算资源的路障。
Python:设计人员可使用Python语言和库来创建高性能应用并通过PYNQ编程FPGA。PYNQ是AMD的一个开源项目,可简化AMD平台的使用。此外,现在主要用于FPGA编程的,也有大量主流HDL。下面简单介绍一下其名称和主要属性:
Lucid:这种语言是专门针对FPGA设计的,可弥补Verilog等一些更早语言的不足。
VHDL:超高速集成电路 (VHSIC)硬件描述语言的首字母缩写,该语言最早出现在20世纪80年代,主要基于Ada和Pascal。
Verilog:Verilog是有史以来创建的第一款HDL,今天主要用于测试分析与验证。该语言的内核基于C语言。7. 如何编程FPGA虽然FPGA只存在于硬件工程师领域,但AI科学家和软件编程人员现在可以访问新平台,让该过程感觉就像编写软件程序一样。有了正确的工具,您将找到一个为FPGA编程的解决方案,在当前的软硬件知识层面满足您的需求。如果您习惯了针对GPU进行编程,即使结果有点不同,编写FPGA代码的过程也会感觉非常相似。FPGA编程包括编写代码、根据需要将该程序翻译成较低级的语言,以及将该程序转换为二进制文件。然后,您将向FPGA提供程序,操作就像让GPU读取一款用C++编写的软件一样。就是这么简单。但为了优化该编程过程,您需要访问正确的平台。幸运的是AMD拥有完美的解决方案,这是一套开创性的工具,可在FPGA编程过程的每个环节为软件开发人员提供帮助。8. 使用 Vitis™ 统一软件平台简化 FPGA 编程
9. 如何使用 Vitis 软件针对应用加速启动设计
(1)确定应用中需要加速的性能关键部分。
(2)使用Vitis加速库设计加速器,也可使用C、C++、OpenCL或RTL开发自己的加速器。
(3)构建、分析和调试,以验证功能正确性并确保符合性能目标。
(4)在边缘、本地或云端的AMD平台上部署加速应用。
欢迎关注FPGA技术实战公众号,喜欢就多多转发吧!