当前位置:   article > 正文

Vitis AI修炼秘籍4. DPU IP的系统集成

dpu ip

一. Vitis硬件平台简介

Xilinx提供了一些基础的开发板平台内嵌在Vitis IDE中,用户可以直接从这些platform创建应用程序。但如果是自定义的板卡或者想要部署更多加速器IP、配置不同的性能,我们就需要创建完全自定义的硬件平台。本文介绍创建Vitis AI硬件平台的基本步骤。

硬件平台创建简介

创建一个Vitis嵌入式平台通常有三步:创建硬件接口、创建软件组件和打包平台。当然每一步也都需要进行相应的准备工作和测试。整个流程如下图所示:

各阶段简要描述如下:

步骤

目的

描述

Step0

准备启动点:一个可以启动的硬件和软件环境.

确保系统镜像可以成功启动并且外设能正常工作,启动一个板子并不是Vitis的开发流程,如果使用Xilinx官方提供的开发板,则这些步骤可以跳过,本文使用的自己的开发板,因此详细介绍如何创建并启动一个ZYNQ开发板

Step1

添加硬件接口

添加数据和控制的AXI接口

添加时钟与中断

Step2

更新软件组件

将XRT软件库与依赖库加到Petalinux中,因为Vitis应用使用XRT控制DPU。

生成PetaLinux镜像

Step3

打包Vitis平台

使用Vitis GUI或者XSCT打包命令制作平台文件

Step4

Vitis平台验证

使用多个测试用例验证搭建的平台是否可用

二. DPU IP集成

2.1 添加时钟

DPU IP中有三种时钟域:寄存器配置、数据控制和计算单元。这三种时钟可以根据需要进行独立配置,因此相应的输入时钟和复位必须配置正确。

Register Clock

s_axi_clk:用于配置寄存器,通过S_AXI接口接收DPU配置信息,可以与M-AXI时钟共用或配置成独立时钟,DPU配置寄存器的更新频率非常低,通常配置为100MHz。

Data Controller Clock

m_axi_dpu_aclk:DPU IP数据流调度所用的时钟,数据在DPU与外部内存之间发生在数据控制时钟域,所以需要连接到AXI_MM主时钟上。

Computation Clock

dpu_2x_aclk: DSP计算模块的时钟,运行在数据控制模块两倍频的时钟上,这两个时钟也必须边沿对齐。

通过Clock Wizard IP添加时钟配置:

将s_axi_aclk设置为100MHz, m_axi_dpu_aclk设置为200MHz,因此dpu_2x_aclk设置为400MHz。该IP配置为下图所示的方式:

2.2 添加DPU IP

2.2.1 DPU IP配置

从第三方库添加DPU IP,下载地址:zcu102-dpu-trd,在system_desgin中添加好Clocking Wizard和DPU之后,进行接口连接。

时钟需要连接到对应的DPU端口,连接完成后如下图所示。

设置DPU的参数:

注意,ElementWise Multiply不能使能,因为ZYNQ没有DSP48E2,如果选择了ElementWise Multiply,可能会出现编译错误。另外Arch of DPU只能选择B1024以下的规格,否则资源不够。

2.2.2 分配寄存器

DPU最少需要分配16MB内存空间,DPU的从机接口可以连接到任意可以分配地址的CPU主机接口。

注意:DPU的起始地址必须在16MB地址空间之内,并且linux驱动和device tree中的配置与vivado中的保持一致

分配完地址的DPU如下图所示:

编译完成后,导出bit流,在Petalinux中制作Linux系统镜像。

三. Linux驱动与文件系统

XRT提供了Yocto编译Linux文件系统的动态库与设备驱动,在制作Linux镜像之前需要安装Xilinx XRT和PetaLinux。

3.1 XRT环境搭建

Xilinx Runtime library(XRT)是面向FPGA/ACAP设备的开源软件,用户可以使用python, C/C++来编写主机端的代码,通过XRT来调用FPGA/ACAP设备,XRT是Vitis和Alveo解决方案的关键组件。

用户应用程序是由C/C++/OpenCL或者Python编写,设备端代码用C/C++/OpenCL,VHDL或Verilog硬件描述语言编写。XRT在系统中的位置如下图所示。

下载XRT代码:https://gitee.com/mirrors_Xilinx/XRT?_from=gitee_search

Step 1. 安装XRT依赖库

$ sudo <XRT>/src/runtime_src/tools/scripts/xrtdeps.sh

Step 2. 编译XRT Runtime

$ cd build $ ./build.sh

Step 3. 打包Ubuntu上的DEB

  1. $ cd build/Release
  2. $ make package
  3. $ cd ../Debug
  4. $ make package

Step 4. 安装XRT

编译完成后将在Debug/Release目录下生成ubuntu安装包,选择对应的包进行安装。

$ sudo dpkg -i xrt_<version>.deb

安装完成之后输出如下信息:

  1. depmod................ DKMS:
  2. install completed. Finished DKMS common.postinst Loading new XRT Linux kernel modules Installing MSD / MPD daemons

