黑金开发板:创建并测试Vitis加速基本平台
本文总结了Alinx黑金开发板视频教程:创建并测试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_FPDM_AXI_HPM1_FPDS_AXI_HPC0_FPDS_AXI_HPC1_FPDS_AXI_HP0_FPDS_AXI_HP1_FPDS_AXI_HP2_FPDS_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 typetoEXT4. - Change
Device node of SD deviceto/dev/mmcb1k1p2. - Append
Rootfilesystem Formatwithext4.
Back to the main menu, go to Yocto Settings:
- Change
Add pre-mirrortofile://<absolute-path-to-downloads>/downloads. - Unclick
Enable Network sstate feeds. ChangeLocal sstate feeds settingsto<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, clickpackage-managementandauto-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 tolinux.bifcreated in the last step.Boot Components Dir: path topfm/bootLinux Image Dir: path topfm/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 topfm/sysroots/aarch64-xilinux-linuxKernel Image: path topetalinux/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