天天看点

Xilinx HLS流程步骤总结

第一次写文,总结一下一年多以来在HLS写IP核的流程,太多坑,太多细节需要注意,软件本身也有很多BUG,然而教学视频并不会讲,都是自己把坑一个个填上。。。CSDN上也有比较理论的流程教学,这里是偏实际上手操作上的流程分享。

目前使用的是Vivado 2019.1和2019.2版本,编程语言是C,使用目的是图像算法生成IP核。(如果要在system generator里使用的,最后的步骤可以忽略。)

HLS总共分为四个阶段:

  1. C仿真
  2. 优化综合 (先优化后综合)
  3. C/RTL联合仿真
  4. 生成IP核
    Xilinx HLS流程步骤总结

在Vivado HLS的软件界面上,每个阶段生成的结果在相应的文件夹里都能找到:

Xilinx HLS流程步骤总结

C仿真

这个阶段比较简单,添加源文件到Source目录下,添加测试文件和testbench到Test Bench目录下。

注意: 这里的测试文件必须手动加载到软件中,若只是放在工程文件夹里面的话,在tb里面读入是一个空文件。例如上图里的测试文件INPUT.txt和tb文件test.cpp,若只将INPUT.txt放在文件夹,而不在软件界面里添加,test.cpp对其进行的读操作是无效的。

优化综合

根据需求将函数,数组,顶层形参,循环优化以后就进行综合步骤。

  1. 设置顶层函数

    窗口里会列出所有函数名称,将顶层函数的名称输入进去:

    Xilinx HLS流程步骤总结
  2. 根据需求将函数,数组,顶层形参,循环优化。优化是一个比较复杂的过程,此文是讲流程,所以这里不做展开。
  3. 综合以后如何看到已经综合成功了??
  • 看综合结果 (简单的代码或许能看懂,复杂一点的代码生成的结果表示完!全!看!不!懂!)
Xilinx HLS流程步骤总结

随便放一个综合结果(相对不复杂的算法),只能看到优化以后,能得到差不多我想要的资源用量。但是!!!至于Latency min/max和Interval min/max为什么是那么多,完全没有头绪。。研究了很久没有结果,所以放弃了。。(有大神指导的话欢迎评论,谢谢)

  • 看Analyis窗口

    在综合完成后,点击窗口右上角的Analysis就会切换到下图的综合分析窗口。在左下角的Performance Profil窗口可以得知每个循环是否Pipelined,也可以看到Latency,Iteration Latency, Initiation Interval和Trip count。对应自己算法的需求,去看这几项指标有没有达到:

    Xilinx HLS流程步骤总结

C/RTL联合仿真

这一步先进行C仿真,再进行RTL仿真。优化的内容不会影响C仿真结果,但会影响RTL仿真结果。如果优化不完善,会导致RTL仿真卡住,仿真报告出现警告和错误,仿真结果达不到期望等等一系列错误。所以在优化的时候一定要慎重,在RTL仿真出问题的时候首先检查优化的内容是否会影响。

一定要把Dump Trace的选项选all,不然没有波形。。(其中一个细节)

Xilinx HLS流程步骤总结

联合仿真完成后就可以打开波形查看器查看波形了。

生成IP核

理论上综合通过以后就能够导出ip核,但是为了保证ip核的输出达到期望,需要先看C/RTL联合仿真的结果。导出的IP核文件夹在./solution1/impl/ip路径下,里面的zip压缩文件就是IP核,在Vivado里面使用的时候导入这个压缩文件就可以添加IP核了。

Xilinx HLS流程步骤总结

另外,也可以在窗口里编辑版本号和IP名称。修改版本号以后,在Vivado里更新IP核路径,软件会自动检测更高版本,可以直接更新。

总结:做HLS需要有一定的硬件思维或者HDL基础,否则入门会有点困难。将HLS的流程跑通以后,在Vivado里使用IP核就能大大提高效率。剩下的就是优化约束的工作,怎么优化才能将资源降低并不影响正常功能,这个需要不断积累经验才能慢慢熟练。

继续阅读