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 设置本地编译加速包
在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 的测试线缆。但自己测试还是报出同样的错误。