zoukankan      html  css  js  c++  java
  • 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 的测试线缆。但自己测试还是报出同样的错误。

  • 相关阅读:
    5.装饰器生成器迭代器
    python-进程&线程
    模块(二)
    MYSQL数据库操作(一)
    python-网络编程-socket编程
    python-异常处理
    python-面向对象进阶
    python-模块
    python_面向对象编程
    生成器 迭代器,装饰器 ,软件开发规范
  • 原文地址:https://www.cnblogs.com/VagueCheung/p/14705354.html
Copyright © 2011-2022 走看看