0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

利用Vitis HLS tcl shell一鍵跑通視覺加速例程

電子工程師 ? 來源:XILINX技術(shù)社區(qū) ? 作者:陳雯 ? 2020-12-29 11:12 ? 次閱讀

本文給想直接使用Vitis HLS 工具在 Standalone 模式下調(diào)用 Xilinx Vision Library L1 API 的小伙伴提供了一個非常容易上手的腳本文件。

論壇上遇到在高層次綜合工具中調(diào)用視覺庫遇到的大多數(shù)問題都和 opencv 庫以及Xilinx Vision 庫的安裝路徑有關(guān),如今 Vitis HLS 2020.1 之后的版本都不再提供OpenCV 的預(yù)編譯庫,就更需要開發(fā)者們將各自工作環(huán)境中的庫路徑,環(huán)境變量都設(shè)置好。希望這篇博文能給大家調(diào)用 Vitis Vision Library 提供向?qū)?,提升效率?/span>

Vitis Vision庫

Vitis Vision 庫是 Xilinx 官方將 Opencv 功能轉(zhuǎn)換至易于在 FPGA 中部署的視覺加速庫,可在Vitis 環(huán)境中實(shí)施。其中 Vitis Vision 庫的 L1 目錄提供了在 Vitis HLS 層級部署的應(yīng)用實(shí)例設(shè)計(jì)。這個實(shí)例設(shè)計(jì)中 C-sim 的流程中需要調(diào)用 OpenCV 用于測試平臺功能,因此需要現(xiàn)有的OpenCV 安裝。

Vitis Vision庫:(或點(diǎn)擊閱讀原文進(jìn)入)

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

為了適應(yīng)各種用戶環(huán)境,從2020.1版本開始,Xilinx 不再提供帶有 Vivado / Vitis 工具的OpenCV 的預(yù)安裝版本。盡管 Vitis 在綜合布局布線Vision庫的流程中不需要 OpenCV,但是運(yùn)行示例設(shè)計(jì)仿真是必需的。

本文使用 Vitis 2020.2 版本介紹了如何創(chuàng)建獨(dú)立的 Vitis HLS TCL 文件,用戶只要在將該 tcl腳本拷貝在 Vision Lirary 的實(shí)例目錄中,即可在命令行模式下跑完 Vitis_HLS C仿真,綜合,聯(lián)合仿真以及導(dǎo)出 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#

要利用示例設(shè)計(jì)或在用戶測試平臺中引用 OpenCV 庫,必須執(zhí)行以下步驟:

-安裝 OpenCV 工具版本3.x

OpenCV 在Linux 的安裝和環(huán)境設(shè)置請參考附錄A, 在 Windows 環(huán)境下建議使用 Mingw 編譯Opencv 安裝包。

-設(shè)置環(huán)境變量以引用 OpenCV 安裝路徑

-下載 Vitis Version library

-創(chuàng)建 TCL 腳本并在 Vitis HLS 命令行執(zhí)行

注意:2020.1 Vitis Vision 庫已使用 OpenCV 庫的3.3版進(jìn)行了驗(yàn)證。比該版本更新的任何版本都可以使用,但是,版本4.x可能相對于3.x版本具有庫功能更改,可能需要修改示例設(shè)計(jì)測試平臺。因此,建議使用 OpenCV 3.x 版運(yùn)行示例設(shè)計(jì)。OpenCV 庫僅提供測試平臺功能,不是必需的,并且不會以任何方式影響 Vision 內(nèi)核的實(shí)現(xiàn)。

  • 環(huán)境設(shè)置

Linux 環(huán)境變量設(shè)置要求:

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 環(huán)境變量設(shè)置要求:

示例如下所示,并且每個用戶的設(shè)置會有所不同,具體取決于 OpenCV 和編譯器工具的安裝目錄。

注意:必須在用戶的環(huán)境中正確設(shè)置 LD_LIBRARY_PATH 動態(tài)庫的搜索路徑環(huán)境變量和OpenCV PATH 信息,此腳本和 Vitis Vision 示例設(shè)計(jì)才能正常工作。此外,OpenCV 的包含庫和二進(jìn)制文件的路徑必須包含在系統(tǒng)的環(huán)境變量中。否則,將導(dǎo)致仿真期間庫包含錯誤。

  • 操作步驟

