1. 程式人生 > 實用技巧 >Vitis AI--個人除錯篇

Vitis AI--個人除錯篇

一、下載VITIS-AI的倉庫

單獨git clone很慢,因此先將其匯入到gitee平臺,再執行clone

1. Import VITIS-AI github repo into gitee repo

2. Git clone repo from gitee

二、安裝Docker

參考:https://docs.docker.com/engine/install/ubuntu/,並執行:

1. “Install using the repository”的全部步驟

2. “Install Docker Engine”的 sudo apt-get install docker-ce docker-ce-cli containerd.io

三、修改docker的配置檔案

使用國內映象(阿里雲、網易雲....)。

sudo gedit /etc/docker/daemon.json

{
 "registry-mirrors": [

"https://kfwkfulq.mirror.aliyuncs.com",

"https://2lqq34jg.mirror.aliyuncs.com",

"https://pee6w651.mirror.aliyuncs.com",

"https://registry.docker-cn.com",

"http://hub-mirror.c.163.com"

 ]
}
參考:https://blog.oioweb.cn/index.php/archives/1347.html

四、載入重啟docker

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

五、從docker中下載檔案

sudo docker pull xilinx/vitis-ai:latest

六、Run docker

開啟從gitee下載的Vitis-AI檔案路徑
cd Vitis-AI
sudo ./docker_run.sh xilinx/vitis-ai:latest
按照提示操作知道出現logo“VITIS—AI”表示安裝成功,輸入exit退出。


七、下載VITIS-AI tutorial

該倉庫的master分支只有一個Readme.md檔案。其他的例子在其他份分支上:

如果想切換到其他分支(比如Vitis-AI-Custom-Platform),則執行git checkout Vitis-AI-Custom-Platform。

