這篇博客展示了在 AMD Zynq 設(shè)計(jì)中,如何用 Vitis Vision Library 中的函數(shù)(remap)導(dǎo)出一個 IP,并基于此 IP 構(gòu)建一個的硬件平臺(XSA),進(jìn)而基于此平臺來運(yùn)行嵌入式應(yīng)用。
remap 函數(shù)是指從圖像的某個位置獲取像素信息,并將這些像素信息重新放置到另一個圖像的另一個位置。在此示例中,設(shè)計(jì)將使用 128x128 像素的灰度輸入圖像,然后在輸出端將其水平翻轉(zhuǎn)。
測試采用以下設(shè)置:
版本:Vivado 和 Vitis 2023.1
操作系統(tǒng):Ubuntu 20.04.1 LTS
硬件:Zynq UltraScale+ ZCU104 評估板 (xczu7ev-ffvc1156-2-e)
1
// 創(chuàng)建 Vitis HLS IP 項(xiàng)目
在本節(jié)中,我們將利用 Vitis Vision L1 庫提供的預(yù)先存在的 Makefile 來創(chuàng)建和導(dǎo)出 remap 函數(shù),以便在 Vivado 項(xiàng)目中使用。
打開終端選擇一個適合的路徑位置,并將最新的 Vitis 庫克隆到該位置:
git clone https://github.com/Xilinx/Vitis_Libraries
跳轉(zhuǎn)至 Vision L1 中名為 remap 的函數(shù)的目錄下:
cd Vitis_Libraries/vision/L1/examples/remap
注:專門就 Vision 庫而言,需要 OpenCV 庫才能編譯函數(shù)。請使用下面鏈接中的指令編譯 OpenCV,并在運(yùn)行下一步之前設(shè)置所需的環(huán)境變量。
設(shè)置 Vitis/Vivado 工具,然后運(yùn)行 HLS 項(xiàng)目腳本來構(gòu)建 HLS 設(shè)計(jì),并用該設(shè)計(jì)將函數(shù)作為 Vivado IP 導(dǎo)出。
PLATFORM——這是評估板平臺名稱,通??梢酝ㄟ^ PLATFORM_REPO_PATHS 環(huán)境變量或在
VIVADO_SYN——此參數(shù)通過 export_design 流程運(yùn)行 Vitis HLS 項(xiàng)目,該流程提供項(xiàng)目的壓縮文件作為 Vivado IP。
您還可以打開 Vitis HLS 項(xiàng)目,通過命令 vitis_hls -p remap.prj 查看結(jié)果和報告。
注:由于此 Vitis HLS 項(xiàng)目來自 Makefile,其并不包括在 GUI 環(huán)境下直接重新運(yùn)行 C Simulation 或 Cosimulation 所需的標(biāo)志和參數(shù)。您可以檢查 remap 文件夾中的 run_hls.tcl 文件,以查看仿真所需要添加的必要標(biāo)志和參數(shù)。
重新運(yùn)行上述指令,添加適當(dāng)?shù)淖兞浚员銖拿钚羞\(yùn)行仿真(例如:CSIM=1 和/或 COSIM=1)。
2
// 創(chuàng)建 Vivado 平臺項(xiàng)目
本節(jié)將展示如何使用上一節(jié)中創(chuàng)建的 Vitis HLS IP 來創(chuàng)建一個以 ZCU104 為目標(biāo)器件的自定義平臺。
將上一節(jié)中創(chuàng)建的導(dǎo)出 IP 復(fù)制到它自己的存儲庫位置,然后打開 Vivado。
按照下列步驟創(chuàng)建項(xiàng)目并對其進(jìn)行設(shè)置:
選擇 Create Project,點(diǎn)擊 Next:
輸入項(xiàng)目名稱:remap_vivado,點(diǎn)擊 Next
選擇 RTL 項(xiàng)目,此時不要指定源文件,點(diǎn)擊 Next
在評估板選項(xiàng)卡,選擇 Zynq UltraScale+ ZCU104 評估板,點(diǎn)擊 Next,然后選擇 Finish
打開項(xiàng)目后:
在左側(cè)的流程導(dǎo)航器中選擇 Project Manager > Settings
選擇IP > Repository,點(diǎn)擊 + 并在此添加 ip_repo 文件夾的位置,然后關(guān)閉窗口
我們現(xiàn)在可以添加自定義 IP 及其余的模塊:
在左側(cè)的流程導(dǎo)航器中,選擇 IP Integrator > Create Block Design
為原理圖選擇描述性名稱,或保留其默認(rèn)值,然后選擇 OK????
選擇 +(添加 IP),并選擇 Remap_accel 模塊
選擇 +(添加 IP),并選擇 Zynq UltraScale+ MPSoC 模塊
點(diǎn)擊窗口頂部橫幅上的 Run Block Automation。
確保勾選 Apply Board Preset,然后選擇 OK
現(xiàn)在,我們將配置 MPSoC 模塊,使其具有合適的接口,能夠與 IP 進(jìn)行通信:
雙擊圖中的 MPSoC 模塊,并做出以下修改。我們將關(guān)閉本設(shè)計(jì)中不會用到的一些功能。
更改這些設(shè)置后,選擇 OK 將這些變更應(yīng)用到 MPSoC 模塊上。
我們現(xiàn)在可以使用連接自動化功能將這些模塊彼此連接:
點(diǎn)擊 Run Connection Automation
?勾選全部自動化,然后選擇 OK
點(diǎn)擊 Run Connection Automation(第二次運(yùn)行會把 IP 其它的 AXI 接口也鏈接起來,這些接口是IP互聯(lián)接口的一部分)
勾選全部自動化,然后選擇 OK
此刻的設(shè)計(jì)應(yīng)類似于下圖(您可以點(diǎn)擊工具欄上的“Regenerate”,可自動對各個模塊進(jìn)行重新排列):
檢查 Address Editor 選項(xiàng)卡。請注意,默認(rèn)自動分配地址,AXI 和 IP 控件的地址空間設(shè)置為 0x0 和 0xA000_0000。
返回至圖表選項(xiàng)卡,選擇工具欄上的 Validate Design 按鈕,或者在 Vivado 的主窗口中使用 Tools > Validate Design。確保設(shè)計(jì)無誤。
在 Sources 窗口的 Sources 選項(xiàng)卡中,展開 Design Sources ,右鍵點(diǎn)擊當(dāng)前模塊設(shè)計(jì),選擇 Create HDL Wrapper(選擇 Let Vivado manage wrapper and auto-update),然后點(diǎn)擊 OK。
在左側(cè)的 Flow Navigator 中,選擇 Generate Block Design,保留默認(rèn)選項(xiàng),然后點(diǎn)擊 Generate。您可以在 Design Runs 選項(xiàng)卡中監(jiān)視運(yùn)行狀態(tài)。
完成上述步驟后,點(diǎn)擊 Generate Bitstream,選擇 Yes/OK 來運(yùn)行生成比特流的必要流程。完成創(chuàng)建后,您可以點(diǎn)擊 Cancel 關(guān)閉打開的對話框,結(jié)束操作。
現(xiàn)在我們可以將硬件平臺導(dǎo)出為 XSA 格式,以便 Vitis 與我們的應(yīng)用一起使用。
在頂部工具欄中選擇 File > Export > Export Hardware
選擇 Next
選擇 Include bitstream,點(diǎn)擊 Next
設(shè)置 XSA 文件名:remap_platform,點(diǎn)擊 Next,然后點(diǎn)擊 Finish。輸出的 XSA 文件默認(rèn)保存在項(xiàng)目的根目錄
3
// 創(chuàng)建 Vitis 應(yīng)用項(xiàng)目
現(xiàn)在我們已經(jīng)從 Vivado 導(dǎo)出了一個平臺 XSA,我們可以使用這個文件來定義我們的平臺,并創(chuàng)建一個應(yīng)用程序來在平臺內(nèi)通信和運(yùn)行 IP。
打開 Vitis,然后導(dǎo)入 XSA:
vitis -workspace remap_ws
此操作會打開工作空間為 remap_ws 的 Vitis GUI。
創(chuàng)建應(yīng)用項(xiàng)目
選擇 Next
從頂部的選項(xiàng)卡中選擇 Create a new platform from hardware (XSA),然后瀏覽上一節(jié)的 remap_platform.xsa 文件,接著選擇 Next
設(shè)置應(yīng)用項(xiàng)目名稱:remap_project,選擇將 psu_cortexa53_0 用作處理器,然后選擇 Next
保留默認(rèn)域信息(Standalone OS),然后選擇Next
選擇“Empty Application (C)”模板,然后選擇 Finish
本博文包括參考文件,可供下載(點(diǎn)擊閱讀全文查看參考文件)??蓪⑦@些文件解壓到項(xiàng)目的根目錄中。
在“Explorer”窗口展開 remap_project_system > remap_project > src,右鍵點(diǎn)擊 src,選擇 Import Sources,瀏覽保存參考文件的目錄,選擇并導(dǎo)入下列文件:
remap_example_app.c
remap_input_image.h
remap_x_map.h
remap_y_map.h
文件導(dǎo)入后,可隨時檢查 remap_example_app.c 文件,以查看應(yīng)用正在執(zhí)行的操作??傊?,應(yīng)用程序用 DDR 內(nèi)存中的輸入圖像和映射數(shù)組數(shù)據(jù)配置 IP,并指示 IP 處理數(shù)據(jù)并將其寫回 DDR 內(nèi)存。
現(xiàn)在,我們可以構(gòu)建平臺并編譯應(yīng)用,以使其直接在 ZCU104 板上運(yùn)行。
在助手窗口中:
選擇 remap_platform [Platform],并使用 Build 按鈕(錘子圖標(biāo)),等待 Build Finished 消息出現(xiàn)
選擇 remap_project_system [System],并使用 Build 按鈕(錘子圖標(biāo)),等待 Build Finished 消息出現(xiàn)
完成構(gòu)建過程可能需要一些時間,時間長短取決于您的系統(tǒng)。
4
// 在硬件上運(yùn)行應(yīng)用
現(xiàn)在,我們可以運(yùn)行設(shè)計(jì)并驗(yàn)證 remap 函數(shù)的運(yùn)行。
在助手窗口中,選擇 remap_project_system [System],使用綠色運(yùn)行圖標(biāo),選擇 Launch Hardware。
一旦完成設(shè)計(jì)運(yùn)行,且硬件仍在運(yùn)行時,選擇 XSCT 窗口。如果窗口未打開,選擇 Vitis > XSCT Console。
在控制臺運(yùn)行以下命令:
xsct% source remap_memory_copy.tcl
注:此腳本是參考文件的組成部分。您也可以指文件的完整路徑,或使用“cd”跳轉(zhuǎn)至適當(dāng)?shù)哪夸洝?/p>
此腳本將讀取內(nèi)存中“input_buffer”和“output_buffer”的數(shù)據(jù),并將數(shù)據(jù)分別保存為 input.data和 output.data。在繼續(xù)操作之前等待完成消息。
在創(chuàng)建完 input.data 文件和 output.data 文件后,您現(xiàn)在可以通過運(yùn)行 Python 腳本來驗(yàn)證 remap 函數(shù)是否已成功執(zhí)行圖像的水平翻轉(zhuǎn)。運(yùn)行下列 Python 腳本:
python3 remap_convert_image.py
注:運(yùn)行此腳本需要安裝“numpy”和“Pillow” Python 包,通常使用“pip install numpy”和“pip install Pillow”命令來安裝這些包。
此腳本將輸出兩種文件,一個是 input.png,另一個是 output.png,表示發(fā)送到硬件的輸入圖像,以及通過 IP 傳遞后的輸出圖像。
審核編輯:劉清
-
MPSoC
+關(guān)注
關(guān)注
0文章
199瀏覽量
24336 -
Vivado
+關(guān)注
關(guān)注
19文章
815瀏覽量
66931 -
HLS
+關(guān)注
關(guān)注
1文章
130瀏覽量
24219 -
Ubuntu系統(tǒng)
+關(guān)注
關(guān)注
0文章
91瀏覽量
4041
原文標(biāo)題:
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論