文章

黑金开发板:创建并测试Vitis加速基本平台

本文总结了Alinx黑金开发板视频教程:创建并测试Vitis加速基本平台

黑金开发板:创建并测试Vitis加速基本平台

步骤一:Vivado搭建硬件平台并导出xsa

For Alinx AXU5EV-E hardware, paste the following tcl command:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
proc set_ps_config {bd_cell_name} {
set_property -dict [list CONFIG.PSU__CAN0__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__CAN0__PERIPHERAL__IO {MIO 38 .. 39}  \
     CONFIG.PSU__CAN1__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__CAN1__PERIPHERAL__IO {MIO 32 .. 33}  \
     CONFIG.PSU__DPAUX__PERIPHERAL__IO {MIO 27 .. 30}  \
     CONFIG.PSU__ENET2__PERIPHERAL__ENABLE {0}  \
     CONFIG.PSU__ENET3__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__ENET3__GRP_MDIO__ENABLE {1}  \
     CONFIG.PSU__GPIO1_MIO__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__I2C1__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__I2C1__PERIPHERAL__IO {MIO 24 .. 25}  \
     CONFIG.PSU__PCIE__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__PCIE__PERIPHERAL__ROOTPORT_IO {MIO 37}  \
     CONFIG.PSU__USB0__REF_CLK_SEL {Ref Clk1}  \
     CONFIG.PSU__PCIE__DEVICE_PORT_TYPE {Root Port}  \
     CONFIG.PSU__PCIE__BAR0_ENABLE {1}  \
     CONFIG.PSU__PCIE__CLASS_CODE_SUB {0x04}  \
     CONFIG.SUBPRESET1 {DDR4_MICRON_MT40A256M16GE_083E}  \
     CONFIG.PSU__QSPI__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__QSPI__PERIPHERAL__DATA_MODE {x4}  \
     CONFIG.PSU__QSPI__GRP_FBCLK__ENABLE {1}  \
     CONFIG.PSU__SD0__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__SD0__SLOT_TYPE {eMMC}  \
     CONFIG.PSU__SD0__RESET__ENABLE {1}  \
     CONFIG.PSU__SD1__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__SD1__PERIPHERAL__IO {MIO 46 .. 51}  \
     CONFIG.PSU__SD1__GRP_CD__ENABLE {1}  \
     CONFIG.PSU__SD1__SLOT_TYPE {SD 2.0}  \
     CONFIG.PSU__TTC0__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__TTC1__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__TTC2__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__TTC3__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__DDRC__DEVICE_CAPACITY {8192 MBits}  \
     CONFIG.PSU__DDRC__ROW_ADDR_COUNT {16}  \
     CONFIG.PSU__UART0__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__UART0__PERIPHERAL__IO {MIO 42 .. 43}  \
     CONFIG.PSU__USB0__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__USB0__RESET__ENABLE {1}  \
     CONFIG.PSU__USB0__RESET__IO {MIO 31}  \
     CONFIG.PSU__USB__RESET__MODE {Shared MIO Pin}  \
     CONFIG.PSU__USB3_0__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__USB3_0__PERIPHERAL__IO {GT Lane1}  \
     CONFIG.PSU_BANK_0_IO_STANDARD {LVCMOS18}  \
     CONFIG.PSU_BANK_1_IO_STANDARD {LVCMOS18}  \
     CONFIG.PSU_BANK_2_IO_STANDARD {LVCMOS18}  \
     CONFIG.PSU__DISPLAYPORT__PERIPHERAL__ENABLE {1}  \
     CONFIG.PSU__CRF_APB__DP_VIDEO_REF_CTRL__SRCSEL {VPLL}  \
     CONFIG.PSU__CRF_APB__DP_AUDIO_REF_CTRL__SRCSEL {RPLL}  \
     CONFIG.PSU__CRF_APB__DP_STC_REF_CTRL__SRCSEL {RPLL}  \
     CONFIG.PSU__CRF_APB__TOPSW_MAIN_CTRL__SRCSEL {APLL}  \
     CONFIG.PSU__CRL_APB__SDIO0_REF_CTRL__SRCSEL {IOPLL}  \
     CONFIG.PSU__CRL_APB__SDIO1_REF_CTRL__SRCSEL {IOPLL}] [get_bd_cells $bd_cell_name]
}
1
set_ps_config zynq_ultra_ps_e_0

