FPGA 编程三大范例 - 2021.2 Chinese

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2021-12-15
Version
2021.2 Chinese

虽然 FPGA 可使用 Verilog 或 VHDL 等低层次硬件描述语言 (HDL) 来编程,但现在已有多种高层次综合 (HLS) 工具可以采用以 C/C++ 之类的更高层次的语言编写的算法描述,并将其转换为 Verilog 或 VHDL 等低层次的硬件描述语言。随后,下游工具即可对转换后的语言进行处理,以便对 FPGA 器件进行编程。此类流程的主要优势在于,您可使用诸如 C/C++ 等编程语言来编写高效代码,而后将代码转换为硬件,但这类编程语言的优势仍能得以完整保留。此外,写好代码乃是软件设计师的专长,比学习新的硬件描述语言更简单。

以 C/C++ 编写的程序本质上是专为冯诺依曼样式的架构编写的,此类架构中用户程序内的每条指令都是按顺序执行的。为了实现高性能,HLS 工具必须推断顺序代码中的并行性,并利用它来实现更高的性能。要解决这个问题可并不简单。此外,优秀的软件程序员按明确定义的规则和实践来编写程序,例如,RTTI、递归和动态存储器分配。其中诸多技巧在硬件中都无法找到直接等效的对象,故而给 HLS 工具带来了诸多挑战。这也意味着任意现成软件都无法高效转换为硬件。最低限度,需检验此类软件中是否存在不可综合的构造,并需要重构代码,使其可综合。

现如今,即使软件程序可自动转换(或综合)为硬件,但要实现可接受的结果质量 (QoR),仍需要额外工作(例如,重写软件)以帮助 HLS 工具实现期望的性能目标。为此,您需要了解正确编写软件的最佳实践,以确保在 FPGA 器件上正常执行软件。在接下来的几个章节内,将着重探讨如何首先识别部分宏观级别架构最优化以明确程序结构,然后聚焦更细化的微观级别架构最优化来实现性能目标。