0
点赞
收藏
分享

微信扫一扫

HLS开发学习-02-HLS工作机制


本文参考了高亚军老师的课程,简单介绍下HLS的流程

ESL的发展

HLS开发学习-02-HLS工作机制_时钟周期


电子设计经过了CAD–CAE–EDA的发展过程,并在后期提出来ESL概念,其实说到底,这也就是科学技术发展到一定水平后完全可以由机器来代替人们完成之前的复杂的过程,HLS的本质就是为了缩短开发的周期,加快算法的实现。我们不太需要掌握具体的底层的语法即可完成设计,对于优化的过程来说,我们也只需在高层次的语言比如C C++上进行修改优化。而对于xilinx的工具链来说,有两种进行这样流程的实现。HLS和system generate

HLS开发好处

HLS开发学习-02-HLS工作机制_hls_02


以往的硬件设计,我们必须来掌握Verilog 或者 VHDL的编写的技巧,底层设计的核心,也就是并行性时序。这也是有别于高层次语言的重要的点。

接触Verilog时间较长的人都知道,在Verilog中,其代码并不是一条指令,而是真真正正的电路。所以在开发的时候要清晰背后的代码映射出来的真正的电路结构。

使用HLS,则对我们这方面的要求较低,我们之前考虑的这些将由软件代替,我们只需要进行高层次的C代码的编写和测试即可。

HLS开发的阶段

HLS包括以下阶段:

调度

根据以下内容确定每个时钟周期内发生的操作:

  • 时钟周期长度或时钟频率
  • 完成操作所需的时间,如目标设备所定义
  • 用户指定的优化指令

如果时钟周期更长或目标为更快的FPGA,则在单个时钟周期内完成更多操作,并且所有操作可能在一个时钟周期内完成。 相反,如果时钟周期较短或针对较慢的 FPGA,HLS会自动将操作安排在更多时钟周期上,并且某些操作可能需要作为多周期资源来实现。

绑定

确定哪个硬件资源实现每个计划的操作。 为了实现最佳解决方案,HLS使用有关目标设备的信息。

控制逻辑提取

提取控制逻辑以创建有限状态机 (FSM),对 RTL 设计中的操作进行排序。

HLS按如下方式综合 C 代码:

  • 顶级函数参数综合为 RTL I/O 端口;
  • C 函数综合为 RTL 层次结构中的块;
    如果 C 代码包含子函数层次结构,则最终的 RTL 设计 包括与原始 C 函数层次结构一一对应的模块或实体层次结构。 一个函数的所有实例都使用相同的 RTL 实现或块。
  • C 函数中的循环默认保持滚动;
    当循环滚动时,综合为循环的一次迭代创建逻辑,RTL 设计按顺序为循环的每次迭代执行此逻辑。 使用优化指令,您可以展开循环,从而允许所有迭代并行发生。 循环也可以通过有限状态机细粒度实现(循环流水线)或更粗粒度的基于握手的实现(数据流)进行流水线化。
  • C 代码中的数组在最终FPGA 设计中合成为block RAM 或UltraRAM
    如果数组位于顶层功能接口上,则高级合成将数组实现为端口以访问设计外部的block RAM。

HLS基于默认行为、约束和您指定的任何优化指令创建优化实现。 可以使用优化指令来修改和控制内部逻辑和 I/O 端口的默认行为。 这允许您从相同的 C 代码生成硬件实现的变体。

要确定设计是否满足您的要求,您可以查看高级综合生成的综合报告中的性能指标。 分析报告后,您可以使用优化指令来细化实现。 综合报告包含有关以下性能指标的信息:

  • 面积:基于 FPGA 中可用资源实现设计所需的硬件资源量,包括查找表 (LUT)、寄存器、块 RAM 和 DSP48。
  • 延迟:函数计算所有输出值所需的时钟周期数。
  • 启动间隔(II):函数可以接受新输入数据之前的时钟周期数。
  • 循环迭代延迟:完成一次循环迭代所需的时钟周期数。
  • 循环启动间隔:循环下一次迭代开始处理数据之前的时钟周期数。
  • 循环延迟:执行循环的所有迭代的周期数

C到HDL阶段,HLS帮我们完成模拟的是下面的两个阶段操作。

HLS开发学习-02-HLS工作机制_迭代_03

1.调度(scheduling)和控制逻辑的提取(control logic extraction)

每个时钟周期的操作和操作需要几个时钟,进行对代码实现的分工,就像值班表。
判断是否可以并行操作进行电路优化
通常生成状态机控制逻辑

2.映射(binding)

每个操作需要用什么资源去实现,分配相对应的资源。
就如安排好了值班表,需要不同业务的人去值班一样。

开发例子

调度(scheduling)例子

每个时钟周期的操作和操作需要几个时钟,进行对代码实现的分工

HLS开发学习-02-HLS工作机制_hls_04

控制逻辑的提取(control logic extraction)例子

判断是否可以并行操作进行电路优化
通常生成状态机控制逻辑

有四个状态,在C0状态执行b+c,C1状态产生x和数组的地址,
C2状态执行相应的乘法操作,C3状态将结果写入y数组的对应位,
如此循环几次,直到到达循环边界退出循环。需要注意的是,
生成的控制状态(左下)和状态机(右下)不是一一对应的,但它们之间非常接近。

HLS开发学习-02-HLS工作机制_hls_05

由流程图到FSM例子

HLS开发学习-02-HLS工作机制_数组_06

总结

HLS开发学习-02-HLS工作机制_数组_07


举报

相关推荐

0 条评论