Turn on PL-PS interrupts IRQ0.

Add clock wizard, click clk_out1~3, and set each of them 100, 200, 400 MHz. For Reset type, choose Active Low. Connect clk_in1 to pl_clk0. Connect pl_reset0 to resetn

Add 3 Processor System Reset. Hold Ctrl to copy. Connect each clkout to slowest_sync_clk, locked to dcm_locked, pl_resetn0 to ext_reset_in.

Go to Window>>Platform Interfaces to enable platform interfaces. Enable clk_out1~3 in clk_wiz_0 with double click or right click. Go to Window>>Options, set is_default option of clk_out2 and change its id to 0. Set id of clk_out1 to 1, and set id of clk_out3 to 2.

Connect maxihpm0_lpd_aclk to clk_out1.

Add AXI Interrupt Controller. Run Connection Automation.

Unfold interrupt of AXI Interrupt Controller, and connect irq with pl_s_irq0.

Input tcl command:

1
set_property PFM.IRQ {intr {id 0 range 32}} [get_bd_cells /axi_intc_0]

Back to Platform Interfaces. For zynq_platform_ps_e_0, enable:

  • M_AXI_HPM0_FPD
  • M_AXI_HPM1_FPD
  • S_AXI_HPC0_FPD
  • S_AXI_HPC1_FPD
  • S_AXI_HP0_FPD
  • S_AXI_HP1_FPD
  • S_AXI_HP2_FPD
  • S_AXI_HP3_FPD

Set the memport option of S_AXI_HPC0_FPD and S_AXI_HPC0_FPD to S_AXI_HP.

Still in Platform Interfaces. For ps8_0_axi_periph, enable M01_AXI~M08_AXI.

Ctrl-s.

Go to Tools>>Validate Design. Ignore[BD 41-759] warning.

Go to sources, right click design_1_i: design_1 (design_1.bd), and choose Create HDL Wrapper. Keep the default option. Ignore[BD 41-759] warning.

Go to Flow Navigator>>IP Intergration>>Generate Block Design. For synthesis option, choose Global.

Go to Files>>Export>>Export Hardware. Keep default option (Expandable, Pre-synthesis).

步骤二:Petalinux配置

Copy our .xsa file created in the Vivado project to hardware folder.

1
2
mkdir hardware
cp <path-to-xsa-exported-from-vivado>/design_1_wrapper.xsa hardware

Create a new petalinux project named petalinux.

1
petalinux-create -t project --template zynqMP --name petalinux

When you run petalinux command, you must in a petalinux project folder. We ALWAYS ASSUME YOU ARE IN petalinux FOLDER in the following steps.

1
cd petalinux
1
petalinux-config --get-hw-description ../hardware/

When we are in the interative GUI, go to Image Packaging Configuration:

  • Change Root filesystem type to EXT4.
  • Change Device node of SD device to /dev/mmcb1k1p2.
  • Append Rootfilesystem Format with ext4.

Back to the main menu, go to Yocto Settings:

  • Change Add pre-mirror to file://<absolute-path-to-downloads>/downloads.
  • Unclick Enable Network sstate feeds. Change Local sstate feeds settings to <absoluate-path-to-sstates>/sstate_aarch64_2020.1/aarch64.

Append ./project-spec/meta-user/conf/user-rootfsconfig with:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#Packages for base XRT support:
CONFIG_packagegroup-petalinux-xrt
CONFIG_xrt-dev

#Packages for easy system management:
CONFIG_dnf
CONFIG_e2fsprogs-resize2fs
CONFIG_parted

#Packages for Vitis-AI dependencies support:
CONFIG_packagegroup-petalinux-vitisai

#Packages for natively building Vitis-AI applications on target board:
CONFIG_packagegroup-petalinux-self-hosted
CONFIG_cmake
CONFIG_opencl-clhpp-dev
CONFIG_opencl-headers-dev
CONFIG_packagegroup-petalinux-opencv
CONFIG_packagegroup-petalinux-opencv-dev

#Packages for running Vitis-AI demo applications with GUI:
CONFIG_mesa-megadriver
CONFIG_packagegroup-petalinux-x11
CONFIG_packagegroup-petalinux-v4lutils
CONFIG_packagegroup-petalinux-matchbox
1
petalinux-config -c rootfs

