嵌入式HLS 案例开发步骤分享——基于Zynq-7010/20工业开发板(4)
本帖最后由 Tronlong创龙 于 2024-7-21 15:11 编辑目 录
5 sobel_demo 案例 39
5.1 HLS 工程说明 40
5.2 编译与仿真 43
5.3 IP 核测试 45
前 言
本文主要介绍 HLS 案例的使用说明,适用开发环境: Windows 7/10 64bit、Xilinx Vivado
2017.4 、Xilinx Vivado HLS 2017.4 、Xilinx SDK 2017.4。
Xilinx Vivado HLS (High-Level Synthesis,高层次综合) 工具支持将 C 、C++等语言转化
成硬件描述语言,同时支持基于 OpenCL 等框架对 Xilinx 可编程逻辑器件进行开发,可加
速算法开发的进程,缩短产品上市时间。
HLS 基本开发流程如下:
(1) HLS 工程新建/工程导入
(2) 编译与仿真
(3) 综合
(4) IP 核封装
(5) IP 核测试
测试板卡是基于创龙科技Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC工业级核心板。
https://p2.itc.cn/images01/20230101/41a5ce60f4884b84b00a28cb26f08923.jpeg 5 sobel_demo 案例
案例功能: 对 YUV 格式视频进行 Sobel (边缘检测) 算法处理。
Sobel 详细开发说明可参考产品资料“6-开发参考资料\Xilinx 官方参考文档\”目录下 的如下文档。
(1) xapp1167.pdf
https://p9.itc.cn/images01/20230101/451ea06b98d942faa8e1722a14752b16.jpeg (2) xapp890-zynq-sobel-vivado-hls.pdf
5.1 HLS 工程说明
(1) 时钟
HLS 工程配置的时钟为 100MHz。如需修改时钟频率, 请打开 HLS 工程后点击 ,在
弹出的界面中的 Synthesis 栏目进行修改。
https://p9.itc.cn/images01/20230101/a15bb80fe75d41cca5d42e301be26cb4.jpeg图 70
(2) 顶层函数
案例顶层函数为 opencv_top.cpp 中的 hls_image_filter()。首先在 sobel_demo.cpp 中调
用 image_filter(),最终调用 opencv_top.cpp 中的顶层函数 hls_image_filter() 。
https://p0.itc.cn/images01/20230101/2f991ae4e544429d809346e45b2e8807.jpeg图 71
https://p1.itc.cn/images01/20230101/082e1e35f91948138d4354cf7ed3d65d.jpeg图 72
点击
https://p8.itc.cn/images01/20230101/95bebad5c9ee432f9f09e88b04b91c7e.jpeg 后,可在弹出的界面中的 Synthesis 栏目查看或设置顶层函数。
https://p7.itc.cn/images01/20230101/0e7e220145f74b338eaa79782944c48f.jpeg图 73
输入输出图像在 sobel_demo.h 中已定义,分辨率均为 1920*1080 。
https://p3.itc.cn/images01/20230101/8590a305f52a446e937e894f97ef4aec.jpeg图 74
Sobel 算子在 sobel_demo.cpp 中已定义。
https://p3.itc.cn/images01/20230101/6edab773707a470d9ebcc2e697bf961d.jpeg图 75
https://p0.itc.cn/images01/20230101/11971cf454504a3ba55e7c1c08973b60.jpeg 5.2 编译与仿真
请参考本文档 HLS 开发流程说明章节, 进行编译。 编译完成后, 进入仿真界面点击
进行全速运行。
运行完毕后,将在 Console 窗口打印如下提示信息,说明顶层函数逻辑正确。
https://p1.itc.cn/images01/20230101/148926707c6146e1baddf35a89c03049.jpeg图 76
https://p8.itc.cn/images01/20230101/3b0bac76706f46ef92fed41ae144cdcf.jpeg图 77
同时得到经过 hls_image_filter()和 opencv_image_filter()函数处理的图片。
程序将 opencv_image_filter()的运算结果和顶层函数 hls_image_filter()的运算结果进行 对比。如结果一致,则说明顶层函数逻辑正确。 opencv_image_filter()函数不调用逻辑资 源,而 hls_image_filter()函数调用逻辑资源。
https://p4.itc.cn/images01/20230101/007626cbc43c4e0e9226bcfa2c54436c.jpeg图 78 hls_image_filter()处理结果
https://p7.itc.cn/images01/20230101/f311d584db2e47d6927038f8993fcc00.jpeg图 79 opencv_image_filter()处理结果
https://p3.itc.cn/images01/20230101/c7a454fb5f1c4f4c96f407f17834aab6.jpeg图 80 原始图像
5.3 IP 核测试
请参考本文档 HLS 开发流程说明章节,完成 IP 核测试前的准备工作。
HLS 工程生成的 IP 核为 image_filter_0。
https://p9.itc.cn/images01/20230101/a02e8099c485415282f478b23b2c8e9e.jpeg图 81
由于产品资料“4-软件资料\Demo\All-Programmable-SoC-demos\”目录下的 camera_
edge_display 案例使用到本案例 IP 核,因此请参考 PS + PL 异构多核案例开发手册的 ca
mera_edge_display 案例说明进行 IP 核测试。
这板子一般是适合于什么工作场景啊?是算法处理吗
页:
[1]