Skip to main content
QUICK REVIEW

[论文解读] hlslib: Software Engineering for Hardware Design

Johannes de Fine Licht, Torsten Hoefler|arXiv (Cornell University)|Oct 10, 2019
Embedded Systems Design Techniques参考文献 9被引用 17
一句话总结

hlslib 是一个开源的 C++ 库,通过提供可移植的 CMake 集成、统一的 OpenCL 主机代码抽象,以及针对 FIFO、移位寄存器和树形归约的硬件优化 C++ 模板,增强了 FPGA 的高层次综合(HLS)开发。它通过引入硬件感知抽象和可重用的、与厂商无关的代码模式,提升了在 Xilinx 和 Intel HLS 工具之间的生产力和可移植性。

ABSTRACT

High-level synthesis (HLS) tools have brought FPGA development into the mainstream, by allowing programmers to design architectures using familiar languages such as C, C++, and OpenCL. While the move to these languages has brought significant benefits, many aspects of traditional software engineering are still unsupported, or not exploited by developers in practice. Furthermore, designing reconfigurable architectures requires support for hardware constructs, such as FIFOs and shift registers, that are not native to CPU-oriented languages. To address this gap, we have developed hlslib, a collection of software tools, plug-in hardware modules, and code samples, designed to enhance the productivity of HLS developers. The goal of hlslib is two-fold: first, create a community-driven arena of bleeding edge development, which can move quicker, and provides more powerful abstractions than what is provided by vendors; and second, collect a wide range of example codes, both minimal proofs of concept, and larger, real-world applications, that can be reused directly or inspire other work. hlslib is offered as an open source library, containing CMake files, C++ headers, convenience scripts, and examples codes, and is receptive to any contribution that can benefit HLS developers, through general functionality or examples.

研究动机与目标

  • 通过将传统软件工程实践与硬件感知抽象相结合,弥合 FPGA 开发中的生产力差距。
  • 通过抽象化厂商特定的工具链和手动构建配置,降低 HLS 工作流中的复杂性和可移植性问题。
  • 提供可重用的、高级别的硬件构建块(例如:移位寄存器、树形归约),这些在 HLS 中手动实现往往困难或易出错。
  • 通过抽象层和一致的接口,实现在 Xilinx 和 Intel HLS 工具之间的跨厂商兼容性。
  • 通过提供开源平台,促进社区协作开发,实现可重用代码、示例和硬件优化模式的共享。

提出的方法

  • 通过自定义 Find 模块(FindSDAccel.cmake 和 FindIntelFPGAOpenCL.cmake)集成 CMake,以在不同平台上可移植地管理构建配置和依赖关系。
  • 使用统一的 OpenCL 包装器抽象 Xilinx 和 Intel OpenCL API 之间的低层差异,处理命令队列、内存标志和内存 bank 规范。
  • 实现模板化的硬件抽象,如 hlslib::ShiftRegister,该抽象在编译时显式实例化移位寄存器抽头的缓冲区分区。
  • 使用可变参数模板表达完整的硬件流水线,用于树形归约,确保 HLS 工具能正确合成平衡的二叉树结构。
  • 暴露可重用的、与厂商无关的 C++ 组件(例如:Stream、DataPack),这些组件能高效映射到硬件资源,并支持流水线和流式处理。
  • 提供真实应用场景的示例代码和集成模式,包括对 DaCe 和 SMI 等框架的支持,以展示端到端的可用性。

实验结果

研究问题

  • RQ1如何使高层次综合(HLS)工作流在不同 FPGA 工具链(如 Xilinx Vivado HLS 和 Intel OpenCL)之间更具可移植性和可维护性?
  • RQ2高层次软件工程实践(如构建自动化、依赖管理、抽象)在 HLS 开发中能多大程度上被有效应用?
  • RQ3是否可以以一种既可移植又可被 HLS 工具高效综合的方式,实现可重用的、硬件优化的 C++ 抽象(如移位寄存器、树形归约)?
  • RQ4如何抽象 Xilinx 和 Intel OpenCL API 之间的差异,以实现单个、统一的主机代码库来支持 FPGA 内核?
  • RQ5高层次抽象对 HLS 生成的硬件设计的可维护性、正确性和性能有何影响?

主要发现

  • hlslib 通过抽象 Xilinx 和 Intel FPGA 工具链之间在 OpenCL 命令队列、内存标志和内存 bank 规范方面的差异,实现了跨厂商兼容性。
  • 使用 CMake 集成厂商特定的 Find 模块,相比手动编写 Makefile,显著提升了项目可移植性并减少了配置开销。
  • hlslib 的模板化 ShiftRegister 抽象允许显式、在编译时实例化移位寄存器抽头,确保缓冲区分区正确,避免依赖 HLS 工具的模式识别能力。
  • TreeReduce 模板通过显式实例化树结构,确保完全流水化的、平衡的二叉树归约,避免了 HLS 编译器的错误优化或错误展开。
  • hlslib 的抽象已具备生产就绪能力,实际集成于 DaCe 和 Streaming Message Interface (SMI) 等真实项目中,证明了其实际效用和社区采纳程度。
  • 通过提供可重用的、文档齐全的示例以及社区驱动的开发模式,hlslib 加速了在厂商工具原生支持之外的 HLS 开发最佳实践的采纳。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。