高级综合(high-level-synthesis,HLS):软件算法在FPGA上实现硬件加速的综合工具

目录

  • 高级综合HLS(high-level-synthesis):软件算法在FPGA上实现硬件加速的综合工具
    • HLS简述
    • HLS应用背景
    • HLS基本要素
    • HLS优势
    • 小结

高级综合HLS(high-level-synthesis):软件算法在FPGA上实现硬件加速的综合工具

HLS(high-level-synthesis),高级综合,将C/C++/SystemC编写的软体算法综合成RTL编码(VHDL/HDL),以实现软件算法设计的硬件加速和硬件电路设计的抽象级设计&验证。

HLS简述

HLS(High-level-synthesis,高级综合)工具是指将C、C++或SystemC编写的C规范代码转换为寄存器传输级(RTL)实现,并将其综合到现场可编程门阵列(FPGA)上,以实现软件的硬件加速效果。而FPGA提供了一种大规模并行架构,在性能、成本和功耗方面都优于传统处理器。HLS的目标是通过让硬件设计人员在更高的抽象级别上描述设计,从而更有效地构建和验证硬件。

本文概述了HLS高级综合的应用背景、基本要素以及优势。

HLS应用背景

1. FPGA应用领域的拓展

随着当前各领域计算速度以及数据处理实时性的需求不断增长,FPGA的应用领域也在不断拓展。传统通信、工业控制等传统领域已经逐渐趋于成熟,然而近年来随着云计算/边缘计算、大数据、AI人工智能、物联网等的发展,FPGA开始向新领域不断扩展。

2. 算法借助硬件加速的需求

随着高速信息化的到来,诸如AI、自动驾驶、工业物联网、大数据等领域的算法对数据处理的实时性和计算时延的要求越来越高。然而纯软件所能达到的运算效率似乎已经碰到了瓶颈,这就使得越来越多的人开始借助硬件加速算法运算效率,各种控制器&计算单元的异构计算(CPU+GPU/ASIC/FPGA)层出不穷,而FPGA的高度并行性、强控制能力和可重构性使得其地位逐渐突显出来。

3. 算法实现硬件加速的困难
由于硬件无法直接识别C规范的语言,一般是寄存器传输级(RTL)如VHDL或HDL。而硬件描述语言和程序设计语言存在本质上的区别,前者更倾向电路器件思维,后者更倾向函数功能思维,往往需要软件工程师来实现算法的功能之后交给硬件工程师实现硬件加速,这就导致算法实现硬件加速过程会有更多的时间和经济开销。

于是就有了高级综合(HLS)工具的诞生,虽然HLS的前景是希望软件工程师能够直接实现硬件加速(抢硬件工程师饭碗),但由于其转换能力有待提升,直接转换的代码有时候会差强人意(主要是不如高级硬件工程师实现的效果好),使得HLS逐渐转换成了硬件工程师加速FPGA开发的工具,省去了硬件工程师将软件算法从头转换成硬件编码的步骤,只需要在HLS自动生成的硬件编码上进一步修改即可。

HLS基本要素

高级综合(HLS)包括以下步骤:

  1. 时序安排
    如果时钟周期更长或者目标设备更快的FPGA,则可以在单个时钟周期内完成更多操作,并且所有操作可能在一个时钟周期内完成。相反,如果时钟周期较短或目标设备速度较慢的FPGA,HLS会自动将操作安排在更多的时钟周期内,有些操作可能需要作为多周期资源来实现。
  2. 绑定(binding)
    为每个计划的操作指定执行的硬件资源。
  3. 控制逻辑提取
    提取控制逻辑以创建一个有限状态机,以在RTL设计中对操作进行排序。

高级综合(HLS)将C代码综合成:

  1. 将顶层函数参数综合到RTL I/O端口。
  2. 将C函数综合为RTL模块。
  3. 默认情况下,C函数中的循环保收缩(roll)状态(与unroll展开状态相对应)。
    当循环未展开时,循环被创建成一种迭代逻辑,该循环中的每次迭代将依次执行该逻辑。使用优化指令可以展开循环,这允许所有迭代并行发生,从而增加并行性。循环也可以流水线化,或者用有限状态机细粒度实现(循环流水线),或者用更粗粒度的基于握手的实现(数据流)。
  4. 在最终的FPGA设计中,C代码中的数组被综合到block RAM或UltraRAM 中。
    如果数组位于顶层函数接口上,HLS会将其实现为端口,以访问设计之外的块内存。

为了确定设计是否满足需求,在HLS生成的综合报告中可以查看性能指标。综合报告包含以下性能指标的信息:
高级综合(high-level-synthesis,HLS):软件算法在FPGA上实现硬件加速的综合工具_第1张图片
高级综合(high-level-synthesis,HLS):软件算法在FPGA上实现硬件加速的综合工具_第2张图片

  1. 面积(area):根据FPGA中的可用资源实现设计所需的硬件资源量,包括查找表(LUT)、寄存器(register)、块内存(block RAM)和DSP48系列。
  2. 延迟(latency):函数计算所有输出值所需的时钟周期数。
  3. 启动间隔(initiation interval):功能可以接受新输入数据之前的时钟周期数。
  4. 循环迭代延迟(loop iteration latency):完成一次循环迭代所需的时钟周期数。
  5. 循环启动间隔(loop initiation latency):循环的下一次迭代开始处理数据之前的时钟周期数。循环延迟:执行循环所有迭代的周期数。

HLS优势

  1. 高级综合(HLS)跨越硬件和软件领域,提供以下主要优势:
     提升硬件工程师的工作效率
    硬件设计人员可以在创建高性能硬件的同时,在更高的抽象层次上工作。
     提高软件工程师的系统性能
    软件开发人员可以在新的编译目标——FPGA上加速他们算法的高密度计算部分。针对吞吐量、功耗和延迟优化代码,而无需解决单个内存空间和有限计算资源的性能瓶颈。

高级综合(high-level-synthesis,HLS):软件算法在FPGA上实现硬件加速的综合工具_第3张图片

  1. 使用高级综合设计方法,可以实现:
     在C层级开发算法
    从功能实现的抽象层次来开发算法,可以节省开发时间。
     在C层级验证
    与传统硬件的模拟仿真相比,能更快地验证所设计功能的正确性。
     通过优化指令控制C综合过程
    使用优化指令从C源代码探索不同实现方法,以找到最佳实现的可能性。
     创建可读和可移植的C算法
    通过打包成IP即可实现算法的共享及调用。

小结

本文主概述了HLS的应用前景和优势,作为一名搞过软件设计的硬件工程师(PS.搞软件的可以不懂硬件设计,但是搞硬件的一定不能不懂软件设计),通过抽象语言的算法实现,HLS确实可以在一定程度上节省开发时间,但其也还有很大的拓展空间,我们目前有一款在研的HLS辅助工具,如果您有意向,可以联系我们广州虹科,或者关注我们公众号:FPGA技术支持。
由于我们和赛灵思有合作,所以我们采用的HLS工具是赛灵思的vivado HLS。本文主要参考了赛灵思官方文件《UG902-vivado-high-level-synthesis》。推荐学习如何使用vivado HLS可以参考《UG871》。

你可能感兴趣的:(虹科FPGA-HLS,fpga,hls,hardware,算法,并行计算)