赞
踩
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中有三种时钟域:寄存器配置、数据控制和计算单元。这三种时钟可以根据需要进行独立配置,因此相应的输入时钟和复位必须配置正确。
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配置为下图所示的方式:
从第三方库添加DPU IP,下载地址:zcu102-dpu-trd,在system_desgin中添加好Clocking Wizard和DPU之后,进行接口连接。
时钟需要连接到对应的DPU端口,连接完成后如下图所示。
设置DPU的参数:
注意,ElementWise Multiply不能使能,因为ZYNQ没有DSP48E2,如果选择了ElementWise Multiply,可能会出现编译错误。另外Arch of DPU只能选择B1024以下的规格,否则资源不够。
DPU最少需要分配16MB内存空间,DPU的从机接口可以连接到任意可以分配地址的CPU主机接口。
注意:DPU的起始地址必须在16MB地址空间之内,并且linux驱动和device tree中的配置与vivado中的保持一致
分配完地址的DPU如下图所示:
编译完成后,导出bit流,在Petalinux中制作Linux系统镜像。
XRT提供了Yocto编译Linux文件系统的动态库与设备驱动,在制作Linux镜像之前需要安装Xilinx XRT和PetaLinux。
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
- $ cd build/Release
- $ make package
- $ cd ../Debug
- $ make package
Step 4. 安装XRT
编译完成后将在Debug/Release目录下生成ubuntu安装包,选择对应的包进行安装。
$ sudo dpkg -i xrt_<version>.deb
安装完成之后输出如下信息:
- depmod................ DKMS:
- install completed. Finished DKMS common.postinst Loading new XRT Linux kernel modules Installing MSD / MPD daemons
从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. 导入硬件信息
- $ cd ZYNQ7020DPU
- $ petalinux-config --get-hw-description=../ZYNQ7020Platform/hw
此时会弹出Linux的kconfig图形配置界面。接下来根据需要进行配置。
可以使用默认配置。
编译完成之后:
- $ petalinux-config --get-hw-description=../ZYNQ7020Platform/hw INFO: Sourcing build tools INFO: Getting hardware description... INFO: Rename zynq7020_design_wrapper.xsa to system.xsa
- [INFO] Generating Kconfig for project
- [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'.
- [INFO] Extracting yocto SDK to components/yocto
- [INFO] Sourcing build environment
- [INFO] Generating kconfig for Rootfs
- [INFO] Silentconfig rootfs
- [INFO] Generating plnxtool conf
- [INFO] Adding user layers
- [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文件中追加以下内容:
- &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>;
- };
-
- &sdhci1 {
- no-1-8-v;
- disable-wp;
- };
添加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登录到开发板中。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。