1. 新建工程
![](https://i-blog.csdnimg.cn/blog_migrate/ce066de92c4841b78f00cacadd3d4f96.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c6565e20dfb97433111bbfebb498ef88.png)
2. 添加文件
从Vitis_Libraries-master\vision\L1\examples\demosaicing中复制所有的源文件到新建工程的目录E:\HLS_File\Ex02_demosaicing
![](https://i-blog.csdnimg.cn/blog_migrate/73333506d50fd1f6d1e733254314d7ca.png)
- 引用单个HLS内核文件,引用 Vision 库(-cflags/-csimflags)
-IE:/HLS_File/Vitis_Libraries-master/vision/L1/include -I./. -D__SDSVHLS__ -std=c++14
![](https://i-blog.csdnimg.cn/blog_migrate/55af096e0292ec551e001c6a3af6e2c5.png)
- 引用 Test bench文件,引用用于C仿真的Vision库,引用OpenCV 包含文件(-cflags/-csimflags)
-IE:/HLS_File/Vitis_Libraries-master/vision/L1/include -ID:/opencv/build_win10/install/include -I./. -D__SDSVHLS__-std=c++14
![](https://i-blog.csdnimg.cn/blog_migrate/f2773292111d4b63e8a0bd53e8a37a25.png)
3. C-Sim
本部分通过将 HLS IP 和 Testbench 设计发送给编译器进行编译和执行,来执行 HLS 流的 C仿真阶段。此命令用于设置编译器链接器标志和 testbench文件,以及:(官方例程需要修改TB文件:xf:: cv::read为cv::read;xf:: cv::write为cv::write)
- 引用 OpenCV包含和预编译的库目录
-ldflags “-L D:/opencv/build_win10/install/x64/mingw/lib -lopencv_imgcodecs3411 -lopencv_imgproc3411 -lopencv_core3411 -lopencv_highgui3411 -lopencv_flann3411 -lopencv_features2d3411”
- 包括用于验证测试台的图像作为主要功能的参数
-argv “E:/HLS_File/Vitis_Libraries-master/vision/data/128x128.png”
![](https://i-blog.csdnimg.cn/blog_migrate/103e467ad1e17e94fdc4ae1b6cce9f00.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9f7efa1fa8b309b0b6185426ccd6e169.png)
4. C到RTL综合
本部分执行Vitis HLS C到 RTL合成阶段。此阶段不需要标志或选项。
![](https://i-blog.csdnimg.cn/blog_migrate/96cd43eb355a722571ed7881e6dee63a.png)
5. C/RTL协同仿真
本部分在合成后执行 Vitis HLS IP的 RTL 协同仿真。HLS会自动根据 C testbench 生成RTL testbench进行协同仿真,以下指令用于设置编译器链接器标志和testbench文件,以及:
![](https://i-blog.csdnimg.cn/blog_migrate/180bacab03bee1e59c49cb02f6071a06.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d84a2f5aadbff60164de87752f250057.png)
6. 过程遇到问题及解决方案
- error: no matching function for call to 'imread(char*&, int)'
解决方法:xf:: cv::read为cv::read;xf:: cv::write为cv::write
参考:no matching function for call to ‘transform - 程序园 (voidcn.com)
- 在G ++编译命令中包含-std = c ++ 0x的意义是什么?
解决方法:默认情况下,GCC编译C++代码为 gnu++ 98 ,这是一种奇怪的方式说C++ 98标准加上大量的gnu extenstions。你可以使用-std=?向编译器说明应遵循的标准。不要忽略 -pedantic ,否则会违反标准。你可以选择的选项:
standard with gnu extensions
c++ 98 gnu++ 98
c++ 03 gnu++ 03
c++ 11(c++ 0x)gnu++ 11(gnu++ 0x)
c++ 14(c++ 1y)gnu++ 14(gnu++ 1y)
- warning: variable templates only available with -std=c++14 or -std=gnu++14
解决方法:修改C++编译设置-std = c ++ 0x为-std = c++14
参考文献
- Vitis_Libraries_2020.2https://github.com/Xilinx/Vitis_Libraries/tree/2020.2
https://github.com/Xilinx/Vitis_Libraries/tree/2020.2
- OpenCV 3.4.11https://github.com/opencv
https://github.com/opencv
- Vitis Vision | 利用Vitis HLS tcl shell 一键跑通视觉加速例程http://xilinx.eetrend.com/content/2020/100059904.html
http://xilinx.eetrend.com/content/2020/100059904.html