HLS高层次综合

  • 一、 背景

    介绍:

    HLS就是把采用高级语言(C/C++/System C等)描述的数字系统映射成RTL结构,并且满足约束和目标。

    HLS优点:

    1. 从算法层的功能描述成RTL容易出错,耗费大量时间,
    2. RTL仿真速度慢
    3. HLS有利于IP复用
    4. 项目进度快,可以选择最适合的架构
  • 二、 C++到HDL的映射

    结构:

    1. C++是函数组成,HDL是module,将C++单线程映射成HDL多线程
    2. C++中函数调用通过函数名相关联,函数之间的传值是通过端口变量实现的。相应
      地,HDL中地模块调用也通过模块名相关联,模块之间的联系同样通过端口之问的连接实现,所不同的是,它反映的是硬件之间的实际物理连接。C/C++函数调用是唯一的,每一个都是相同的,可以无限制调用;而HDL对模块的调用都必须赋予一个不同的别名,调用次数受硬件电路资源的限制。
    3. C++中从main函数开始执行,在HDL中每个module是等价的,其必定存在一个顶层模块testbench。main函数相当于testbench
    4. C++中没有时钟异步、同步,也没有延迟

    数据类型:

    1. C++和HDL中基本类型的对应
    2. 数组
    3. 指针:

    HDL中不存在地址的概念,所以C中的指针没法映射到HDL
    4. 类/结构体:

    类/结构体可以映射成HDL。联合体(union)不知其真实大小,不能映射

    设计接口:

    1. 输入:

    入端口将数据从外界传入设计模块进行处理。C/C++参数列表里非指针的参数和在函数中只被读的指针参数对应于HDL中的输入端口。
    ![](https://cl.ly/3caa51bae366/Image 2019-03-09 at 4.03.35 PM)
    这个是MD

    整型a是输入,指针p是输出
    2. 输出:

    输出端口将处理后的数据从设计模块传递给外界。函数的返回值和参数列表里在函数中只被写的指针、数组参数对应于HDL中的输出端口。
    3. 双向
    向端口既可以从外界接收数据也可以将处理的数据传递给外界。C/CH参数列表里
    的指针或数组在函数中若既被读又被写则对应于HDL中的双向端口.

    除以上所述之外,HDL描述端口还包括时钟、复位、使能等专用端口。

    ◆时钟:给出硬件设计的工作频率,并确定同步情况下的有效时钟沿。

    ◆复位:给整个设计提供复位操作,并确定是同步复位或异步复位。

    ◆使能:为硬件模块提供使能信号,并确定有效时钟沿。

    ◆握手协议:一般包括开始和完成反馈信号,开始有效时输入数据被读入,完成有效时表示输出数据已准备好。

  • 三、 可综合C++

    层次化设计

    面向对象

    静态对象

  • 四、 IP重用

    • 可以根据不同的需要、应用场景,修改约束条件,将C++映射成不同的RTL
    • C++等高级语言实现的IP与工艺无关,能够映射成不同FPGA厂家、型号和foundry工艺

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!