3.1 Petalinux构建Linux内核

从Xilinx官网下载PetaLinux,注意版本,本文使用的是Peta linux 2020.2.具体的安装与基本操作可参考PetaLinux学习01-开发环境搭建与PetaLinux的安装.note。

将Vivado导出的硬件描述文件复制到Ubuntu中,这些文件可以在Vitis project的export目录中找到,文件列举如下:

使用petalinux命令来创建linux相关文件:

step1. 创建Petalinux project

$ petalinux-create --type project --template zynq --name ZYNQ7020DPU

step2. 导入硬件信息

  1. $ cd ZYNQ7020DPU
  2. $ petalinux-config --get-hw-description=../ZYNQ7020Platform/hw

此时会弹出Linux的kconfig图形配置界面。接下来根据需要进行配置。

可以使用默认配置。

编译完成之后:

  1. $ petalinux-config --get-hw-description=../ZYNQ7020Platform/hw INFO: Sourcing build tools INFO: Getting hardware description... INFO: Rename zynq7020_design_wrapper.xsa to system.xsa
  2. [INFO] Generating Kconfig for project
  3. [INFO] Menuconfig project configuration written to <Path>/ZYNQ7020DPU/project-spec/configs/config *** End of the configuration. *** Execute 'make' to start the build or try 'make help'.
  4. [INFO] Extracting yocto SDK to components/yocto
  5. [INFO] Sourcing build environment
  6. [INFO] Generating kconfig for Rootfs
  7. [INFO] Silentconfig rootfs
  8. [INFO] Generating plnxtool conf
  9. [INFO] Adding user layers
  10. [INFO] Generating workspace directory

step3. 配置文件系统,内核,设备树和u-boot

运行rootfs的配置:

$ petalinux-config -c rootfs

选择User Packages, 选择所有列出的库。

使能OpenSSH并且关闭dropbear, Dropbear是Vitis嵌入式平台的SSH默认工具,如果使用OpenSSH替代Dropbear,数据传输速度可以提升4倍。还是在rootfs的配置界面,找到顶层的Image Features,关闭ssh-server-dropbear并选择ssh-server-openssh。

进入到FileSytem Packages -> misc -> packagegroup-core-ssh-dropbear,关闭packagegroup-core-ssh-dropbear.返回上两级目录,进入console -> network -> openssh,选择openssh, open-sftp-server, openssh-sshd, openssh-scp。

打开包管理:Image Features -> package-management和debug_tweaks

更新设备树:

在project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi文件中追加以下内容:

  1. &amba {
  2. zyxclmm_drm {
  3. compatible = "xlnx,zocl";
  4. status = "okay";
  5. interrupt-parent = <&axi_intc_0>;
  6. interrupts = <0 4>, <1 4>, <2 4>, <3 4>,
  7. <4 4>, <5 4>, <6 4>, <7 4>,
  8. <8 4>, <9 4>, <10 4>, <11 4>,
  9. <12 4>, <13 4>, <14 4>, <15 4>,
  10. <16 4>, <17 4>, <18 4>, <19 4>,
  11. <20 4>, <21 4>, <22 4>, <23 4>,
  12. <24 4>, <25 4>, <26 4>, <27 4>,
  13. <28 4>, <29 4>, <30 4>, <31 4>;
  14. };
  15. };
  16. &axi_intc_0 {
  17. xlnx,kind-of-intr = <0x0>;
  18. xlnx,num-intr-inputs = <0x20>;
  19. };
  20. &sdhci1 {
  21. no-1-8-v;
  22. disable-wp;
  23. };

添加EXT4 rootfs支持

$ petalinux-config

进入Image Packaging Configuration->Root File System Type, 选择EXT4

同时需要配置bootargs,让uboot挂载EXT4分区。

进入DTG seeting -> Kernel Bootargs -> generate boot args automatically设置成NO,并且选择User Set Kernel Bootargs,输入:

earlycon console=ttyPS0,115200 clk_ignore_unused root=/dev/mmcblk0p2 rw rootwait cma=512M

root=/dev/mmcblk0p2意思是SD卡第二个分区,EXT4格式

step4. 编译petalinux

$ petalinux-build

编译输出文件在工程目录images/linux目录下:

创建sysroot

$ petalinux-build --sdk

生成的sdk.sh在linux/image目录中。

step5. 编译启动文件BOOT.BIN

$ petalinux-package --boot --format BIN --fsbl images/linux/zynq_fsbl.elf --u-boot images/linux/u-boot.elf --fpga images/linux/system.bit

经过上面五步之后已经成功编译出可以启动的linux系统镜像。将BOOT.BIN,rootfs.cpio.gz, image.ub, boot.scr, 放在SD卡根目录即可启动。

默认情况下用户名与密码都是root。如果开发板连接了网线与路由,Linux系统启动后会自动分配IP地址,之后也可以通过SSH登录到开发板中。


 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/250369
推荐阅读
相关标签
  

闽ICP备14008679号