HLS学习一

文章目录

    • 一、HLS简介
    • 二、HLS相关概念
    • 三、HLS工具的主流优化方法
    • 四、参考

一、HLS简介

HLS(高层次综合High-level Synthesis)指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。高层次语言包括C、C++、SystemC等,通常有着较高的抽象度,并且往往不具有时钟或时序的概念。相比之下,Verliog、VHDL等低层次语言,通常用来描述时钟周期精确的寄存器传输级电路模型,这也是当前ASIC或FPGA设计最为普遍使用的电路建模和描述方法。

二、HLS相关概念

HLS包含下面这些阶段

  • scheduling:确定每个时钟周期中执行哪些步骤
  • Binding:确定哪些硬件资源会被用到
  • 控制逻辑提取:提取控制逻辑,创建一个有限状态机(FSM:Finite state machine)来进行RTL的设计

HLS需要对相应的c代码进行下面的综合

  • 函数层面的c语言参数综合为相应的RTL的输入输出管脚
  • c函数综合为RTL块架构
  • c中的循环初始状态下还是循环执行:通过优化方案可以将循环展开
  • c中的数组会被综合为FPGA中的块RAM或者UltraRAM

vivado HLS需要进行的步骤

  • 编译、执行(仿真)、调试相应的c语言代码
  • 把c算法综合为RTL实现,在这个过程中可以使用优化指令
  • 把生成综合分析报告并分析设计
  • 验证RTL的实现
  • 打包RTL进入IP块

vivado HLS软件需要的输入信息

  • c函数用c/c++、SystemC、OpenCL API或者C kernel写成
  • Constrains:资源限制,例如时钟周期、时钟不确定性、与FPGA目标板
  • Directives:可选的过程,来实现特定的优化
    c测试台(c test bench)与相关文档
  • HLS用c测试台来仿真c代码并且验证相应用c/RTL联合仿真得到的RTL输出

vivado HLS软件输出的信息

  • RTL实现文件,用HDL(hardware description language)语言写成,这是最重要的输出,有两种模式,VHDL语言和Verilog语言。这种实现文件会被作为IP块,并且可以被其他xilinx的设计工具所使用。
  • 报告文档:综合、c/RTL协同仿真、IP封装的输出结果。
    下图是vivado HLS所需要的输入输出
    HLS学习一_第1张图片

三、HLS工具的主流优化方法

  • 字长分析和优化
    FPGA的一个最主要特点就是可以任意字长的数据通路和运算。因此,FPGA的HLS工具不需要拘泥于某种固定长度的表达方式,而可以对设计进行全局或局部的字长优化,从而达到性能提升和面积缩减的双重结果。
    然而,字长分析和优化需要HLS的使用者对待综合的算法和数据集有深入的了解。
  • 循环优化
    循环优化一直是HLS优化方法的研究重点和热点,因为这是将原本顺序执行的高层软件循环有效映射到并行执行的硬件架构的重点环节。
    循环优化的最终目的,就是尽量将循环里两次相邻的操作以最小的时延实现,理想情况下,相邻的循环操作可以完全并行执行。然而由于硬件资源的限制,以及更多的是因为循环间存在嵌套和依赖关系,很难将循环完全展开。如何优化各种循环以实现最优的硬件结构,就成为了学术界和工业界最为关心的要点。
  • 对软件并行性的支持
    C/C++与RTL相比,一个主要的区别是,前者编写的程序被设计用来在处理器上顺序执行,而后者可以通过直接例化多个运算单元,实现任务的并行处理。随着处理器对并行性的逐步支持,以及如GPU等非处理器芯片的兴起,C/C++开始逐渐引入对并行性的支持。因此作为HLS工具,势必要增加对这些软件并行性的支持。

四、参考

1、在FPGA领域中 HLS一直是研究的重点

2、FPGA基础知识(二)HLS相关知识

你可能感兴趣的:(嵌入式系统应用开发,FPGA)