
通过例程探索Vivado HLS设计流
实验中文件中包含一个矩阵乘法器的实现,实现两个矩阵inA和inB相乘得出结果,并且提供了一个包含了计算结果的testbench文件来与所得结果进行对比验证。



添加提前创建好的源文件进来,因为我们探索的是设计流而不是编程:

添加提前创建好的测试文件进来:

对于具体的FPGA进行解决方案配置,如图所示:


工程创建完成,综合界面如图所示:

在3.1节中采用GUI界面完成了创建工程的工作,这个工程命名和添加文件创建工程的工作可以由一个TCL脚本完成,可以大幅提高我们的效率~


新建一个文件run_hls_pynq.tcl,然后编写以下工程配置:
# 创建工程
open_project -reset matrix_mult_prj
# 添加源文件和测试文件
add_files matrix_mult.cpp
add_files matrix_mult.h
add_files -tb matrix_mult_test.cpp
# 设置工程顶层
set_top matrix_mult
# 创建解决方案
open_solution -reset solution1
# 选择具体的FPGA芯片配置
set_part {xc7z010clg400-1}
create_clock -period 5
# 模拟C代码
csim_design
exit在刚刚打开的Vivado HLS命令行界面中输入cd <脚本及源文件所在绝对路径>,然后输入目录所在盘符,进入目录后使用命令vivado_hls -f run_hls_pynq.tcl即可运行脚本,完整过程如图所示:

这样一个工程就创建好了;
使用命令vivado_hls -p matrix_mult_prj即可在GUI界面打开工程,如图:


在这里插入图片描述
点击Run C Simulation按钮,然后不用选择,直接下一步,可以看到控制台输出:


点击C Synthesis按钮,Vivado HLS会开始综合C++代码,综合完成后会自动打开综合报告,其中详细的描述了设计的时序以及FPGA资源占用估算等:

点击Run C/RTL Cosimulation按钮,选择生成verilog语言文件,设计完成后会自动弹出结果,如图所示:


点击New Solution按钮新建一个解决方案:

然后打开matrix_mult.cpp文件,选择右边的directive视图,右击Product,选择Inser Directive,然后选择PIPELINE,确定之后运行C综合来综合出RTL设计,完成后同样会弹出设计信息:

然后可以将报告与之前solution1的报告进行对比,
进入Analysis视图:





在F:\SOC\PYNQ-Z2\HLSproject\hls\tut3C文件夹,使用命令:
vivado_hls -f run_hls_pynq.tcl
vivado_hls -p matrix_mult_prj

Vivado HLS工具可以帮我们快速实现算法加速,比如CNN中的卷积层和池化层,它将我们输入的C/C++算法快速生成硬件加速电路,除此之外,还需要手动添加很多约束条件,比如将接口展开为并行,将循环计算展开为流水线运算,最后生成可用ip核在vivado中使用,当然,它仅仅是一个工具,玩玩还行,如果深入要用verilog写,大有学问~