1、软件版本
ubuntu18.04.2
vivado2020.01
petalinux2020.01
vitis2020.01
芯片:zu3eg784
本篇博客较长,可以先看结果,同时dp上有图片输出。
在这里插入图片描述
参考网站设计:
(1)https://github.com/Xilinx/Vitis-Tutorials/tree/2020.1/Vitis_Platform_Creation/Introduction/02-Edge-AI-ZCU104(下载备用)
(2)https://www.xilinx.com/html_docs/xilinx2020_1/vitis_doc/kme1569523964461.html
(3)https://www.hackster.io/AlbertaBeef/vitis-ai-1-1-flow-for-avnet-vitis-platforms-part-1-007b0e
(4)https://www.hackster.io/AlbertaBeef/vitis-ai-1-3-flow-for-avnet-vitis-platforms-cd0c51
(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 <petaLinux_tool_install_dir>/settings.sh
petalinux-create --type project --template zynqMP --name uisrc_dpu
cd uisrc_dpu
petalinux-config --get-hw-description=../xsa

设置本地编译加速包
在这里插入图片描述
在这里插入图片描述
(2)在<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中全部选上。
至于文件系统中支持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工程中的结构
在这里插入图片描述

Logo

更多推荐