軟件版本
ubuntu18.04.2
vivado2020.01
petalinux2020.01
vitis2020.01
硬件平台:AXU2CGB
參考網站設計:
https://github.com/Xilinx/Vitis-Tutorials/tree/2020.1/Vitis_Platform_Creation/Introduction/02-Edge-AI-ZCU104(下載備用)
https://github.com/Xilinx/Vitis-AI/tree/v1.2.1(下載備用)
https://blog.csdn.net/sinat_39724439/article/details/114630090?spm=1001.2014.3001.5501
1.Vivado 工作
1.1新建工程
1.2 配置ZYNQ 外設
1.3 選上PL到PS中斷
1.4 配置PCIE
1.5 添加時鍾模塊
1.6 添加中斷模塊,輸出類型改為single
1.7 整體模塊如圖示
1.8 TCL腳本命令輸入
set_property PFM.IRQ {intr {id 0 range 32}} [get_bd_cells /axi_intc_0]
設置中斷屬性
1.9 打開Window->Platform interfaces設置平台屬性
選擇Platform-system-> zynq_ultra_ps_e_0-> S_AXI_HP0_FPD,S_AXI_HP1_FPD,S_AXI_HP2_FPD,S_AXI_HP3_FPD,S_AXI_HPC0_FPD,S_AXI_HPC1_FPD,在Platform interface Properties選項卡中分別啟用Enabled選項,並且再sptag*中分 別改為HP0,HP1,HP2,HP3,HPC0,HPC1,將HPC0/HPC1端口的memport設置成S_AXI_HPC。
選擇時鍾模塊中,clk_200m設置為id為0,是default。clk_400m的id為1,clk_100m的id為2。
ps8_0_axi_periph互聯模塊的M01_axi~M08_AXI模塊,memport設為M_AXI_GP M_AXI_HPM0_FPD和M_AXI_HPM1_FPD端口,在sptag名稱設置為HPM0_FPD,HPM1_FPD,並將memport設置為M_AXI_GP。
1.10 保存工程,創建頂層文件,綜合布局布線生成輸出,最后導出xsa文件File ---→Export-----→Export Hardware
1.11 至此Vivado工作結束
2. petalinux部分
2.1 創建工程
petalinux工程路徑設計按照 prj_name---→LinxBase------→hardware
-----→petalinux
打開路徑
cd prj_name/LinxBase
執行petalinux2020.1
source <petaLinux_tool_install_dir>/settings.sh
創建工程名petalinux
petalinux-create --type project --template zynqMP --name petalinux
cd petalinux
petalinux-config –get-hw-description=../xsa
2.2 設置本地編譯加速包
在petalinux配置中關聯兩個下載好的加速包即可。
2.3 在<your_petalinux_project_dir>/project-spec/meta-user/conf/user-rootfsconfig file.中加入
CONFIG_packagegroup-petalinux-xrt
CONFIG_xrt-dev
CONFIG_dnf
CONFIG_e2fsprogs-resize2fs
CONFIG_parted
CONFIG_packagegroup-petalinux-vitisai
CONFIG_packagegroup-petalinux-self-hosted
CONFIG_cmake
CONFIG_packagegroup-petalinux-vitisai-dev
CONFIG_xrt-dev
CONFIG_opencl-clhpp-dev
CONFIG_opencl-headers-dev
CONFIG_packagegroup-petalinux-opencv
CONFIG_packagegroup-petalinux-opencv-dev
CONFIG_mesa-megadriver
CONFIG_packagegroup-petalinux-x11
CONFIG_packagegroup-petalinux-v4lutils
CONFIG_packagegroup-petalinux-matchbox
輸入petalinux-config -c rootfs時,在user packages中全部選上。
2.4 配置內核
petalinux-config -c kernel
在CPU Power Mangement > CPU Idle > CPU idle PM support > CPU Power Management > CPU Frequency scaling > CPU Frequency scaling 全部選擇n。
將cma大小設置成512,保存並退出。
2.5 修改設備樹
&amba {
zyxclmm_drm {
compatible = "xlnx,zocl";
status = "okay";
interrupt-parent = <&axi_intc_0>;
interrupts =<0 4>, <1 4>, <2 4>, <3 4>,
<4 4>, <5 4>, <6 4>, <7 4>,
<8 4>, <9 4>, <10 4>, <11 4>,
<12 4>, <13 4>, <14 4>, <15 4>,
<16 4>, <17 4>, <18 4>, <19 4>,
<20 4>, <21 4>, <22 4>, <23 4>,
<24 4>, <25 4>, <26 4>, <27 4>,
<28 4>, <29 4>, <30 4>, <31 4>;
};
};
&axi_intc_0 {
xlnx,kind-of-intr = <0x0>;
xlnx,num-intr-inputs = <0x20>;
interrupt-parent = <&gic>;
interrupts = <0 89 4>;
};
&sdhci1 {
no-1-8-v;
disable-wp;
};
&gem3 {
status = "okay";
phy-mode = "rgmii-id"
phy-handle = <&phy0>;
phy0:ethernet-phy@5 {
reg = <5>;
};
};
&dwc3_0 {
status = "okay";
dr_mode = "host";
};
2.6 編譯petalinux打包sysroot
petalinux-build
petalinux-build –sdk
petalinux-package –sysroot
2.7 至此petalinux工作結束
3.vitis工作
3.1 在petalinux路徑下新建pfm文件夾,在pfm中新建boot和image文件夾,將petalinux中image/linux的文件夾中生成的4個elf文件,pmufw.elf,bl31.elf,u-boot.elf,fsbl.elf(zynqmp_fsbl.elf)ai1.2以前的版本必須改名字,在此文件夾中創建一個linux.bif文件,當在petalinux工程共最后執行生成BOOT.bin的操作命令時,會在build文件夾中自動生成一個bootgen.bif文件,但是也是需要修改的
最后的linux.bif內容是,其中要注意的是,路徑必須為絕對路徑。
將boot.src image.ub rootfs.cpio.gz復制到image文件夾。
3.2 打開pfm路徑
cd ./pfm
運行vitis2020.1環境,路徑自行修改
source 個人安裝路徑/setting64.sh
創建vitis workspace命名wksp1
vitis -workspace wksp1
3.3 啟動vitis軟件,創建platform project命名vitis_DPU,選擇導入vivado生成的.xsa文件。
3.4 配置
3.5 編譯平台
3.6 將Vitis-AI文件夾中的DPU-TRD復制到當前工程所在文件夾,ref_files也復制到工程文件夾。ref_files文件下載地址(https://github.com/Xilinx/Vitis-Tutorials/tree/2020.1)
3.7 在工程目錄下,vitis_DPU/export/vitis_DPU文件夾下vitis_DPU.xpfm文件,記住此文件路徑和名稱。
3.8在DPU-TRD/prj/vitis文件夾下,打開makefile文件,修改以下兩處路徑和名稱。
3.9 在DPU-TRD/prj/vitis文件夾下,修改dpu_conf.vh文件
3.10 在DPU-TRD/prj/vitis/config_file文件夾下,修改prj_config文件,由兩個核改稱一個核,同時用此文件替換掉ref_fiels中的prj_config文件。
3.11 打包生成dpu.xo文件,在makefile所在文件夾中運行
make binary_container_1/dpu.xo DEVICE=uisrc_dpu_custom
3.12 在vitis中新建應用程序項目vitis_hello_DPU,配置文件系統sysroot,rootfs和kernel image.
3.13 確保當前活躍狀態是hardware,添加dpu.xo文件(將dpu.xo文件復制到vitis應用程序文件中),並修改名字為dpu(必須修改,必須一致否則報錯),並設置內核為1。
3.14 將上面修改好的prj_config文件復制到vitis應用程序文件夾中,vitis左下角的assistant中,hardware點設置,在v++選項中加入
3.15 增加gcc編譯庫和路徑,以下幾個庫需要一一輸入,右鍵vitis應用程序找到屬性,點開C/C++ Build選擇設置選項,添加librarys庫
opencv_core
opencv_imgcodecs
opencv_highgui
opencv_imgproc
opencv_videoio
n2cube
hineon
3.16 在ref_files中找到main.cpp dputils.h dputils.cpp,將這些文件復制到vitis程序應用工程中,並修改主程序代碼
3.17 編譯
3.18 在應用程序工程路徑下找到.hwh文件,將其重命名為system.hwh
3.19 安裝docker
參考https://github.com/Xilinx/Vitis-AI/blob/v1.0/doc/install_docker/README.md
3.20 運行docker,將Tool-Example文件夾復制到Vitis-AI1.2中,運行docker后,workspace會默認為Vitis-AI1.2,放在別的地方會找不到。
打開vitis-ai所在路徑,運行docker
sudo ./docker_run.sh xilinx/vitis-ai:1.2.82目前來說,必須是這個版本,如果是最新版本,過程中會報錯,且不會生成elf文件。
conda activate vitis-ai-tensorflow
3.21 將vitis編譯生成的system.hwh文件復制到vitis-ai文件夾的根目錄下。
3.22 運行
dlet -f ./system.hwh,返回Generate DPU DCF file dpu-06-18-2020-12-00.dcf successfully
3.23 修改Tool-Example文件夾下的arch.json文件,確保.dcf文件要與以上匹配,同時最好是絕對路徑。
3.24 在Tool-Example文件夾下運行sh download_model.sh
3.25 在Tool-Example文件夾下運行sh custom_platform_compile.sh
3.26 在輸出文件夾李可找到dpu_resnet50_0.elf文件
3.27 在vitis工程中,找到C/C++ Build->Settings->Tool Settings->GCC Host Linker->Miscellaneous->Other objects 添加此.elf文件.
3.28 重新編譯工程。
4. 測試
4.1下載vitis-ai_v1.2_dnndk.tar.gz和 vitis-ai_v1.2_dnndk_sample_img.tar.gz支持包.(https://github.com/Xilinx/Vitis-Tutorials/blob/2020.1/Vitis_Platform_Creation/Introduction/02-Edge-AI-ZCU104/step4.md)
4.2 將vitis工程中將hardware文件夾下的BOOT.bin, boot.src, dpu.xclbin, image.ub, init.sh, vitis_dpu.txt, vitis_hello_DPU和vitis-ai_v1.2_dnndk.tar.gz文件全部導入SD卡的BOOT中,由於我的文件系統在boot中,所以優化對此項目來說沒有意義,不清楚.elf是否需要也一起復制過來。
4.3 將vitis-ai_v1.2_dnndk_sample_img.tar.gz復制到U盤並解壓。
4.4 上電,在板卡上安裝vitis ai
4.5 運行dexplorer -w 以下表明dpu已經可以在板卡上運行,且參數配置正確,但是無論怎么設置都顯示的是300M。
4.6 將u盤掛載到mnt下,前面主函數中那個修改的路徑就是這里,對應上即可。
查看磁盤 fdisk -l
創建掛載的文件夾 /mnt
mkdir /mnt
載入U盤進行掛載
mount dev/sda4 /mnt
成功后,即可使用U盤了,文件就在目錄/mnt下。
如需卸載,在U盤使用后,執行命令
umount /mnt
4.7 配置顯示輸出
export DISPLAY=:0.0
4.8 運行程序
./vitis_hello_DPU
運行結果串口打印消息可看到有圖像分類的消息,但是報錯五圖像顯示。咨詢技術給的答復是串口登陸系統這種方式不支持圖像顯示,圖像顯示需將顯示器和鍵盤同時接入板卡。另外需要購買黑金生產的miniDP轉HDMI 的測試線纜。但自己測試還是報出同樣的錯誤。