基于Vitis AI1.2 dpu平台测试

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_39724439/article/details/114630090

1、软件版本
ubuntu18.04.2
vivado2020.01
petalinux2020.01
vitis2020.01
芯片:zu3eg784

本篇博客较长,可以先看结果,同时dp上有图片输出。

参考网站设计:
(1)https://github.com/Xilinx/Vitis-Tutorials/tree/2020.1/Vitis_Platform_Cre...(下载备用)
(2)https://www.xilinx.com/html_docs/xilinx2020_1/vitis_doc/kme1569523964461...
(3)https://www.hackster.io/AlbertaBeef/vitis-ai-1-1-flow-for-avnet-vitis-pl...
(4)https://www.hackster.io/AlbertaBeef/vitis-ai-1-3-flow-for-avnet-vitis-pl...
(5)https://github.com/Xilinx/Vitis-AI/tree/v1.2.1(下载备用)
(6)https://github.com/Xilinx/Vitis-AI/blob/v1.0/doc/install_docker/README.md

2、vivado工作
(1)新建工程

(2)选择最基本的外设即可

(3)当选择以太网口时,选上TTC

(4)选择上pl到ps中断

(5)当配置了SSD时,确保设备类型是根root port

(6)增加时钟向导模块分别输出100M,200M和400M,且为每个时钟增加一个复位模块

(7)添加中断模块,输出类型改single

(8)整体模块图示

(9)输入

set_property PFM.IRQ {intr {id 0 range 32}} [get_bd_cells /axi_intc_0]

设置中断属性

(10)打开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。


(11)最后的工程

(12)生成顶层文件,生成输出
导出xsa文件



(13)至此,vivado的工作结束。

3、petalinux工作
(1)新建petalinux工程,一般在一个项目文件夹下,新建一个xsa的文件夹,将xsa放到此文件夹中

设置petalinux工作环境:
source
/settings.sh
petalinux-create --type project --template zynqMP --name uisrc_dpu
cd uisrc_dpu
petalinux-config --get-hw-description=../xsa

设置本地编译加速包


(2)在/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中全部选上。
至于文件系统中支持exfat的u盘或者qt什么其他的可以扩展选择,参考以前的博客。

(3)关闭cpu的省电模式
petalinux-config -c kernel


CPU Power Mangement > CPU Idle > CPU idle PM support
CPU Power Management > CPU Frequency scaling > CPU Frequency scaling
全部选择n。
搜索cma,将cma大小设置成512.
保存并推出。

(4)修改设备树
&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";
};

(5)编译
petalinux-build
petalinux-build --sdk
petalinux-package --sysyroot

(6)至此,petalinux工程结束。
4、vitis工作
(1)新建vitis工程文件夹,新建pfm文件夹,在pfm中新建boot和image文件夹,将petalinux中image/linux的文件夹中生成的4个elf文件,pmufw.elf,bl31.elf,u-boot.elf,fsbl.elf(zynqmp_fsbl.elf)ai1.2以前的版本必须改名字,在此文件夹中创建一个.bif文件,当在petalinux工程共最后执行生成BOOT.bin的操作命令时,会在build文件夹中自动生成一个bootgen.bif文件,但是也是需要修改的
最后的linux.bif内容是,其中要注意的是,路径必须为绝对路径。

将boot.src image.ub rootfs.cpio.gz复制到image文件夹,将ref_files文件夹中的init.sh和platform_desc.txt 并修改platform.txx
改为uisrc_dpu_custom。

(2)新建平台工程,uisrc_dpu_custom

(3)选择vivado生成的xsa文件

(4)配置

(4)编译平台
(5)将AI文件夹中的DPU-TRD复制到当前工程所在文件夹,ref_files也复制到工程所在文件夹
(6)在工程所在目录下,uisrc_dpu_custom/export/uisrc_dpu_custom文件夹下uisrc_dpu_custom.xpfm文件,记住此文件路径和名称。

(7)在DPU-TRD/prj/VItis文件夹下,打开makefile文件,修改以下两处路径和名称。

(8)修改dpu_conf.vh,由4096改为1024

(9)修改prj_config,由两个核改成一个核,同时将此文件替换到ref_files中的prj_config

(10)生成dpu.xo文件
在makefile所在文件夹中运行
make binary_container_1/dpu.xo DEVICE=uisrc_dpu_custom

(11)新建应用项目 uisrc_hello_dpu,配置文件系统sysroot,rootfs和kernel image
sysroot:petalinux中,sdk路径下aarch64-xilinx-linux,其他的都可以找到。

(12)确保当前活跃的是hardware,添加dpu.xo文件,并修改名字为dpu(必须修改,必须一致,否则报错),并设置为1个核

(13)左下角的assistant中,hardware点设置,在v++选项中加入
--config 路径/src/prj_config -s

(14)增加gcc的编译库和路径,以下几个库都要一个一个输入
opencv_core
opencv_imgcodecs
opencv_highgui
opencv_imgproc
opencv_videoio
n2cube
hineon


(15)修改主程序源代码

(16)编译

(17)找到uisrc_ssd.hwh文件,并修改名为system.hwh

(18)安装docker
参考
https://github.com/Xilinx/Vitis-AI/blob/v1.0/doc/install_docker/README.md

安装
(19)运行docker,将Tool-Example文件夹复制到Vitis-AI1.2中,运行docker后,workspace会默认为Vitis-AI1.2,放在别的地方会找不到。

./docker_run.sh xilinx/vitis-ai:1.2.82目前来说,必须是这个版本,如果是最新版本,过程中会报错,且不会生成elf文件。
conda activate vitis-ai-tensorflow

(20)运行dlet -f ./system.hwh,返回Generate DPU DCF file dpu-06-18-2020-12-00.dcf successfully
(21)在arch.json文件中,确保.dcf文件要与以上匹配,同时最好是绝对路径。

(22)运行 sh download_model.sh

(23)运行sh custom_platform_compile.sh

(24)在输出文件夹里能找到dpu_resnet50_0.elf文件
(25)在vitis工程中,找到C/C++ Build->Settings->Tool Settings->GCC Host Linker->Miscellaneous->Other objects
添加此.elf文件.
(26)重新编译工程。

5、测试
(1)下载vitis-ai_v1.2_dnndk.tar.gz和 vitis-ai_v1.2_dnndk_sample_img.tar.gz支持包
(2)将hardware文件夹下的BOOT.bin,boot.src.dpu.xclbin,image.ub,init.sh,platform_desc.txt,uisrc_dpu_hello和vitis-ai_v1.2_dnndk.tar.gz文件全部导入SD卡的BOOT中,由于我的文件系统在boot中,所以优化对此项目来说没有意义,不清楚.elf是否需要也一起复制过来。

(3)将vitis-ai_v1.2_dnndk_sample_img.tar.gz复制到U盘并解压。
(4)上电,在板卡上安装vitis ai

(5)运行dexplorer -w 以下表明dpu已经可以在板卡上运行,且参数配置正确,但是无论怎么设置都显示的是300M。

(6)将u盘挂载到mnt下,前面主函数中,那个修改的路径就是这里,对应上即可。
(7)配置显示输出 export DISPLAY=:0.0
(8)运行程序
./uisrc_dpu_hello


(9)运行的很快,图片和结构没有对上

6、将dpu核放到Vivado工程中的结构

最新文章

最新文章