Vitis-Ai DPU 加速平台創建 AXU2CGB開發板上驗證


軟件版本
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 設置本地編譯加速包

    https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html(下載地址)

    在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 的測試線纜。但自己測試還是報出同樣的錯誤。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM