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 的测试线缆。但自己测试还是报出同样的错误。

 

posted @ 2021-04-26 16:39  VagueCheung  阅读(2520)  评论(0编辑  收藏  举报