0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用Vitis HLS tcl shell一键跑通视觉加速例程

电子工程师 来源:XILINX技术社区 作者:陈雯 2020-12-29 11:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文给想直接使用Vitis HLS 工具在 Standalone 模式下调用 Xilinx Vision Library L1 API 的小伙伴提供了一个非常容易上手的脚本文件。

论坛上遇到在高层次综合工具中调用视觉库遇到的大多数问题都和 opencv 库以及Xilinx Vision 库的安装路径有关,如今 Vitis HLS 2020.1 之后的版本都不再提供OpenCV 的预编译库,就更需要开发者们将各自工作环境中的库路径,环境变量都设置好。希望这篇博文能给大家调用 Vitis Vision Library 提供向导,提升效率。

Vitis Vision库

Vitis Vision 库是 Xilinx 官方将 Opencv 功能转换至易于在 FPGA 中部署的视觉加速库,可在Vitis 环境中实施。其中 Vitis Vision 库的 L1 目录提供了在 Vitis HLS 层级部署的应用实例设计。这个实例设计中 C-sim 的流程中需要调用 OpenCV 用于测试平台功能,因此需要现有的OpenCV 安装。

Vitis Vision库:(或点击阅读原文进入)

https://github.com/Xilinx/Vitis_Libraries/tree/master/vision

为了适应各种用户环境,从2020.1版本开始,Xilinx 不再提供带有 Vivado / Vitis 工具的OpenCV 的预安装版本。尽管 Vitis 在综合布局布线Vision库的流程中不需要 OpenCV,但是运行示例设计仿真是必需的。

本文使用 Vitis 2020.2 版本介绍了如何创建独立的 Vitis HLS TCL 文件,用户只要在将该 tcl脚本拷贝在 Vision Lirary 的实例目录中,即可在命令行模式下跑完 Vitis_HLS C仿真,综合,联合仿真以及导出 IP 等全部流程。

Vision 的官方文档中包含使用 Vitis HLS standalone 模式的教程,该信息位于以下位置:

https://github.com/Xilinx/Vitis_Libraries/blob/master/vision/docs/getting-started-with-hls.rst

https://xilinx.github.io/Vitis_Libraries/vision/2020.1/index.html#

要利用示例设计或在用户测试平台中引用 OpenCV 库,必须执行以下步骤:

-安装 OpenCV 工具版本3.x

OpenCV 在Linux 的安装和环境设置请参考附录A, 在 Windows 环境下建议使用 Mingw 编译Opencv 安装包。

-设置环境变量以引用 OpenCV 安装路径

-下载 Vitis Version library

-创建 TCL 脚本并在 Vitis HLS 命令行执行

注意:2020.1 Vitis Vision 库已使用 OpenCV 库的3.3版进行了验证。比该版本更新的任何版本都可以使用,但是,版本4.x可能相对于3.x版本具有库功能更改,可能需要修改示例设计测试平台。因此,建议使用 OpenCV 3.x 版运行示例设计。OpenCV 库仅提供测试平台功能,不是必需的,并且不会以任何方式影响 Vision 内核的实现。

  • 环境设置

Linux 环境变量设置要求:

source < path-to-Vitis-installation-directory >/settings64.shsource < part-to-XRT-installation-directory >/setup.shexport DEVICE=< path-to-platform-directory >/< platform >.xpfm

export OPENCV_INCLUDE=< path-to-opencv-include-folder >

export OPENCV_LIB=< path-to-opencv-lib-folder >

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:< path-to-opencv-lib-folder>

Windows 环境变量设置要求:

示例如下所示,并且每个用户的设置会有所不同,具体取决于 OpenCV 和编译器工具的安装目录。

注意:必须在用户的环境中正确设置 LD_LIBRARY_PATH 动态库的搜索路径环境变量和OpenCV PATH 信息,此脚本和 Vitis Vision 示例设计才能正常工作。此外,OpenCV 的包含库和二进制文件的路径必须包含在系统的环境变量中。否则,将导致仿真期间库包含错误。

  • 操作步骤

