[Zcu106开发]离线环境下用Vitis搭建Zcu106嵌入式系统神经网络加速器踩坑实录

最近的工作学习内容需要用到zcu106开发板以及cameralink相机,需要用到嵌入式系统,然后发现Vitis是官方提供的最新的集成式开发平台,就准备用这个来学习一下。

关于编译zcu106的嵌入式系统的原理及非离线环境下的流程,可以详见博主GaleZhang的这两篇博客(一)(二),已经介绍的很清楚了。我这里主要说一下离线环境下的整个过程和我遇到的一些坑。

计算机操作系统:Ubuntu18.04.4

  • 踩坑记录1:Ubuntu官网下提供下载的18.04.6系统不是Vitis支持的操作系统,我一开始使用该系统出现了各种奇怪的报错,虽然版本只差了一个很小的子版本,但是确实有很大影响。

软件版本(链接是官方下载,除Vitis-AI外都需要一个能够有下载权限的Xilinx账号才能下载):
Vitis2020.1
Petalinux2020.1
Xilinx Runtime2020.1
Vitis-AI1.2.1

  • 踩坑记录2:Xilinx官网限制了个人账号的软件下载,几年前注册的个人账号不能用来下载软件了。但是离线进行zcu106的相关编译工作需要在官网下载大量数据,想在网络上找齐对应版本的数据实在太麻烦。这一次我注册时试了很多包括校园邮箱的邮箱都不行,最后解决方法是以朋友的校园邮箱为名义给Xilinx官方人员发了一个英文邮件,好在他们效率还行,第二天就给我开通了软件下载功能,这才让我可以顺利地在官网下载对应版本的软件。后面我会把我下载的一些软件安装包分享出来,方便各位下载。

第一步:离线安装Vitis2020.1
这一步出现的问题很少,从官网下载离线安装包解压后,运行Ubuntu的用于安装的可执行文件即可。只要Ubuntu版本符合Vitis的需要,就可以顺利安装(PS:如果只是想要编译Zcu106的嵌入式平台而不需要自己改变PL的话,是不需要license的)。

第二步:离线安装Petalinux2020.1及其依赖
离线安装Petalinux,需要在官网下载4个文件,包括Petalinux安装包、嵌入式系统需要用到的预编译数据包,适用于Zcu106的aarch64预编译数据包、以及适用于zynqmp嵌入式系统的通用镜像数据包。
在安装前,首先需要给petalinux配置安装环境,根据数据手册c_ug1144-petalinux-tools-reference-guide的要求,需要的工具库有dos2unix、ip、gawk、gcc、g++、make、netstat、ncurses-dev、tftp server、zlib-dev、openssl-dev、flex、bison、libselinux、gnupg、wget、diffstat、chrpath、socat、xterm、autoconf、libtool、tar、unzip、texinfo、zlib1g-dev、gcc-multilib、build-essential、screen、pax、gzip、libstdc++。在互联网环境下可以直接根据运行petalinux的安装文件出现的报错来逐步安装需要的工具包,在离线环境下就需要提前下载好工具包之后来离线安装了。这几天会逐步提供我自己在互联网环境下下载的Ubuntu18.04.4环境下的相关工具包的deb文件,用dpkg指令打包安装即可。
安装完工具包后,还需用一些指令进行tftp server的环境配置才能完成整个安装环境。

gedit /etc/inetd.conf
#在文件中增加以下内容
tftp        dgram    udp    wait    nobody    /usr/sbin/tcpd    /usr/sbin/in.tftpd /tftproot
#保存并退出
mkdir /tftproot
chmod 777 /tftproot
/etc/init.d/openbsd-inetd restart
netstat -an | more | grep udp
#看到有如下输出,即表示tftp配置成功
udp        0      0 0.0.0.0:69              0.0.0.0:*

随后运行Petalinux安装程序,安装完毕后,将其他三个数据包解压放置到任意地方均可,以备后用。

第三步:离线安装Xilinx Runtime2020.1
官方提供该工具的deb安装包,用dpkg指令安装即可。

第四步:使用前三步安装的工具编译Zcu106的硬件平台.xpfm文件
1.使用vivado生成硬件平台.xsa文件
下载github的Zcu106 platform源码并解压,cd到其中的zcu106_base文件夹下运行