要運(yùn)行 Vitis HLS tcl 腳本,請執(zhí)行以下操作:

-將修改好的 tcl 腳本放在 / vision / L1 / example / resize 目錄中

-打開 Vitis HLS 命令行外殼并 cd / vision / L1 / example / resize 目錄

-運(yùn)行以下命令:vitis_hls -f run_hls_standalone.tcl

  • Vitis HLS TCL腳本詳細(xì)解釋

該AR提供了一個 TCL 腳本,用于在 makefile 流之外運(yùn)行 L1 調(diào)整大小示例設(shè)計(jì)。該腳本基于Windows 環(huán)境。該腳本基于以下環(huán)境設(shè)置:

-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 和項(xiàng)目環(huán)境的變量聲明

·項(xiàng)目創(chuàng)建命令

·使用 Vitis Vision 庫添加設(shè)計(jì)文件包括路徑

·使用 OpenCV 和 VitisVision 庫添加 Testbench 文件包括路徑

·使用 OpenCV 鏈接器參考進(jìn)行 C 仿真

·Vitis HLS IP 綜合

·具有 OpenCV 鏈接器參考的 RTL 協(xié)同仿真

· 導(dǎo)出IP


1.變量聲明:

變量聲明部分的第一部分聲明了一些變量,這些變量復(fù)制makefile流和該流生成的settings.tcl文件的環(huán)境變量。這些變量指向 Vitis Vision Includes,OpenCV 頭文件和 OpenCV預(yù)編譯的庫。這些位置可能會根據(jù)用戶系統(tǒng)的安裝路徑而有所不同。

設(shè)置 XF_PROJ_ROOT“ C:/ Data / Vitis_Libraries / Vitis_Libraries-master / vision”#Vitis Vision庫的包含目錄

設(shè)置 OPENCV_INCLUDE“ C:/ Data / OpenCV / build_win64 / install /include” #OpenCV頭文件目錄

設(shè)置 OPENCV_LIB“ C:/ Data / OpenCV / build_win64 / install / x64 /mingw / lib” #OpenCV 編譯的庫目錄

下一個變量聲明部分有助于創(chuàng)建 Vitis HLS 項(xiàng)目,并有助于使腳本可移植:

·設(shè)置 PROJ_DIR“ $ XF_PROJ_ROOT /L1 / examples / resize”

·設(shè)置 SOURCE_DIR“ $ PROJ_DIR /”

·設(shè)置 PROJ_NAME“ hls_example”

·設(shè)置 PROJ_TOP“ resize_accel”

·設(shè)置 SOLUTION_NAME“ sol1”

·設(shè)置 SOLUTION_PART“xcvu11p-flgb2104-1-e”

·設(shè)置 SOLUTION_CLKP 5

最后,最后一部分聲明變量,這些變量表示 HLS 引用和使用庫所需的引用路徑和標(biāo)志。這里我們發(fā)現(xiàn)在一個易用性高的腳本中,使用變量而不是代碼有助于理解如何使用這些選項(xiàng)。

設(shè)置 VISION_INC_FLAGS“ -I $XF_PROJ_ROOT / L1 / include -std = c ++ 0x”#Vitis Vision 包含路徑和 C ++ 11 設(shè)置

設(shè)置 OPENCV_INC_FLAGS“ -I $OPENCV_INCLUDE”#OpenCV 包含目錄引用

設(shè)置 OPENCV_LIB_FLAGS“ -L $OPENCV_LIB”#OpenCV 庫參考

注意:

在 Windows 中,庫引用必須包含版本號。本示例使用 OpenCV 3.4.11安裝。精確的包含格式將取決于用戶的安裝,并且可能與下面列出的格式不同。

設(shè)置 OPENCV_LIB_REF“ -lopencv_imgcodecs3411-lopencv_imgproc3411 -lopencv_core3411 -lopencv_highgui3411 -lopencv_flann3411-lopencv_features2d3411”

在 Linux include 語句不使用版本號,并給出如下:

設(shè)置 OPENCV_LIB_REF“-lopencv_imgcodecs -lopencv_imgproc -lopencv_core -lopencv_highgui -lopencv_flann-lopencv_features2d”

2.項(xiàng)目創(chuàng)建:

項(xiàng)目創(chuàng)建部分非常簡單,它會創(chuàng)建一個新的項(xiàng)目目錄和項(xiàng)目文件:

