文章转载自:XILINX技术社区微信公众号
Vitis及Vitis AI线上课程培训已经结束了,还没学习完的小伙伴可以点击阅读查看:https://mp.weixin.qq.com/mp/homepage?__biz=Mzg3NDAxNzU1MA==&hid=13&sn=8e...,而后我们陆续收到了听众们课后个人研究观点的认真解读及建议。Xilinx技术社区近期会挑选优质来稿为大家分享。
王伟
1996年北京交大博士毕业,师从中科院院士简水生。
王伟博士曾就职于华为,中兴,Oplink和JDSU等国内外一流的企业,从事光通信系统、光器件和光模块项目开发达二十多年,多次承担国际合作科研项目,在一线长期的科研和管理工作积累了丰富的软硬件开发经验和项目团队管理经验。
2019年初作为特殊人才加入北京邮电大学世纪学院任教,在学校成立并带领晨星学生团队进行实用技术培训和参与国内外赛事,获得多项国内外奖项,致力于将在企业中积累的科研知识与经验分享在学校科研和教学中。
《含Wifi和DPU功能的Ultra96v2 Vitis AI Linux加速平台的设计与制作》-上
导言
第一部分 Ultra96v2 vivado2019.2硬件平台设计与调试
1.1 DPU配置和原理图
1.2 外围设备控制原理图
1.3 具有Wifi和DPU功能的原理图
1.4 中断和地址
1.5 错误分析
1.6 性能分析
第二部分 Ultra96v2petalinux 2019.2软件平台设计与调试
2.1 petalinux DPU部分
2.1.1 拷贝DPU部分元数据
2.1.2 BSP创建项目
2.1.3 硬件XSA拷入
2.1.4 拷入base-files文件夹
2.1.5 编辑petalinux-image-full.bbappend文件
2.1.6 拷入fix_u96v2_pwrseq_simple.patch文件
2.1.7 拷入pmu-firmware文件夹
2.1.8 Autostart和dnndk模块添加
2.1.9 Device tree DPU配置
2.1.10 DPU根文件设置
导言
Ultra96是第三方一款性价比较高的低成本可以用于AI的开发板,比较适合教学工作。但官网上仅有2018.3的不含Wifi的DPU和不含DPU的Ultra96 BSP的硬件文件,既没有含Wifi和DPU双重功能的BSP,更没有最新的2019.2 BSP文件和Vitis平台的文件,这是我们应用最新的Vitis AI软件的最大障碍,因此我们于近期开发了Ultra96 Vitis Ai Linux平台, 开发过程中没有现成的petalinux元数据,遇到了不少困难,配置文件、文件包和库的一一确定,编译时需要解决各种错误,库版本不匹配,库找不到,编译时间过长,内存硬盘要求过大等问题。最终将它编译成功,为Ultra96开发者应用Vitis AI提供方便,希望有机会得到赛灵思各位专家的指点!
第一部分
Ultra96v2 vivado 2019.2硬件平台设计与调试
1.1 DPU配置和原理图
DPU3.2版本配置,ultra96v2我们选用B1152。
总线参数:
根据DPU的要求,采用了三个复位模块和一个时钟模块,由于版本更新,这里DPU IP采用了最新的
注意到它的目标版本是
1.2 外围设备控制原理图
其功能有mezz高速接口,无线Wifi,风扇控制,LED控制。
1.3 具有Wifi和DPU功能的原理图
我们对以上多种功能进行了合并,对总线和IP核进行了一些调整
1.4 中断和地址
后继做软件平台时设备树需要用到有关参数,这里说明一下。
打开IP block address,观察dpu地址及范围
观察dpu中断信号
Base-addr 从官网的0x8F000000改动到 0xA1000000
Interrupts (interrupt number) 从<0x0 0x59 0x4> 改动到 <0x00x5F 0x4>
下面是设备树需要添加的内容
&amba{ dpu{ #address-cells = <1>; #size-cells = <1>; compatible = "xilinx,dpu"; base-addr = <0xA1000000>; //CHANGE THIS ACCORDING TO YOUR DESIGN 8F A1 dpucore { compatible = "xilinx,dpucore"; interrupt-parent = <&gic>; interrupts = <0x0 0x5F 0x4 >; //CHANGE THIS ACCORDING TO YOUR DESIGN 59 5F core-num = <0x1>; //CHANGE THIS ACCORDING TO YOUR DESIGN }; /* Only enable this if softmax is added softmax { compatible = "xilinx,smfc"; interrupt-parent = <&gic>; interrupts = <0x0 110 0x1>; core-num = <0x1>; }; */ }; };
参数改动如下:
Base-addr 从0x8F000000 改动到 0xA1000000
Interrupts (interrupt number) 从<0x0 0x59 0x4>改动到 <0x0 0x5F 0x4>
1.5 错误分析
Validation错误一:未指定映射地址,DPU没有指定ZYNQ地址
错误二应去除多余映射
1.6 性能分析
修正以上两个错误后,vivado运行成功
第二部分
Ultra96v2 petalinux 2019.2软件平台设计与调试
2.1 petalinux DPU部分
本部分参考Avnet官网ultra962018.2版本的DPU reference-files的文件和官网zcu102 TRD dnndk 2019.2版本文件。
2.1.1 拷贝DPU部分元数据
john@john-virtual-machine:~/ultra96v2DPU$cp -rp ./files/recipes-modules/dpu project-spec/meta-user/recipes-modules
john@john-virtual-machine:~/ultra96v2DPU$cp -rp ./files/recipes-apps/dnndk/ project-spec/meta-user/recipes-apps/
john@john-virtual-machine:~/ultra96v2DPU$cp -rp ./files/recipes-apps/autostart/ project-spec/meta-user/recipes-apps/
john@john-virtual-machine:~/ultra96v2DPU$ cp-rp ./files/recipes-core/base-files/ project-spec/meta-user/recipes-core/
2.1.2 BSP创建项目
由于官网未公布2019.2BSP, 这里引用的BSP是我前期做的不含DPU和加速的BSP,这样避免大量的元数据配置工作。
petalinux-create -t project -n ultra96v2DPU -s./ultra96v2_petalinux2019.2.bsp
如果客户是由硬件文件创建项目,则使用下面的命令
petalinux-create -t project -n petalinux--template zynqMP
2.1.3 硬件XSA拷入
这里有一个坑,如果是用BSP,更换硬件时必须直接更换XSA文件,不能用petalinux-config -get-hw-description引入硬件的命令。BSP建立项目后,将.xsa文件硬拷到project-spec/hw-description文件夹,运行petalinux-config
将文件名改成system.xsa
所有配置文件正常生成。
否则,如果你使用BSP创建项目,更换硬件时使用官方手册上的petalinux-config --get-hw-description,则会出现下面的错误
如果是由硬件创建的项目,可以用petalinux-config命令引入硬件
petalinux-config--get-hw-description=../hsi/home/john/ultra96v2DPU/project-spec/hw-description
2.1.4 拷入base-files文件夹
将含base-files_%.bbappend文件的base-files文件夹拷入
john@john-virtual-machine:~/ultra96v2DPU$cp -rp ./files/recipes-core/base-files/ project-spec/meta-user/recipes-core/
FILESEXTRAPATHS_prepend:= "${THISDIR}/${PN}:"
dirs755 +="/media/card"
do_install_append() {
echo "/dev/mmcblk0p1 /media/cardauto defaults,sync 0 0" >> ${D}${sysconfdir}/fstab
echo "dpu" >> ${D}${sysconfdir}/modules
echo "alias ls='ls--color=auto'" >> ${D}${sysconfdir}/profile
echo "alias ll='ls --color=auto-l'" >> ${D}${sysconfdir}/profile
echo "alias la='ls --color=auto-la'" >> ${D}${sysconfdir}/profile
echo "export PATH=/media/card:/media/card/bin:\$PATH">> ${D}${sysconfdir}/profile
}
john@john-virtual-machine:~/xilinx_dnndk_v3.1/dpu_integration_lab/petalinux$vi project-spec/meta-user/recipes-core/images/petalinux-image.bbappend
2.1.5 编辑petalinux-image-full.bbappend文件
前期的BSP不含petalinux-image-full.bbappend文件,需要拷入并添加DPU
此部分参考ultra96 AVNET官网,这里有一个坑,就是必须把#IMAGE_INSTALL_append = "packagegroup-petalinux-ultra96-webapp"注释掉,除非你的计算机有50G以上内存。
john@john-virtual-machine:~/xilinx_dnndk_v3.1/dpu_integration_lab/petalinux$vi project-spec/meta-user/recipes-core/images/petalinux-image-full.bbappend
IMAGE_INSTALL_append = "peekpoke"
IMAGE_INSTALL_append = "gpio-demo"
IMAGE_INSTALL_append = "packagegroup-base-extended"
IMAGE_INSTALL_append = " cmake"
IMAGE_INSTALL_append = "lmsensors-sensorsdetect"
IMAGE_INSTALL_append = "python-pyserial"
IMAGE_INSTALL_append = " libftdi"
IMAGE_INSTALL_append = "python3-pip"
IMAGE_INSTALL_append = " iperf3"
#IMAGE_INSTALL_append= " packagegroup-petalinux-ultra96-webapp"
IMAGE_INSTALL_append = "packagegroup-petalinux-v4lutils"
IMAGE_INSTALL_append = "packagegroup-petalinux-96boards-sensors"
IMAGE_INSTALL_append = "packagegroup-petalinux-x11"
IMAGE_INSTALL_append = "packagegroup-petalinux-matchbox"
IMAGE_INSTALL_append = "ultra96-ap-setup"
IMAGE_INSTALL_append = " nano"
IMAGE_INSTALL_append = " sds-lib"
IMAGE_INSTALL_append = "led-brightness"
IMAGE_INSTALL_append = " iperf3"
IMAGE_INSTALL_append = "bonnie++"
IMAGE_INSTALL_append = "ultra96-misc"
# Bluetooth stack
IMAGE_INSTALL_append = " bluez5"
# Wi-Fi driver firmware and utilities
IMAGE_INSTALL_append = " iw"
IMAGE_INSTALL_append = "wpa-supplicant"
IMAGE_INSTALL_append = "wilc3000-fw"
IMAGE_INSTALL_append = " wilc"
IMAGE_INSTALL_append = "ultra96-wpa"
IMAGE_INSTALL_append = "ultra96-radio-leds"
# DPU
IMAGE_INSTALL_append =" dnndk"
IMAGE_INSTALL_append =" autostart"
IMAGE_INSTALL_append =" dpu"
2.1.6 拷入fix_u96v2_pwrseq_simple.patch文件
此部分参考ultra96 AVNET官网所加的内容,应为功率控制
2.1.7 拷入pmu-firmware文件夹
此部分参考ultra96AVNET官网所加的内容拷入
2.1.8 Autostart和dnndk模块添加
Dnndk很容易掉到坑里,因为如果你依照avnet官网,因为是适用2018的petalinux,调用的是libopencv_core.so.3.3, 而petalinux使用的是libopencv_core.so.3.4,因此必须找到采用最新的2019.2 dnndk的文件。
若采用avnet官网的dnndk,则会出现下面的错误
拷入的位置及模块
从下面的最新的2019.2 dnndk文件看到,调用的是libdputils.so.3.4版本,对应的才是petalinux 2019.2自带的libopencv_core.so.3.4。
2.1.9 Device tree DPU配置
这部分参数需要根据vivado硬件的设计,根据第一部分我们的硬件配置,Base-addr 从0x8F000000 改动到 0xA1000000,Interrupts (interrupt number) 从<0x0 0x59 0x4> 改动到 <0x00x5F 0x4>。
&amba{
dpu{
#address-cells = <1>;
#size-cells = <1>;
compatible = "xilinx,dpu";
base-addr = <0xA1000000>;//CHANGE THIS ACCORDING TO YOUR DESIGN 8F A1
dpucore {
compatible ="xilinx,dpucore";
interrupt-parent = <&gic>;
interrupts = <0x0 0x5F 0x4 >; //CHANGE THIS ACCORDING TO YOUR DESIGN59 5F
core-num = <0x1>; //CHANGE THISACCORDING TO YOUR DESIGN
};
};
};
我们从vivado观察到DPU的版本信息
仔细阅读发现 makefile与dpu.bb中的版本并不是1.4,但不要改动,如果照实际进行如下图中的改动,则编译会出错。
2.1.10 DPU根文件设置
这部分我们直接通过文件操作来完成,必须分为两步走。
首先在user_rootfsconfig中引入模块
参见下图中的#dpu部分
然后在rootfs_config中添加该项,并置=y
为便于拷贝,这里列出文件的最后改动部分
# apps
CONFIG_autostart=y
CONFIG_gpio-demo=y
CONFIG_peekpoke=y
CONFIG_sds-lib=y
CONFIG_ultra96-radio-leds=y
CONFIG_ultra96-wpa=y
#
# modules
#
CONFIG_dpu=y
CONFIG_led-brightness=y
CONFIG_wilc=y
#
# user packages
#
CONFIG_dnndk=y
CONFIG_libftdi=y
CONFIG_bonniePLUSPLUS=y
CONFIG_cmake=y
CONFIG_iperf3=y
CONFIG_iw=y
CONFIG_lmsensors-sensorsdetect=y
CONFIG_nano=y
CONFIG_packagegroup-base-extended=y
CONFIG_packagegroup-petalinux-96boards-sensors=y
CONFIG_packagegroup-petalinux-ultra96-webapp=y
CONFIG_python-pyserial=y
CONFIG_python3-pip=y
CONFIG_ultra96-ap-setup=y
CONFIG_ultra96-misc=y
CONFIG_wilc3000-fw=y
#
# PetaLinux RootFS Settings
#
CONFIG_ROOTFS_ROOT_PASSWD="root"
CONFIG_ADD_EXTRA_USERS=""
打开GUI界面验证,已有dpu模块并选中
存入文件及位置
未完待续。。。
下集预告:
2.2 petalinux 加速功能部分
第三部分 Vitis AI Linux加速平台