VitisAI(Ultra96v2)平臺教程(GitHub開源 https://github.com/Xilinx/Vitis-AI-Tutorials/tree/Vitis-AI-Custom-Platform

一、閱讀Vitis-AI-Tutorial檔案中

/files/tutorials/1-Building-a-Vitis-Ultra96V2-and-MIPI-platform.md

1、 首先在Vivado中建立MIPI專案,安裝Petalinux工具。其次在ultra96上啟動硬體和軟體映象來觀察MIPI視訊。

1.1、將Vitis-AI-Tutorial資料夾中 reference-files/vivado/sources的sources檔案複製到 build/vivado 路徑下。

1.2、開啟Vivado2019.2(後綜合發現vivado2019.2版本不支援mipi IP核,vivado2020.1版本方可支援

1.3、在build/vivado建立一個新的專案,將其命名為‘ultra96v2_mipi’-----選擇RTL專案-----do not specify sources-----Boards-----Ultra96v2-----Finish。

1.4、在Tcl控制檯視窗開啟sources路徑。

1.5、Use the Tcl Console to call `source ./sources/u96v2_mipi.tcl`.

1.6、在Sources標籤中右鍵`u96v2_mipi.bd`然後‘Create HDL Wrapper’。

1.7、新增xdc檔案,從 `build/vivado/sources` 複製`cnst.xdc`檔案到專案約束檔案中。

2、為使用Vitis開發工具設計做準備

開啟Vivado工程修改硬體設計為軟體加速做準備。

3、配置平臺介面

3.1、新增ZYNQUltraSCALE IP核,開啟“Window”目錄選擇“Platform Interfaces”,

使能下列三個PS從介面,和一個master主介面(如果不做使能配置,直接在ZYNQ GUI介面勾選應該是可以的)

* S_AXI_HP0_FPD

* S_AXI_HP1_FPD

* S_AXI_HP2_FPD

* HPM0_FPD

Platform Interfaces**Options**選項中將三個slave介面的“stpg”值依次設定為: `HP0`, `HP1`, and `HP2`

4、指定平臺時鐘

  4.1. Double-click the **clk_wiz_0 IP**, and make the following changes in the Output Clocks tab:`[clk_out3=150MHz], [clk_out4=300MHz], [Matched routing selected on clk_out3/4], [Reset Type = Active Low]`

  4.2. Right-click the block design, select **Add IP**, and add a processor system reset IP for each of the new clocks.

  4.3 Name the new clocks, `proc_sys_reset_dynamic_1` and`proc_sys_reset_dynamic_2`.

  4.4 Connect the `clk_out3` and `clk_out4` outputs of `clk_wiz_0` block to `proc_sys_reset_dynamic_1` and `proc_sys_reset_dynamic_2` `slowest_sync_clk` inputs, respectively.

  4.5 Connect the `ext_reset_in`(proc_sys_rest IP的介面) to `pl_resetn0` on the MPSoC block.

4.6 Connect the "locked" output of the Clock Wizard to the `dcm_locked` port of the processor reset blocks.

  4.7 確保每個‘proc_sys_reset` 模組的`ext_reset_in` 與`pl_resetn0` 連線。

4.8 In the Platform Interfaces tab, enable `clk_out3` and `clk_out4` of the `clk_wiz_0` instance.

  4.9 Set the slower clock (in this case, `clk_out3`) as the default. `clk_out3` should have its id set to 0, and `clk_out4` should have its id set to 1.

  4.10 Make sure the `proc_sys_reset` block listed in each window is set to the instance that is connected to that clock. Check the properties/options window when each clock is selected in platform interfaces, and verify the proc_sys_reset parameter matches.

5、使能中斷

  5.1、新增IP核AXI Interrupt Controller命名為“axi_intc_0“。雙擊IP核進行配置,修改為”Edge or Level”和”Single”,點選OK。

5.2、新增IP核Concat命名為”xlconcat_interrup_0”,配置IP埠數為8.

  5.3、新增IP核Constant,配置值為’0’,連線到interrupt controller,命名為”xlconstant_gnd”。

  5.4、”Run Connection Automation”,自動連線將AXI Interrupt Controller的從介面連線到PS的”HPM0_LPD”主介面上。將”clk_out1(200MHz)”選擇為所有模組的時鐘資源。

  5.5、將”interrupt controller”的輸入與”concat”模組輸出連線。

  5.6、將”constant”模組的輸出與”concat”模組的第一個輸入連線。then each subsequent concat input to this net。

  5.7、將”interrupt comtroller”模組的輸出與PS模組的”pl_ps_irq0”連線。

6、生成XSA檔案

  綜合、佈局佈線、生成bit流,匯出自定製硬體平臺設計;可通過TCL指令或者點選介面執行。

  source ./sources/xsa.tcl

  注意:Vivado工程路徑不要太長,此時如果將sources資料夾放在路徑 ~build/vivado下並且執行sources下的xsa指令碼,生成的.xsa檔案會存放在與~build/hw_platform資料夾下面。

  建立軟體平臺

  The software platform requires several changes to the default Petalinux template. Begin by configuring the project to include a meta-layer, which builds in all necessary support for the MIPI mezzanine card and pipeline. Then, finish by adding the necessary Xilinx Runtime (XRT) components into the design.

7、安裝petalinux工具在ubuntu上

  # 安裝步驟

  7.1 執行 `bash pre_install.sh`

  7.2 執行 `bash tftp.sh`

  7.3 執行

```bash

mkdir /tools/Xilinx/

sudo chown 你的使用者名稱 /tools/Xilinx

```

  7.4 執行 `./petalinux-v2020.1-final-installer.run -d /tools/Xilinx`

  7.5 zyp使用:source /tools/Xilinx/settings.sh 注:每次使用petalinux工具時都要執行settings.sh

8、定製Petalinux專案(createàconfigàbuildàboot)

  8.1、在’build/’路徑下開啟備用的petalinux工程。

8.2、建立新的帶有zynqMP模板的petalinux工程

  ‘petalinux-create -n petalinux --template zynqMP -t project’

  8.3、從`reference-files/ petalinux’下複製資料夾`meta-ultra96v2mipi`,貼上到’build/ petalinux/ components’路徑下。

  8.4、更新Petalinux工程(xsa檔案)並且開啟初始化配置選單。

  ‘petalinux-config --get-hw-description=../hw_platform`

  注意:hw_platform資料夾路徑問題

  若出現報錯:將ultra96 路徑下的layer.conf檔案中 thud 改成 zeus.

8.5、主選單中選擇”Subsystem AUTO settings”和目錄下的”Serial Settings”。修改’psu_uart_1’作為primary(原預設psu_uart_0)。

8.6、主選單中選擇”DTG Settings”並且設定命名為’avnet-ultra96-rev1’(原來預設template)。

8.7、主選單中選擇”Yocto Settings” à”User Layers”並且新增

  ${PROOT}/components/meta-ultra96v2mipi 作為使用者第一層,然後退出初始化配置選單。

8.8、新增平臺XRT驅動,新增recipes通過拷貝`reference-files/ petalinux`路徑下的`recipes-xrt`檔案到`build/ petalinux/ project-spec/ meta-user`路徑下。

8.9、新增recipes”自動執行”的指令碼,保證在root後可自動執行recipes,拷貝路徑’reference-files/petalinux/autostart’ autostart目錄到’build/ petalinux/ project-spec/ meta-user/ recipes-apps’路徑下。

8.10、將上述recipes新增到petalinux映象配置中,在[build/ petalinux/ project-spec/ meta-user/ conf/ user-rootfsconfig]檔案中內容新增 [reference-files/ petalinux/ plnxrfscfg.txt]檔案內容。

8.11、開啟Petalinux的根檔案系統配置介面去使能上述的recipes

`petalinux-config -c rootfs`然後新增在"User Packages" and "Apps" 的子目錄下的`user-rootfsconfig`檔案。

8.12、在rootfs配置下,under the Petalinux Packge Groups,使能如下選項:

gstreamer、matchbox、opencv、v4lutils、x11。

8.13、退出rootfs配置選單。

9、修改Linux裝置樹

9.1、開啟檔案`build/ petalinux/ project-spec/ meta-user/ recipes-bsp/ device-tree/ files/ system-user.dtsi`。用`reference-files/ petalinux/ dtfrag.txt`內容替換開啟的內容。

  離線編譯petalinux:官網下載aarch64 sstate-cache和downloads檔案並解壓,存放路徑不要出現空格字元,否則後期編譯會出現錯誤。

  配置sstate

  在petalinux工程路徑下輸入petalinux-config命令進入配置介面

  1.執行petalinux-config報錯:

  將下面兩個檔案中的thud修改為zeus

  2.petalinux-build編譯報錯

  解決:aarch64 sstate-cache和downloads檔案存放的路徑有空格字元,修改路徑資訊,編譯通過。

配置本地downloads

開啟檔案 project-spec/meta-user/conf/petalinuxbsp.conf進行如下配置,檔案末尾新增6行,注意替換自己的實際目錄

  petalinux編譯: $petalinux-build

  petalinux-build編譯報錯

  注:查詢資料這些錯誤是因為Ubuntu磁碟空間不足導致,重做Ubuntu系統磁碟空間留300G

  重新執行petalinux工具 source /tools/Xilinx/settings.sh

petalinux-build編譯報錯:

  個人能力無法解決,未知原因,該是裝置樹配置問題,迫切歡迎有該方面除錯經驗者交流學習;