open_project -reset$PROJ_NAME

設(shè)計(jì)文件包括:

設(shè)計(jì)文件已添加到本節(jié)中的設(shè)計(jì)中。該命令:

-引用單個HLS內(nèi)核文件:add_files“ $ {PROJ_DIR} /xf_resize_accel.cpp”

-引用 Vision 庫和特定于項(xiàng)目的包含合成目錄:-cflags“ $ {VISION_INC_FLAGS} -I $ {PROJ_DIR} /build

-引用了用于 C 仿真的Vision庫和特定于項(xiàng)目的包含目錄:-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 文件將在本節(jié)中添加到設(shè)計(jì)中。命令:

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

-引用 Vision 庫和特定于項(xiàng)目的包含目錄:-cflags“ $ {OPENCV_INC_FLAGS} $ {VISION_INC_FLAGS} -I $ {PROJ_DIR}/ build”

-引用 Vision 庫和特定于項(xiàng)目的 C 仿真目錄:-csimflags“ $ {OPENCV_INC_FLAGS} $ {VISION_INC_FLAGS} -I $ {PROJ_DIR} /build”

請注意,在測試臺標(biāo)志和設(shè)計(jì)文件標(biāo)志中添加了$ {VISION_INC_FLAGS}變量。此設(shè)置引用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.項(xiàng)目設(shè)置:

現(xiàn)在已經(jīng)添加了所有需要的 C 源文件,執(zhí)行項(xiàng)目創(chuàng)建的最后一步。這些命令設(shè)置 HLS IP 的頂層函數(shù),并創(chuàng)建一個所需的項(xiàng)目solution。

set_top $ PROJ_TOP#設(shè)置HLS IP的頂級文件

open_solution -reset $SOLUTION_NAME#創(chuàng)建項(xiàng)目解決方案

set_part $ SOLUTION_PART#設(shè)置解決方案部分

create_clock -period $SOLUTION_CLKP#設(shè)置項(xiàng)目目標(biāo)時(shí)鐘周期

4.c-sim:

本部分通過將 HLS IP 和 Testbench 設(shè)計(jì)發(fā)送給編譯器進(jìn)行編譯和執(zhí)行,來執(zhí)行 HLS 流的 C仿真階段。此命令用于設(shè)置編譯器鏈接器標(biāo)志和 testbench 文件,以及:

-引用 OpenCV包含和預(yù)編譯的庫目錄:-ldflags“ -L $ {OPENCV_LIB} $ {OPENCV_LIB_REF}”

-包括用于驗(yàn)證測試臺的圖像作為主要功能的參數(shù):-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綜合:

本部分執(zhí)行 Vitis HLS C 到 RTL 合成階段。此階段不需要標(biāo)志或選項(xiàng)。

csynth_design

6.C/RTL協(xié)同仿真:

本部分在合成后執(zhí)行 Vitis HLS IP的 RTL 協(xié)同仿真。HLS 會自動根據(jù) C test bench 生成RTLtestbench 進(jìn)行協(xié)同仿真,以下指令用于設(shè)置編譯器鏈接器標(biāo)志和 testbench 文件,以及:

-引用 OpenCV包含和預(yù)編譯的庫目錄:-ldflags“ -L $ {OPENCV_LIB} $ {OPENCV_LIB_REF}”

-包括用于驗(yàn)證測試平臺的圖像:-argv“ $ {XF_PROJ_ROOT} /data/128x128.png”

完整的命令如下所示:

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

7.導(dǎo)出IP:

Vitis HLS 流程的最后階段是設(shè)計(jì)的輸出。本示例導(dǎo)出RTL的設(shè)計(jì)并運(yùn)行 Vivado Synthesis,以獲取準(zhǔn)確的資源利用率和估計(jì)的時(shí)序結(jié)果。

export_design -flow syn -rtlverilog

注意:導(dǎo)出 RTL 的設(shè)計(jì)并運(yùn)行 Vivado Synthesis 進(jìn)行布局布線的過程需要在 Vivado 工具中先載入有效的 license

責(zé)任編輯:xj

原文標(biāo)題:Vitis Vision | 利用Vitis HLS tcl shell 一鍵跑通視覺加速例程

