Page 115 - 《软件学报》2020年第10期
P. 115
刘焰强 等:FPGA 加速系统开发工具设计:综述与实践 3091
工具被提出,其中影响较大的包括 Bluespec [27] 、LegUp [28,29] 、Vivado HLS [30] 和 Intel HLS Compiler [31] .新的工作
吸取了之前工作的教训,大多做出了如下改进.
(1) 主要使用或支持 C、C++等广泛使用的通用编程语言作为输入语言,这使得工具具有了更广泛的受众
并降低了学习成本;
(2) 以 Verilog 或(和)VHDL 为输出结果.这使得新的工具可以兼容老的设计,并在生成的硬件性能不够理
想时提供了手动优化的可能,进而丰富了工具的适用场景;
(3) 针对特定类型设计的综合算法进行专门优化.以牺牲通用性换取性能,这强化了高层次综合的优势.
到目前为止,我们讨论的工作都是针对单独的硬件设计而言的,对于传统的硬件来说,从硬件设计到硬件应
用中间有较长的时间跨度,也会由各自的团队来完成.但是,随着 FPGA 的兴起,由于 FPGA 可以通过快速的下载
配置直接形成对应的硬件,设计和部署的分工变得模糊起来,人们需要集成的框架来快速构建加速应用.而要构
建一个完整的加速系统,如本文开始部分中提到的,我们还需要硬件驱动和软件集成.将驱动和集成功能包含在
一个框架下,在我们不知道用户会设计出具有什么功能的硬件和使用什么样的接口进行数据传输的情况下是
十分困难的.如果设计十分底层的接口来提高适用性和灵活性,则依然会保留较多的工作量给开发者;而如果规
定接口协议和做各种假设来提高抽象层次,则会对用户的硬件设计带来各种限制.随着一些高层次综合工具开
始有针对性地处理特定应用,以及 OpenCL 等计算框架的兴起,工具开发人员不再面对硬件功能未知的情况,而
完整的开发框架设计也变得可行.
Xilinx 和 Intel 分别推出了 SDAccel [32] 和 Intel SDK for OpenCL [33] ,用于将 OpenCL 定义的加速器部署到
FPGA 上,并包含基于 PCIe 的主机与 FPGA 数据传输机制的集成.对于特定领域的应用,DnnWeaver [34] 和 Inter
OpenVINO [35] 可以根据的 Caffe,TensorFlow 等机器学习框架定义的模型自动生成硬件并部署到主机+FPGA 的
加速平台上,而 p4FPGA [36] 框架可以将用 p4 语言定义的数据面板部署成 FPGA 包处理器.这些框架相比于通用
的高层次综合工具更受系统架构师和软件工程师的青睐,它们能够显著降低开发门槛,提高开发效率,方便系统
的早期验证.虽然这些框架生成的硬件设计与使用硬件描述语言完成的设计相比依然存在不小的性能差距,但
是,从硬件描述语言的发展历史来看,对开发效率的需求将推动综合算法的改进.同时,由于硬件本身性能的提
高,具有更高生产效率的工具将逐渐取代生产效率低的工具.
1.3 高级硬件描述语言
高层次综合工具在侧重数据流处理的加速系统中得到了良好应用,但对于控制流复杂的硬件设计,比如非
结构化的硬件设计和基于指令集的处理器设计,高层次综合工具往往需要与其他寄存器传输级设计工具相互
配合.因此,在对硬件性能要求较高、需要在微架构上进行创新的设计情景下,寄存器传输级设计工具依然在发
挥着重要作用.将经典硬件描述语言使用新的高级编程语言重新包装以获得高级语言在编程效率、维护管理上
的优势同样吸引了大量研究人员.本文将提供寄存器传输级抽象设计接口,并使用高级编程语言作为输入语言
的硬件描述语言归纳为高级硬件描述语言.这些高级硬件描述语言通常会利用高级语言中的面向对象、语法糖
等机制来扩展自身的数据结构并提供更便利的语法接口,或者以库的形式来模板化特定类型硬件的设计.在一
定程度上,这些方法提供了更高层次的设计抽象,但与高层次综合不同,这种抽象更多的是语言机制上的抽象,
它没有隐藏硬件数据传输的底层机制,也就是说,没有沟通软硬件描述的语意鸿沟.因此,我们认为目前大部分
高级硬件描述语言依然处在寄存器传输级抽象.表 1 根据输入语言的特征列举了 2000 年以来典型的高级硬件
描述语言.
函数式编程风格一度被认为是最适合进行硬件描述的编程风格,函数式语言作为输入语言的开发工具几
乎涵盖了硬件设计的各个抽象层次,其中一部分工作可以被归纳为高层次综合工具,例如 Bluespec,还有一部分
则可以被归纳为高级硬件描述语言,例如表 1.函数式硬件定义的优势十分突出:简明的语义结构便于形式化验
证和对递归的良好支持.这些优点使得函数式硬件描述语言在定义大规模组合逻辑电路时十分简练而易于测
试验证.但在定义时序电路时,函数式定义却不够直观,以至于各种工具都采取了不同的定义方式,而未能达成
一致的抽象.由于缺乏标准、学习成本过高、函数式编程在应用开发上使用较少等因素,在当前背景下,函数式