要运行 Vitis HLS tcl 脚本,请执行以下操作:

-将修改好的 tcl 脚本放在 / vision / L1 / example / resize 目录中

-打开 Vitis HLS 命令行外壳并 cd / vision / L1 / example / resize 目录

-运行以下命令:vitis_hls -f run_hls_standalone.tcl

  • Vitis HLS TCL脚本详细解释

该AR提供了一个 TCL 脚本,用于在 makefile 流之外运行 L1 调整大小示例设计。该脚本基于Windows 环境。该脚本基于以下环境设置:

-OpenCV 版本3.4.11

Linux:

set XF_PROJ_ROOT"/home/vicky/Xilinx/Vitis_Libraries-master/vision"

set OPENCV_INCLUDE"/home/vicky/opencv/include"

set OPENCV_LIB"/home/vicky/opencv/lib"

Windows:

- OpenCV include directory /Data/OpenCV/build_win64/install/include

- OpenCV library directory /Data/OpenCV/build_win64/install/x64/mingw/lib

- Vitis Vision Directory /Data/Vitis_Libraries/Vitis_Libraries-master/vision/

TCL脚本文件包含以下部分,本文将逐一介绍

·代表 OpenCV 和项目环境的变量声明

·项目创建命令

·使用 Vitis Vision 库添加设计文件包括路径

·使用 OpenCV 和 VitisVision 库添加 Testbench 文件包括路径

·使用 OpenCV 链接器参考进行 C 仿真

·Vitis HLS IP 综合

·具有 OpenCV 链接器参考的 RTL 协同仿真

· 导出IP


1.变量声明:

变量声明部分的第一部分声明了一些变量,这些变量复制makefile流和该流生成的settings.tcl文件的环境变量。这些变量指向 Vitis Vision Includes,OpenCV 头文件和 OpenCV预编译的库。这些位置可能会根据用户系统的安装路径而有所不同。

设置 XF_PROJ_ROOT“ C:/ Data / Vitis_Libraries / Vitis_Libraries-master / vision”#Vitis Vision库的包含目录

设置 OPENCV_INCLUDE“ C:/ Data / OpenCV / build_win64 / install /include” #OpenCV头文件目录

设置 OPENCV_LIB“ C:/ Data / OpenCV / build_win64 / install / x64 /mingw / lib” #OpenCV 编译的库目录

下一个变量声明部分有助于创建 Vitis HLS 项目,并有助于使脚本可移植:

·设置 PROJ_DIR“ $ XF_PROJ_ROOT /L1 / examples / resize”

·设置 SOURCE_DIR“ $ PROJ_DIR /”

·设置 PROJ_NAME“ hls_example”

·设置 PROJ_TOP“ resize_accel”

·设置 SOLUTION_NAME“ sol1”

·设置 SOLUTION_PART“xcvu11p-flgb2104-1-e”

·设置 SOLUTION_CLKP 5

最后,最后一部分声明变量,这些变量表示 HLS 引用和使用库所需的引用路径和标志。这里我们发现在一个易用性高的脚本中,使用变量而不是代码有助于理解如何使用这些选项。

设置 VISION_INC_FLAGS“ -I $XF_PROJ_ROOT / L1 / include -std = c ++ 0x”#Vitis Vision 包含路径和 C ++ 11 设置

设置 OPENCV_INC_FLAGS“ -I $OPENCV_INCLUDE”#OpenCV 包含目录引用

设置 OPENCV_LIB_FLAGS“ -L $OPENCV_LIB”#OpenCV 库参考

注意:

在 Windows 中,库引用必须包含版本号。本示例使用 OpenCV 3.4.11安装。精确的包含格式将取决于用户的安装,并且可能与下面列出的格式不同。