文章出處:【微信公眾號:XILINX技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 視覺
    +關(guān)注

    關(guān)注

    1

    文章

    146

    瀏覽量

    23871
  • HLS
    HLS
    +關(guān)注

    關(guān)注

    1

    文章

    128

    瀏覽量

    24003
  • Vitis
    +關(guān)注

    關(guān)注

    0

    文章

    145

    瀏覽量

    7387

原文標(biāo)題:Vitis Vision | 利用Vitis HLS tcl shell 一鍵跑通視覺加速例程

文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    人機(jī)界面在開關(guān)柜一鍵順控中起到什么作用?

    人機(jī)界面在一鍵順控系統(tǒng)中發(fā)揮著操作指令輸入、狀態(tài)顯示與反饋、參數(shù)設(shè)置與配置以及提升操作便利性和安全性等重要作用。它是實(shí)現(xiàn)一鍵順控功能不可或缺的關(guān)鍵組成部分。蜀瑞創(chuàng)新專注智能開關(guān)柜一鍵順控
    的頭像 發(fā)表于 11-05 10:02 ?59次閱讀
    人機(jī)界面在開關(guān)柜<b class='flag-5'>一鍵</b>順控中起到什么作用?

    10KV開關(guān)柜一鍵順控和110KV變電站一鍵順控哪些地方不同

    蜀瑞創(chuàng)新為大家科普:10KV開關(guān)柜一鍵順控和110KV變電站一鍵順控在多個方面存在不同,這些差異主要體現(xiàn)在應(yīng)用范圍、功能側(cè)重、控制對象以及系統(tǒng)復(fù)雜性等方面。
    的頭像 發(fā)表于 10-16 10:29 ?179次閱讀
    10KV開關(guān)柜<b class='flag-5'>一鍵</b>順控和110KV變電站<b class='flag-5'>一鍵</b>順控哪些地方不同

    LoRa無線一鍵報(bào)警安防建設(shè)系統(tǒng)

    SOS緊急呼叫按鈕具有緊急情況下一鍵報(bào)警的功能,可與報(bào)警主機(jī)配合使用,支持標(biāo)準(zhǔn)LoRaWAN協(xié)議。 lora緊急按鈕具有緊急情況下一鍵報(bào)警功能,可與報(bào)警主機(jī)配合使用,支持標(biāo)準(zhǔn)LoRaWAN協(xié)議。如遇
    發(fā)表于 09-25 17:08

    一鍵斷電開關(guān)的種類有哪些

    一鍵斷電開關(guān)的種類主要可以從其功能和實(shí)現(xiàn)方式上進(jìn)行分類。以下是些常見的一鍵斷電開關(guān)種類: 1. 繼電器式一鍵斷電開關(guān) 定義 :這種開關(guān)通過繼電器或接觸器控制電路的通斷,實(shí)現(xiàn)
    的頭像 發(fā)表于 09-13 16:45 ?647次閱讀

    一鍵斷電開關(guān)的控制原理是什么

    一鍵斷電開關(guān),也被稱為緊急斷電開關(guān)或緊急停止開關(guān),是種安全裝置,用于在緊急情況下迅速切斷電源,以防止事故的發(fā)生或擴(kuò)大。這種開關(guān)的設(shè)計(jì)和應(yīng)用在工業(yè)、實(shí)驗(yàn)室、醫(yī)療設(shè)備以及任何需要快速斷電的場合都
    的頭像 發(fā)表于 09-13 16:28 ?681次閱讀

    變電站一鍵順控系統(tǒng)和開關(guān)柜一鍵順控有區(qū)別嗎?

    變電站一鍵順控系統(tǒng)和開關(guān)柜一鍵順控技術(shù)雖然都涉及到“一鍵順控”的概念,但它們在應(yīng)用范圍和具體實(shí)現(xiàn)上有所不同,因此變電站一鍵順控系統(tǒng)和開關(guān)柜一鍵
    的頭像 發(fā)表于 07-31 13:34 ?404次閱讀
    變電站<b class='flag-5'>一鍵</b>順控系統(tǒng)和開關(guān)柜<b class='flag-5'>一鍵</b>順控有區(qū)別嗎?

    開關(guān)柜一鍵順控的技術(shù)難點(diǎn)和優(yōu)勢、發(fā)展趨勢?

    開關(guān)柜一鍵順控技術(shù)的核心在于將復(fù)雜的人工操作流程轉(zhuǎn)化為自動化、智能化的控制流程,蜀瑞開關(guān)柜一鍵順控系統(tǒng)多年技術(shù)經(jīng)驗(yàn)
    的頭像 發(fā)表于 07-23 11:41 ?381次閱讀

    在Windows 10上創(chuàng)建并運(yùn)行AMD Vitis?視覺庫示例

    本篇文章將演示創(chuàng)建個使用 AMD Vitis? 視覺庫的 Vitis HLS 組件的全過程。此處使用的是
    的頭像 發(fā)表于 05-08 14:02 ?643次閱讀
    在Windows 10上創(chuàng)建并運(yùn)行AMD <b class='flag-5'>Vitis</b>?<b class='flag-5'>視覺</b>庫示例

    Vitis2023.2使用之—— updata to Vitis Unified IDE

    章聊了vitis2023.2怎樣使用classic Vitis IDE,這章我們來說說基于classic
    發(fā)表于 03-24 17:14

    Vitis2023.2使用之—— classic Vitis IDE

    AMD官網(wǎng)下載全系統(tǒng)安裝包,或下載網(wǎng)頁版安裝包,安裝好vitis全套組件。打開vivado建個測試工程編譯好后,在tcl命令輸入框子輸入命令 vitis –classic 即可打開傳
    發(fā)表于 03-24 16:15

    一鍵解鎖:將任意圖像設(shè)備秒變GigE Vision設(shè)備的終極秘訣

    ?物聯(lián)網(wǎng)發(fā)展正在走向輕便和低成本。友思特eBUS Edge軟件方案,可將任意圖像設(shè)備一鍵升級為GigE Vision設(shè)備,讓機(jī)器視覺便捷處理更進(jìn)步。
    的頭像 發(fā)表于 03-13 17:20 ?633次閱讀
    <b class='flag-5'>一鍵</b>解鎖:將任意圖像設(shè)備秒變GigE Vision設(shè)備的終極秘訣

    AMD-Xilinx的Vitis-HLS編譯指示小結(jié)

    內(nèi)的走線就會過長,這會導(dǎo)致時(shí)序違規(guī)。 以下行為可能阻止或限制 Vitis HLS 可在數(shù)據(jù)流模型內(nèi)執(zhí)行的重疊: 在數(shù)據(jù)流區(qū)域中間讀取函數(shù)輸入或?qū)懭牒瘮?shù)輸出。 單生產(chǎn)者使用者違例。 任務(wù)的有條件執(zhí)行
    發(fā)表于 12-31 21:20

    一鍵閃測儀使用時(shí)的注意事項(xiàng)有哪些?

    中圖儀器VX系列一鍵閃測儀采用雙遠(yuǎn)心高分辨率光學(xué)鏡頭,結(jié)合高精度圖像分析算法,并融入一鍵閃測原理,可以對工件平面的點(diǎn)、線、圓等基本元素作精密測量,測量精度高,并且操作簡單、性能優(yōu)良穩(wěn)定。
    的頭像 發(fā)表于 12-13 09:28 ?791次閱讀
    <b class='flag-5'>一鍵</b>閃測儀使用時(shí)的注意事項(xiàng)有哪些?

    一鍵動態(tài)切換IP腳本

    T*o*r*Proxy一鍵搭建動態(tài)代*理,通過利用T*o*r搭建Socks5代*理,最終實(shí)現(xiàn)動態(tài)切換IP的效果。
    的頭像 發(fā)表于 12-08 10:25 ?1004次閱讀
    <b class='flag-5'>一鍵</b>動態(tài)切換IP腳本

    研討會:利用編譯器指令提升AMD Vitis? HLS 設(shè)計(jì)性能

    /C++ 代碼為 AMD 設(shè)備上可編程邏輯的 RTL 代碼加速 IP 創(chuàng)建。 在 Vitis HLS 中,優(yōu)化指令脫穎而出成為最強(qiáng)大的工具之,使設(shè)計(jì)人員能夠從相同底層 C 模型出發(fā),
    的頭像 發(fā)表于 12-05 09:10 ?505次閱讀
    研討會:<b class='flag-5'>利用</b>編譯器指令提升AMD <b class='flag-5'>Vitis</b>? <b class='flag-5'>HLS</b> 設(shè)計(jì)性能