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編譯報錯:
個人能力無法解決,未知原因,該是裝置樹配置問題,迫切歡迎有該方面除錯經驗者交流學習;