In GUI:

  • Enter User-packages, and choose all.
  • Enter Image Feature, click package-management and auto-login.
1
petalinux-config -c kernel

In GUI, enter CPU Power Management, and close all of them.

Change ./proj-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi to:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/include/ "system-conf.dtsi"

/ {
    chosen {
        bootargs = "earlycon console=ttyPS0,115200 clk_ignore_unused root=/dev/mmcblk1p2 rw rootwait cma=512M";
    };
};

&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>;
    interrupt-parent = <&gic>;
    interrupts = <0 89 4>;
};

&sdhci1 {
    no-1-8-v;
    disable-wp;
};

Now build the project:

1
petalinux-build
1
petalinux-build --sdk
1
mkdir pfm

Install the sdk to pfm folder.

1
./images/linux/sdk.sh -d pfm/
1
mkdir pfm/image pfm/boot
1
2
3
4
5
6
cp \
 images/linux/bl31.elf \
 images/linux/pmufw.elf \
 images/linux/u-boot.elf \
 images/linux/zynqmp_fsbl.elf \
 pfm/boot
1
mv pfm/boot/zynqmp_fsbl.elf pfm/boot/fsbl.elf

Create a new file called linux.bif:

1
touch pfm/boot/linux.bif

Fill it with the following contents:

1
2
3
4
5
6
7
8
9
10
/* linux */
the_ROM_image:
{
    [fsbl_config] a53_x64
    [bootloader] <fsbl.elf>
    [pmufw_image] <pmufw.elf>
    [destination_device=pl] <bitstream>
    [destination_cpu=a53-0, exception_level=el-3, trustzone] <bl31.elf>
    [destination_cpu=a53-0, exception_level=el-2] <u-boot.elf>
}
1
2
3
4
cp \
 images/linux/system.dtb \
 images/linux/boot.scr \
 pfm/image/

Create a new folder as Vitis workspace.

1
mkdir pfm/wksp

步骤三:创建Vitis平台

Create the Platform

Create a platform project. Choose our .xsa file exported from Vivado. Choose OS: Linux.

Focus linux on psu_cortexa53, fill the following options:

  • Bif file: path to linux.bif created in the last step.
  • Boot Components Dir: path to pfm/boot
  • Linux Image Dir: path to pfm/image

Build the platform project by clicking the hammer icon, or right-click the platform root folder, and choose build.

Create the Application

Create a application project:

  • Sysroot Path: path to pfm/sysroots/aarch64-xilinux-linux
  • Kernel Image: path to petalinux/images/linux/image.ub

Click Available Templates>>Vitis IDE Examples>>Vitis Accleration Examples Repository and click download. (If you are under a VPN, please turn on the Tun mode :D.)

Choose SW acceleration templates>>system optimization>>Hello World HLS C/C++.

Click the application project you just created in Explorer, right click the down arrow next to the hammar, and choose Hardware.

Burn the SD Card

VMware中点击虚拟机»管理»USB控制器,USB类型改为USB3.0,如果不识别SD卡,请重新插拔。

打开Ubuntu上的Disks软件,点击-删除所有分区。

点击+添加分区:

  • 第一个分区:大小1G,名称BOOT,分区类型FAT
  • 第二个分区:大小12G,名称EXT,分区类型Ext4

两个分区都创建好后,点击播放键进行挂载。

回到步骤二:Petalinux配置petalinux目录,将pfm/hello-world-app/Hardware/package/sd_card中的所有文件拷贝到SD卡的BOOT分区,将images/linux/rootfs.tar.gz解压到SD卡的EXT分区。

1
sudo cp pfm/wksp/hello-world-app/Hardware/package/sd_card/* /media/yutong/BOOT
1
sudo tar -xvzf images/linux/rootfs.tar.gz -C /media/yutong/EXT

将所有内容刷新到SD卡:

1
sudo sync

点击Disks软件中的停止键进行SD卡分区卸载。

步骤四:启动开发板

进入开发板系统中的/media/sd-mmcb1k1p1目录:

1
export XILINX_XRT=/usr

运行:

1
./hello-world-app vadd.xclbin

参考文献

本文由作者按照 CC BY 4.0 进行授权

热门标签