利用Vitis开发基于ZCU106的神经网络加速器(一)——Vitis概述及XRT编译

前言

毕设要用到Xilinx家的ZCU106这块板子,了解到最近Xilinx统一了Vivado,XilinxSDK,并集成了常用开源IP核,推出了Vitis统一软件平台,使我们不再需要关注底层的Verilog实现,因此尝试使用Vitis开发一个神经网络加速器,作为毕设的基础。

Vitis架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

XRT

由上图可以看到,Xilinx为我们提供了各种各样的加速库,而XRT(Xilinx Runtime Library)则是我们的代码与Xilinx硬件交互的中间件和媒介。有了XRT,我们就可以用更上层的开发方式(cpp甚至python)来进行Xilinx设备的开发。XRT软件栈的架构如下图

在这里插入图片描述
XRT虽然很重要,但是可能是Xilinx的相关开发人员精力有限=-=,目前有官方XRT platform支持的板子并不多,只有以下几个:
在这里插入图片描述
看了看自己的ZCU106并不在其中,没办法,看来我们还是要自己为ZCU106编译XRT了。

XRT for ZCU106

让我们先来梳理一下XRT究竟是如何编译的。

根据Xilinx官方发布的platform编译源码和脚本来看,为了完成嵌入式平台的编译,我们需要执行一个TCL脚本,该脚本可分为三步:

  • 首先,我们要利用vivado来进行项目的搭建,并生成硬件平台,得到xsa文件。
  • 随后,我们调用petalinux来进行软件环境的生成
  • 最后,使用xsct工具打包软硬件生成Vitis platform

我们可以按照这个流程,参考ZCU102的脚本来生成ZCU106的脚本,并进行platform的编译。

编译

我们需要修改官方工程中的相关脚本来适配ZCU106,这是一个不小的工作量,不过好在我们有万能的github,在这里偷个懒,用一下前人的劳动成果,后续有需要定制的地方再去修改。

为了编译ZCU106 XRT平台,首先我们要下载安装好Vitis,petalinux以及XRT,安装过程比较简单,下载后直接运行即可,这里就不细说了,要注意的是最好保持版本的一致性。下面列出我的开发环境(Xilinx相关的均可在官网下载):

我们将github的ZCU106 platform源码下载到某个目录下,cd至zcu106_base,在该目录下执行(按照README文档的步骤即可)

make all

如果顺利的话,最终会调用一个tcl脚本完成所有任务,得到XRT平台文件,后缀为xpfm。

但是一般都不会太顺利。。。。下面我着重说一下我遇到的问题及一些经验。

问题1 版本不兼容

要注意这个github的源码的环境要求和我上面列的是一致的,一定要按这个版本来配置开发环境才能正确的make与运行。

问题2 “$RDI_PROG” “$@”

这个问题其实就是底层的segmention fault,我遇到这个错误的原因是我的电脑内存太小了,只有8G,并且swap分区只有2G,我后续观察到执行脚本至少需要14G内存,我的机器内存溢出,所以报了这个错误。

解决办法最好当然是整个16G以上的机器,我条件有限,只能增大了ubuntu的swap分区=-=,来当破产版的内存用。

问题3 Fetcher Error

遇到这个错误说明第一步调用vivado生成xsa已经成功了,到了调用petalinux的阶段。在进行petalinux config和petallinux build的时候,会联网下载许多包和库,build的linux系统会用到这些库。我们都知道一遇到下载,对于我们天朝人民来说就麻烦了,几KB的git clone速度,时断时续的境外网站下载,以及某些网站的无法访问,都会导致我们的脚本在下载阶段出各种问题。

Fetcher Error就是这个问题,在从网上下载源码和包时出问题。

我的解决方法就是失败了再继续重新执行,虽然速度慢,但还是可以下载下来的,我尝试挂了代理,但是没有提速,大家可以自己尝试一下代理。

遇到这个错误我们可以从petalinux相关的脚本开始执行,无需重新调用vivado生成前面的xsa,可执行如下命令

make petalinux_proj XSA_DIR=<xsa dir path>
#我的xsa文件在zcu106_base/vivado下

另外遇到了这个错误千万不要主动去ctrl+c或者z结束脚本,要让脚本自己结束,脚本会把当前在做的任务执行完毕后主动结束,结束前会记录当前各种任务的执行状态,再次调用时可以达到断点重试的效果,强制结束脚本会导致需要重新build整个项目。

这一步成功之后,还需要进行

make pfm XSA_DIR=<xsa dir path>

就得到了xpfm文件。

问题4 Failed to generate BIF file, file doesn’t exist

这一步是由于petalinux找不到vivado生成的bitstream文件,修改petalinux下的Makefile,将第58行petalinux package后–fpga的路径改为vivado生成的bitstream路径即可,我的bit文件路径为vivado/zcu106_base/zcu106_base.runs/impl_1/zcu106_base_wripper.bit,供参考。

petalinux-package --force --boot --fsbl images/linux/zynqmp_fsbl.elf --fpga project-spec/hw-description/$(PLATFORM).bit --u-boot images/linux/u-boot.elf --pmufw images/linux/pmufw.elf --atf images/linux/bl31.elf
petalinux-package --force --boot --fsbl images/linux/zynqmp_fsbl.elf --fpga ../vivado/zcu106_base/zcu106_base.runs/impl_1/zcu106_base_wrapper.bit --u-boot images/linux/u-boot.elf --pmufw images/linux/pmufw.elf --atf images/linux/bl31.elf
  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值