引言:本文将首先介绍FPGA的基础知识,包括FPGA的工作原理以及为什么要使用FPGA等,然后讨论设计和执行FPGA应用所需的工具。
1. 概述
现场可编程门阵列(FPGA)器件,其物理属性可通过使用硬件描述语言 (HDL)来操控,该器件可在软硬件编程之间架起一座桥梁,使软硬件工程之间的界限变的更加模糊。
图1:Altera Agilex 9、7、5 和 3 FPGA 家族
通常人们认为,FPGA是只能由硬件工程师编程的器件。幸运的是,今时不同往日,现代统一软件平台插入通用开发工具,可简化FPGA的编程过程,软件开发人员也可了解如何编程FPGA。
2. 什么是FPGA 以及为什么使用 FPGA?
FPGA是一种集成电路(IC),具有可配置逻辑块(CLB)以及其它用户可编程并可重新编程的特性。术语“现场可编程”表示FPGA的功能是可调节的,与其它由制造商硬连接的IC不一样。
FPGA是属于可编程逻辑器件(PLD)范畴的集成电路(IC)。FPGA技术的基本功能建立在自适应硬件之上,具有制造后可修改的独特功能。硬件块阵列(每块都可配置)可根据需要进行连接,允许为所有应用构建特定域的高效架构。
图2:GPU VS FPGA典型特点对比
这种硬件灵活应变性是CPU和GPU所不具备的独特差异化特性。虽然CPU 灵活性很高,但其底层硬件是固定的。CPU一旦出厂,硬件就无法修改。它依靠软件来告诉它要针对内存中的哪个数据执行哪项具体运算(算术函数)。硬件必须能够执行所有可能的运算,称之为使用软件指令,通常一次只能执行一条指令。相比之下,FPGA可并行处理海量数据。与CPU相比,自适应硬件的优势因应用而异,很大程度上取决于计算的性质及其并行化的能力,但与功能可高度并行化的CPU实现方案相比,性能提高20倍的情况并不少见。
图3:CPU VS GPU典型特点对比
GPU不仅可弥补CPU的一个主要不足之处:并行处理大量数据的能力,而且运行的数据集还很宽。从根本上讲,GPU和CPU类似,因为它们有固定的硬件,而且使用软件指令运行。一条指令可处理1000个以上的数据,因此它们适用于图形加速、高性能计算、视频处理以及某些形式的机器学习等特定域。但从根本上讲,GPU的基本架构和数据流在制造之前是固定的。
FPGA可帮助编程人员和设计人员更灵活地适应和更新计算架构,从而带来更能满足其需求的特定域架构。FPGA并不是什么新事物,但因人工智能等领域的创新速度,其重要性日益凸显。第一款商用FPGA是AMD于1985年发明的,在目前的FPGA市场上占据60%至70%的份额。
3. FPGA 的用途与应用
今天,数据中心、航空航天工程、国防、人工智能(AI)、工业物联网 (IoT)、有线及无线网络以及汽车等众多行业无处不见其身影。这类器件通常处于用户需要实时信息的环境中。例如,一款家庭安防摄像头需要将即时图像以高分辨率和最小的时延传给房主的智能设备。随着消费者对通过手机收发即时信息的依赖程度越来越高,这些期望值只会增加。
此外,FPGA也有助于完成本来可以在软件中完成的功能加速。这使得 FPGA成了一种非常有帮助的工具,可卸载需要高性能的任务,比如人工智能的深度神经网络 (DNN) 推断。
4. FPGA 和硬件加速
FPGA 的架构使其成了硬件加速的高效解决方案。ASIC和GPU等器件使用一种过时的方法在编程和内存之间切换。而且它们也不能适应需要实时信息的应用,因为存储和检索任务所需的高功率会导致性能滞后。
图3:Xilinx KCU1500 万兆网络硬件加速卡
与 ASIC和GPU 不同, FPGA不需要在内存和编程之间切换,这使得存储和检索数据的过程更高效。FPGA架构灵活性更高,因此您可以自定义您希望 FPGA 用于特定任务的电源。
图4:支持PCIe Gen4 ×16的VectorPath加速卡
这种灵活性有助于将能耗极高的任务从传统CPU或其它器件转移到一个或几个FPGA上。许多FPGA都可以重新编程,因此您可以对硬件加速系统轻松进行升级和调整。
5. FPGA编程是怎样进行的?
FPGA编程可根据您希望器件具备的功能,使用HDL来操控电路。该过程不同于对GPU或CPU的编程,因为您编写的程序将不会按顺序运行。相反,您可使用HDL来创建电路,并根据您想要的功能对硬件进行物理修改。
图5:HDL综合成门电路
这个过程类似于软件编程,其中您编写的代码将转换成二进制文件并加载在FPGA上。但结果是HDL对硬件进行了物理修改,而不是通过严格优化器件来运行软件。
FPGA上的一个程序将逻辑门和内存块等较低层次的元件组装在一起,其可协同工作,共同完成一项任务。因为您是从头开始操控硬件的,因此FPGA将带来很高的灵活性。您可以根据任务调整内存或功耗等基本功能。
6. FPGA编程语言
FPGA似乎主要服务于芯片设计人员,而不是专门从事软件开发的工程师。毕竟,大多数用于编写FPGA代码的HDL都是较低级的语言,硬件工程师可能比软件工程师更熟悉这些语言。但有些HDL与通用软件语言的类似程度远比您想象的高。
当我们将“编程”一词用于FPGA时,因为程序的设置方式和执行方式的缘故,它与创建软件并不完全相同。但使用该术语确实包含了编写并执行FPGA代码与创建软件算法的过程相似的理念。最初的思维方式是,FPGA只能由电路设计硬件工程师来编程。
在统一软件平台的帮助下,软件开发人员无需掌握HDL技术,便可使用他们喜欢的语言来对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 编程
Vitis统一软件平台是一款领先应用,可为软件工程师、数据科学家以及 AI开发人员优化FPGA编程过程。它包括一个针对AMD FPGA和ACAP硬件平台优化的扩展性开源库,以及一个内核开发套件,有了该套件,没有丰富的硬件经验,也可无缝构建加速应用。
此外,Vitis还包括Vitis Model Composer,其在MATLAB和 Simulink中提供了一个工具套件。它可优化设计并测试新应用的过程。
9. 如何使用 Vitis 软件针对应用加速启动设计
Vitis分四个步骤帮助您针对边缘、本地或云端的数据及计算密集型应用设计加速器:
(1)确定应用中需要加速的性能关键部分。
(2)使用Vitis加速库设计加速器,也可使用C、C++、OpenCL或RTL开发自己的加速器。
(3)构建、分析和调试,以验证功能正确性并确保符合性能目标。
(4)在边缘、本地或云端的AMD平台上部署加速应用。
全部0条评论
快来发表一下你的评论吧 !