设置 OPENCV_LIB_REF“ -lopencv_imgcodecs3411-lopencv_imgproc3411 -lopencv_core3411 -lopencv_highgui3411 -lopencv_flann3411-lopencv_features2d3411”

在 Linux include 语句不使用版本号,并给出如下:

设置 OPENCV_LIB_REF“-lopencv_imgcodecs -lopencv_imgproc -lopencv_core -lopencv_highgui -lopencv_flann-lopencv_features2d”

2.项目创建:

项目创建部分非常简单,它会创建一个新的项目目录和项目文件:

open_project -reset$PROJ_NAME

设计文件包括:

设计文件已添加到本节中的设计中。该命令:

-引用单个HLS内核文件:add_files“ $ {PROJ_DIR} /xf_resize_accel.cpp”

-引用 Vision 库和特定于项目的包含合成目录:-cflags“ $ {VISION_INC_FLAGS} -I $ {PROJ_DIR} /build

-引用了用于 C 仿真的Vision库和特定于项目的包含目录:-csimflags“ $ {VISION_INC_FLAGS} -I $ {PROJ_DIR}/ build”

完整的命令如下所示:

add_files“ $ {PROJ_DIR}/xf_resize_accel.cpp” -cflags“ $ {VISION_INC_FLAGS} -I $ {PROJ_DIR} / build”-csimflags“ $ {VISION_INC_FLAGS} -I $ {PROJ_DIR} / build”

Testbench 文件包括:

testbench 文件将在本节中添加到设计中。命令:

-引用 Test bench 文件:add_files -tb“ $ {PROJ_DIR} /xf_resize_tb.cpp”

-引用 Vision 库和特定于项目的包含目录:-cflags“ $ {OPENCV_INC_FLAGS} $ {VISION_INC_FLAGS} -I $ {PROJ_DIR}/ build”

-引用 Vision 库和特定于项目的 C 仿真目录:-csimflags“ $ {OPENCV_INC_FLAGS} $ {VISION_INC_FLAGS} -I $ {PROJ_DIR} /build”

请注意,在测试台标志和设计文件标志中添加了$ {VISION_INC_FLAGS}变量。此设置引用OpenCV 包含文件。

完整的命令如下所示:

add_files -tb“ $ {PROJ_DIR}/xf_resize_tb.cpp” -cflags“ $ {OPENCV_INC_FLAGS} $ {VISION_INC_FLAGS} -I ${PROJ_DIR} / build” -csimflags“ $ {OPENCV_INC_FLAGS} $ {PROSION_IN /建立”

3.项目设置:

现在已经添加了所有需要的 C 源文件,执行项目创建的最后一步。这些命令设置 HLS IP 的顶层函数,并创建一个所需的项目solution。

set_top $ PROJ_TOP#设置HLS IP的顶级文件

open_solution -reset $SOLUTION_NAME#创建项目解决方案

set_part $ SOLUTION_PART#设置解决方案部分

create_clock -period $SOLUTION_CLKP#设置项目目标时钟周期

4.c-sim:

本部分通过将 HLS IP 和 Testbench 设计发送给编译器进行编译和执行,来执行 HLS 流的 C仿真阶段。此命令用于设置编译器链接器标志和 testbench 文件,以及:

-引用 OpenCV包含和预编译的库目录:-ldflags“ -L $ {OPENCV_LIB} $ {OPENCV_LIB_REF}”

-包括用于验证测试台的图像作为主要功能的参数:-argv“ $ {XF_PROJ_ROOT} /data/128x128.png”

完整的命令如下所示:

csim_design -ldflags“ -L ${OPENCV_LIB} $ {OPENCV_LIB_REF}” -argv“ $ {XF_PROJ_ROOT} /data/128x128.png”

5.C到RTL综合:

本部分执行 Vitis HLS C 到 RTL 合成阶段。此阶段不需要标志或选项。

csynth_design

6.C/RTL协同仿真:

本部分在合成后执行 Vitis HLS IP的 RTL 协同仿真。HLS 会自动根据 C test bench 生成RTLtestbench 进行协同仿真,以下指令用于设置编译器链接器标志和 testbench 文件,以及:

-引用 OpenCV包含和预编译的库目录:-ldflags“ -L $ {OPENCV_LIB} $ {OPENCV_LIB_REF}”

-包括用于验证测试平台的图像:-argv“ $ {XF_PROJ_ROOT} /data/128x128.png”

完整的命令如下所示:

cosim_design -ldflags“ -L ${OPENCV_LIB} $ {OPENCV_LIB_REF}” -argv“ $ {XF_PROJ_ROOT} /data/128x128.png”

7.导出IP:

Vitis HLS 流程的最后阶段是设计的输出。本示例导出RTL的设计并运行 Vivado Synthesis,以获取准确的资源利用率和估计的时序结果。

export_design -flow syn -rtlverilog

注意:导出 RTL 的设计并运行 Vivado Synthesis 进行布局布线的过程需要在 Vivado 工具中先载入有效的 license

责任编辑:xj

原文标题:Vitis Vision | 利用Vitis HLS tcl shell 一键跑通视觉加速例程

文章出处:【微信公众号:XILINX技术社区】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 视觉
    +关注

    关注

    1

    文章

    171

    浏览量

    24713
  • HLS
    HLS
    +关注

    关注

    1

    文章

    133

    浏览量

    25595
  • Vitis
    +关注

    关注

    0

    文章

    154

    浏览量

    8261

原文标题:Vitis Vision | 利用Vitis HLS tcl shell 一键跑通视觉加速例程

文章出处:【微信号:gh_2d1c7e2d540e,微信公众号:XILINX开发者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    远程打印难题?一键搞定,再也不用办公室啦!

    直接打印”,各种急活都能稳稳接住:✦团队协作:会议资料一键远程打印,免传文件超高效✦机密文件:直连本地打印机操作,避免外传风险,安全便捷✦远程办公:修改完外地办公
    的头像 发表于 11-05 17:00 782次阅读
    远程打印难题?<b class='flag-5'>一键</b>搞定,再也不用<b class='flag-5'>跑</b>办公室啦!

    GraniStudio:视觉和运控例程

    1.文件运行 导入工程 双击运行桌面GraniStudio.exe。 通过引导界面导入视觉和运控例程,点击导入按钮。 打开视觉和运控例程所在路径,选中
    的头像 发表于 08-22 17:40 711次阅读
    GraniStudio:<b class='flag-5'>视觉</b>和运控<b class='flag-5'>例程</b>

    如何在Unified IDE中创建视觉HLS组件

    组件开始,该组件可以导出为 XO 文件用于 Vitis 系统工程;这与“自上而下的流程”相反,后者从 Vitis 工程开始,然后将 HLS 组件导入该工程。我们将创建视觉库示例“re
    的头像 发表于 07-02 10:55 1129次阅读
    如何在Unified IDE中创建<b class='flag-5'>视觉</b>库<b class='flag-5'>HLS</b>组件

    HarmonyOS应用一键置灰指南

    一键置灰通常应用于如下场景 1. 重大悼念活动: 在国家发生重大灾难、事故或举行悼念日等特殊时期,为了表达对逝者的尊重和哀悼,许多 APP 会将界面置灰。例如,在些地震、空难等灾难事件发生后,以及
    的头像 发表于 06-27 00:08 372次阅读

    使用AMD Vitis Unified IDE创建HLS组件

    这篇文章在开发者分享|AMD Vitis HLS 系列 1 - AMD Vivado IP 流程(Vitis 传统 IDE) 的基础上撰写,但使用的是 AMD Vitis Unifie
    的头像 发表于 06-20 10:06 1919次阅读
    使用AMD <b class='flag-5'>Vitis</b> Unified IDE创建<b class='flag-5'>HLS</b>组件

    如何使用AMD Vitis HLS创建HLS IP

    本文逐步演示了如何使用 AMD Vitis HLS 来创建HLS IP,通过 AXI4 接口从存储器读取数据、执行简单的数学运算,然后将数据写回存储器。接着会在 AMD Viva
    的头像 发表于 06-13 09:50 1277次阅读
    如何使用AMD <b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b>创建<b class='flag-5'>HLS</b> IP

    U盘一键制作

    在电脑维修中启动盘很重要,靠谱的u盘一键启动制作方法
    发表于 05-06 16:10 44次下载

    Profinet邂逅ModbusRTU:印刷厂有网关“一键打通”通信链路

    Profinet邂逅ModbusRTU:印刷厂有网关“一键打通”通信链路
    的头像 发表于 04-08 17:11 430次阅读
    Profinet邂逅ModbusRTU:印刷厂有网关“<b class='flag-5'>一键</b>打通”通信链路

    三一挖掘机一键启动开关易坏的原因及更换注意事项

    三一挖掘机一键启动开关易坏的原因虽然三一挖掘机的一键启动系统设计旨在提高便利性和安全性,但在实际使用中,可能会出现些问题导致开关易坏。这些问题可能包括:频繁使用:挖掘机在施工过程中频繁启动和关闭
    发表于 03-12 09:29

    两轮车PKE无钥匙进入PKG一键启动系统设计

    两轮车无钥匙进入PKE 一键启动系统PKG
    的头像 发表于 03-04 10:20 823次阅读
    两轮车PKE无钥匙进入PKG<b class='flag-5'>一键</b>启动系统设计

    LoRa无线一键报警安防建设方案

    SOS紧急呼叫按钮具有紧急情况下一键报警的功能,可与报警主机配合使用,支持标准LoRaWAN协议。lora紧急按钮具有紧急情况下一键报警功能,可与报警主机配合使用,支持标准LoRaWAN协议。如遇
    的头像 发表于 02-28 14:41 1017次阅读
    LoRa无线<b class='flag-5'>一键</b>报警安防建设方案

    开关柜一键顺控在一键停电、一键送电中的作用

    蜀瑞创新为大家科普,开关柜一键顺控技术在一键停电和一键送电中发挥了快速响应、减少人为错误、提高安全性、简化操作流程、降低操作风险、提高送电成功率等综合优势,对于提升电力系统的运行效率、安全性以及自动化水平具有重要意义。
    的头像 发表于 02-27 09:13 1242次阅读

    设备管理系统如何实现一键智控?

    中设智控的“一键智控”模式不仅解决了传统设备管理中的信息孤岛、效率低下等痛点,更通过数据驱动重构企业生产力。未来,随着工业4.0的深化,设备管理系统将成为企业数字化转型的核心枢纽,而中设智控凭借其技术积累与行业深耕,正引领这场管理革命,助力中国制造向“中国智造”加速迈进。
    的头像 发表于 02-17 10:34 967次阅读
    设备管理系统如何实现<b class='flag-5'>一键</b>智控?

    如何保障10KV开关柜的一键顺控技术的安全性?

    通过上述综合性的安全措施,蜀瑞创新开关柜一键顺控方案可以显著提升10KV开关柜一键顺控技术的安全水平,确保其在实际应用中的稳定性和可靠性。同时,随着技术的发展,还需要不断评估和改进现有的安全措施,以应对新的挑战。
    的头像 发表于 01-16 09:09 856次阅读
    如何保障10KV开关柜的<b class='flag-5'>一键</b>顺控技术的安全性?

    石油行业中,开关柜一键顺控的作用

    蜀瑞创新为大家科普:在石油行业中,开关柜的一键顺控技术可以显著提高操作的安全性、效率和可靠性。一键顺控指的是通过个简单的操作指令(如按下按钮或点击屏幕上的图标),自动执行系列预定义
    的头像 发表于 12-26 09:37 954次阅读
    石油行业中,开关柜<b class='flag-5'>一键</b>顺控的作用