make xsa

即可在目录下生成.xsa文件。这一步只要Ubuntu系统支持vitis,就不会有奇怪的报错。
2.使用petalinux生成软件环境
在zcu106_base文件夹中的petalinux文件夹内,修改makefile文件。将petalinux-package指令的-fpga参数修改为上一步在vivado文件夹内生成的.bit文件的路径。此外,在petalinux文件夹内运行指令petalinux-config,根据官方文件的要求,将之前下载并解压的嵌入式系统需要用到的预编译数据包以及适用于Zcu106的aarch64预编译数据包的地址填写到对应位置中。

  • 踩坑记录3:这里的download数据包的路径格式有很严格的要求,需要在存储路径前加上一段“file://”,我在编译过程中遇到过找不到download数据包的报错,到头来发现是我在地址中少写了这一段,所以一直都没找到,属于是非常坑了。在官方提供的readme文件中也有实例用于参考,千万别在这里因为格式问题卡壳。
 - Setting sstate cache

1) Extract the downloaded tar contents of sstate-cache at any location
2) run petalinux-config
         -> Yocto Settings
             ->Local sstate feeds settings
                  ->local sstate feeds url
                          (press Enter)
3) Provide the path of sstate-cache from above
           Ex: /<path>/aarch64  for Versal projects

4) Save the configurations to use the sstate-cache

Setting download mirror

1) Extract the downloaded tar contents of downloads at any location
2) run petalinux-config
        -> Yocto Settings
                -> Add pre-mirror url
						          ->  (press Enter)
							            Clear default value

3) Provide the path of downloads from above
        file://<path>/downloads for all projects

随后回到zcu106_base文件夹执行:

Make petalinux_proj XSA_DIR=<xsa dir path>
Make pfm XSA_DIR=<xsa dir path>

其中参数自行替换为上一步生成的.xsa文件的路径。编译完成后就得到了我们需要的.xpfm平台文件。

第五步:使用Vitis-AI编译适用于Zcu106的嵌入式系统以及SD卡的烧写
这一步在博客中已经介绍的十分清楚,我按照该博文的流程只出现了一个报错,大概就是在进行vivado综合的过程中,发现板卡上的RAM资源不足,所以无法进行综合。

ERROR: [VPL UTLZ-1] Resource utilization: RAMB18 and RAMB36/FIFO over-utilized in Top Level 
Design (This design requires more RAMB18 and RAMB36/FIFO cells than are available in the target
 device. This design requires 1036 of such cell types but only 624 compatible sites are 
 available in the target device. Please analyze your synthesis results and constraints to 
 ensure the design is mapped to Xilinx primitives as expected. If so, please consider targeting
  a larger device.)
  • 踩坑记录4:vivado综合报错RAMB18和RAMB36/FIFO的资源不足后,查阅网上资料,在一篇关于DPU编译报错的解答贴中发现,可以通过修改DPU-TRD/prj/dpu/dpu_conf.vh文件中对板卡RAM资源的限制来解决资源不足的问题。作如下修改即可:
\`define URAM_DISABLE 修改为
\`define URAM_ENABLE

\`define RAM_USAGE_LOW 修改为
\`define RAM_USAGE_HIGH

修改完后,再按照博文的流程即可顺利编译,过程大概3小时左右(自行根据前面的安装以及编译目录修改为正确的路径即可)。

cd ./DPU-TRD/prj/Vitis

export TRD_HOME =<Vitis AI path>/DPU-TRD
source <vitis install path>/Vitis/2020.1/settings64.sh
source opt/xilinx/xrt/setup.sh
export EDGE_COMMON_SW=<mpsoc common system>/xilinx-zynqmp-common-v2020.1 
export SDX_PLATFORM=<zcu106 base platform path>/xilinx_zcu106_base_202010_1/xilinx_zcu106_base_202010_1.xpfm

make  KERNEL=DPU_SM DEVICE=zcu106

随后烧写到SD卡上,就完成了基于Vitis-AI的Zcu106嵌入式系统的离线编译。

你可能感兴趣的:(vivado设计,FPGA,嵌入式开发,fpga开发,ubuntu,linux)