Vivado HLS入门笔记

 

视频(B站也有):

跟 Xilinx SAE 学 HLS

 

  • Vivado HLS的说明
    1. C/C++: HLS“利用C直接写出硬件”,优化算法+指导综合工具→HDL(IP)。
    2. 过程
      1. Scheduling: 时钟周期完成什么操作,是否有并行操作;
      2. Control logic extraction: 生成状态机(状态机控制算法进程);
      3. Binding:操作与资源映射;
    3. Vivado HLS入门笔记_第1张图片
    4. 不可综合:动态内存分配、设计操作系统层面的;
  • Vivado HLS实践演示
    1. 首先要写有:
      1. Source: 实践的函数 adder.c + adder.h  void add()
      2. Test bench: int main(){测试,调用add()}
    2. Vivado HLS 创建工程,添加Top Function(adder.c -> add()),添加test bench,指定芯片型号。
    3. C simulation (利用Test bench: main()测试)
    4. C synthesis(获得综合报告)
    5. C/RTL Co-simulation观察RTL仿真结果(Vivado simulator, Dump Trace=Port),  Open Wave Viewer
    6. Export RTL: 生成IP Core
  • Vivado HLS高级实践
    1. New Solution (e.g. Pipeline…)
      1. 在solution – constrains – directives.tcl存放directives
      2. 循环前用 标签 标记(directives容易找到)
        1. Myloop – insert directive (pipeline) (%表示在directives.tcl内约束directive;#表示在源文件内约束(#pragma HLS))
      3. 综合后:compare reports – 添加两个要比较的solutions
    2. 数据类型
      1. 不支持char
      2. 任意精度数据类型:在头文件声明#define W 18; typedef ap_int data_tVivado HLS入门笔记_第2张图片
      3. 返回数据类型sizeof()(的1, 2, 4…bytes)
      4. 让Visual Studio支持任意精度数据类型:Vivado HLS入门笔记_第3张图片
      5. 数值初始化:Vivado HLS入门笔记_第4张图片
      6. 数据类型转换赋值
        1. 小范围数赋给大范围数:有符号数(扩展符号),无符号数(向上填0)
        2. 大范围数赋给小范围数:可能有数据损失
        3. 两数相加:位宽+1;两数相乘:位宽之和。Vivado HLS入门笔记_第5张图片

 

你可能感兴趣的:(Vivado)