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