vivado的HLS设计流程

时间:2024-04-02 08:42:44

vivado的HLS设计流程

简单介绍一下vivado的HLS的设计流程,从建工程开始到生成IP核的整个过程

vivado的HLS设计流程
一般需要先准备建立工程的文件,c/c++(cpp)函数文件,c/c++(cpp)testbench测试文件,h头文件以及一些需要用到的其他如.dat等文件。
vivado的HLS设计流程
从左到右依次是:VectorAdd.h头文件、VectorAdd_tb.cpp测试文件、VectorAdd.cpp函数文件
1、 新建工程—和上面三个文件放一个文件夹中,命名(不一定和函数名字一定)
vivado的HLS设计流程
2、 指定用于综合的顶层函数
vivado的HLS设计流程

3、 再加testbench
vivado的HLS设计流程
4、 创建solution和选择板的型号,Uncertainty暂时不用管
vivado的HLS设计流程
这就创建了一个vivado_HLS的工程,可以看看这些文件在工程里面的哪里,基本布局
vivado的HLS设计流程
vivado的HLS设计流程
5、 先不添加directives,让他直接运行,先执行C的仿真,会给出仿真结果,会生成一个csim的文件夹
vivado的HLS设计流程
6、 再执行综合,综合结束之后,会自动打开综合报告,可以切换到右边的outline中可以看相应的报告内容,也可以在相应的syn文件夹中找到报告,还有一些HDL代码,但是这个可读性不是很好,所以一般优化还是在C里面做的
vivado的HLS设计流程
vivado的HLS设计流程
7、 然后再做C/RTL的co-simulation即联合仿真,需要观察一下RTL的仿真结果
vivado的HLS设计流程
vivado的HLS设计流程

结果像上面这样显示
8、 然后我们就可以点击波形查看窗口,看一下仿真结果是什么样子
vivado的HLS设计流程
会自动打开vivado,并显示出波形
vivado的HLS设计流程

这样我们就可以看到这样的结果,很直观
9、新加一个solution,查看directive的效果
vivado的HLS设计流程
10、其实这个位置有个tcl文件,就是
vivado的HLS设计流程
其实这个文件就是用于存放directive的
11、我们对这个循环做了一个myloop的标签,有利于很快找到这个循环,并进行directive的优化
vivado的HLS设计流程
上面的%HLS PIPELINE中的%号,说明这个directive是存在于单独的tcl文件中,如果是#号就是存在在C源文件中的,具体区别看下图,当然有不足也有优点,就是代码移植性的问题
vivado的HLS设计流程
12、执行综合,得到第二个solution的综合报告,还可以进行对比,可以看到directive的影响
改善吞吐率等directives,通过改善并行度来改变吞吐量
vivado的HLS设计流程
和综合相关的图标,其中红色框出的是选择多个solution进行对比
13、优化,仿真,联合仿真,这些完毕后就可以进行Export RTL,即可以输出为IP核了,但是如果需要使输出的IP核实符合AXI协议传输的,则要进行设置
(1):直接用指令进行设置:
#pragma HLS INTERFACE s_axilite port=return bundle=BUS_A
#pragma HLS INTERFACE s_axilite port=x bundle=BUS_A
#pragma HLS INTERFACE s_axilite port=operator bundle=BUS_A
加入上面的这些指令就可以把数据设置为AXI协议的IP,在directive窗口中可以看到下图所示的出现
vivado的HLS设计流程
(2):也可以通过图形化界面配置,在directive窗口中配置:
vivado的HLS设计流程
效果是一样的,优缺点和前面第11点提到的一样,代码可移植性的问题
vivado的HLS设计流程
14、然后就可以输出为IP核了
vivado的HLS设计流程
15、点击Export RTL后,会在HLS工程文件夹里出现.zip的压缩文件,vivado如果要调用这个IP核可以直接将IP核的库添加到solution>impl>ip这个路径上,也可以直接解压这个压缩包到任何路径,直接添加即可用。vivado的HLS设计流程
16、在vivado中引用用HLS生成的IP核vivado的HLS设计流程
17、其实就和平常的IP核使用也没有什么区别了
vivado的HLS设计流程