Vitis 加速基本平台創建
1、Vivado 工程創建,硬件平台bd 圖如下所示
1.1、雙擊Block圖中ZYNQ核,配置相關參數
1.1.1、Low Speed 配置,在 I/O Configuration 窗口,配置 BANK0~BANK2 電壓為 LVCMOS18, BANK3 電壓為LVCMOS33。首先配置 Low Speed 管腳, 勾選 QSPI,並設置為”Single”模式, Data Mode為”x4“, 勾選 Feedback Clk
1.1.2、(AXU2CGA 開發板沒有 EMMC,不需要勾選此項)勾選 SD 0,配置 eMMC。 選擇 MIO13..22,Slot Type 選擇 eMMC, Data Transfer Mode 為 8Bit,勾選 Reset,並選擇 MIO23。
1.1.3、勾選 SD 1,配置 SD 卡。選擇 MIO 46..51, Slot Type 選擇 SD 2.0, Data Transfer Mode 選擇4Bit,勾選 CD,用於檢測 SD 卡插入,選擇 MIO45
1.1.4、勾選 I2C 1,用於 EEPROM 等的 I2C,選擇 MIO 32..33
1.1.5、勾選串口 UART 1,選擇 MIO 42..43
1.1.6、勾選 TTC 0~TTC 3
1.1.7、High Speed 配置,在 I/O Configuration 窗口,配置 BANK0~BANK2 電壓為 LVCMOS18, BANK3 電壓為LVCMOS33。 首先配置 Low Speed 管腳, 勾選 QSPI,並設置為”Single”模式, Data Mode為”x4“, 勾選 Feedback Clk
1.1.8、勾選 USB 0,選擇 MIO 52..63,勾選 USB 3.0,選擇 GT Lane1
USB 復位選擇 MIO 31
1.1.9、勾選 PCIe
1.1.10、點開 Switch To Advanced Mode,選擇 PCIe Configuration,修改以下幾個參數,配置為 ROOT模式
1.1.11、回到 I/O Configuration, 選擇 GT Lane0, 復位選擇 MIO 37; 勾選 Display Port,選擇 MIO27..30, Lane Selection 選擇 Dual Higher
至此,I/O部分配置完畢。
1.1.12、時鍾配置,在 Clock Configuration 界面, Input Clocks 窗口配置參考時鍾,其中 PSS_REF_CLOCK 為 ARM的參考時鍾默認為 33.333MHz; PCIe 選擇 Ref Clk0, 100MHz; Display Port 選擇 Ref Clk2,27MHz; USB0 選擇 Ref Clk1, 26MHz。
1.1.13、在 Output Clocks 窗口,如果不是 IOPLL,改成 IOPLL,保持一致,用同樣的 PLL
1.1.14、PL 的時鍾保持默認,這是給 PL 端邏輯提供的時鍾。
1.1.15、Full Power 部分,其他保持默認,將 DP_VIDEO 改為 VPLL, DP_AUDIO 和 DP_STC 改為RPLL。
最下面的Interconnect修改如下
其他部分保持默認,至此,時鍾部分配置完成。
1.1.16、DDR 配置,在 DDR Configuration 窗口中, Load DDR Presets 選擇”DDR4_MICRON_MT40A256M16GE_083E”
AXU2CGB 開發板配置如下:
其他保持默認,點擊OK,配置完成。
至此,ZYNQ核的相關配置全部完成。
1.2、BD設計中添加Clocking Wizard IP核,為了后面定義平台的使用,必須將Clocking Wizard IP核的時鍾輸出配置為兩個以上,本BD設計配置5路時鍾輸出。
1.3、定義平台(PFM) 接口和屬性。 在此定義 Vitis 使用的接口。單擊 Vivado 菜單的 Window→Plateform Interface,迚行平台的設定。單擊 Enable platform Interfaces 可設置平台。
1.3.1、更改 board 的名字,以便在 Vitis 平台上更容易理解。選擇了 Platform,將下面的 Board 變更為 axu4ev
1.3.2、定義可用的接口和端口。各端口用鼠標右鍵單擊,菜單就會出來。雙擊也可以切換 Enable、Disenable。在 xynq_ultra_ps_e_0 中,將下一個接口、端口設為 Enable。(除此以外是 Dienable)M AXI HPM0 FPD、 M AXI HPM1 FPD、 M AXI HPM0 LPD、 S AXI HPC0 FPD、 S AXI HPC1 FPD、 S AXIHP0 FPD、 S AXI HP1 FPD、 S AXI HP2 FPD、 S AXI HP3 FPD;對於 clk wiz 0 全部用 Enable;對於xlconcet 0,將 In 0~ In 7 設為 Enable。
1.3.3、時鍾默認值。必須把某個時鍾設為默認值。選擇 clk out1 后,單擊 Plaatform InterfaceProperties 中的 Options 標簽,選擇 is default。另外,把 id 必須設為 0。可以在 Vitis 中使用的默認時鍾。其他時鍾依次從 1 開始排列,輸入完序號后按回車鍵確認。
1.4、然后編譯生成bit文件
1.5、XRT 環境設置, 在 Tcl 控制台上輸入以下命令。因為 Tcl 控制台一行一行輸入下列命令。
set_property platform.design_intent.embedded true [current_project]
set_property platform.design_intent.server_managed false [current_project]
set_property platform.design_intent.external_host false [current_project]
set_property platform.design_intent.datacenter false [current_project]
set_property platform.default_output_type "sd_card" [current_project]
1.6、導出 xsa 文件,選擇“Expandable”,這樣可以用 vitis 做加速。
1.6.1、Platform state 選擇“Pre-synthesis”,再選擇“Include bitstream”
1.6.2、平台屬性按下圖填寫
1.6.3、xsa 文件名默認,保存路徑默認即可。
2、Petalinux工程
2.1、在用戶目錄下,創建一個工作目錄,路徑中“~”表示用戶 home 路徑,等效於/home/alinx2020
mkdir-p~/peta_prj/linxPsBase/hardware
2.2、將 vivado 導出 xsa 文件拷貝迚 hardware 文件夾下
2.3、進入工程目錄
cd~/peta_prj/linxPsBase/
2.4、設置 petalinux 環境變量,運行下面命令,環境變量叧在當前終端中有效,所以后面和petalinux 相關的命令都要在當前終端中輸入,關閉后需要重新運行,opt/pkg是用戶自定義的petalinux安裝路徑。
source /opt/pkg/petalinux/settings.sh
2.5、創建 petalinux 工程, 名稱為“petalinux”, 類型為“project”, 使用 zynqMP 模板
petalinux-create -t project -n petalinux --template zynqMP
2.6、使用下面的命令進入 petalinux目錄
cd~/peta_prj/linxPsBase/petalinux
2.7、配置 Petalinux 工程的硬件信息,硬件信息目錄里叧能有一個 xsa 文件
petalinux-config --get-hw-description ../hardware/
2.8、彈出工程配置項界面,如下圖, 在“Auto Config Settings”選項中勾選“Device tree autoconfig”、“kernel autoconfig”“u-boot autoconfig”, 然后“Save”、接着“Exit”
2.9、等待配置完成
2.10、再一次運行如下命令,進行petalinux配置
petalinux-config --get-hw-description ../hardware/
彈出的界面里菜單選項Image Packaging Configuration ->Root filesystem type 選擇 EXT (SD/eMMC/QSPI/SATA/USB)
根文件系統路徑選擇至關重要,如果填錯無法啟動 Linux, mmcblk 代表 sd 卡和 emmc,mmcblk0p2 代表第一個 mmc 設備第二分區,
如果 emmc 和 sd 卡同時存在, 則 sd 為 mmcblk1,所以這里填寫/dev/mmcblk1p2
2.11、修改./project-spec/meta-user/conf/user-rootfsconfig 文件如下
#Note: Mention Each package in individual line
#These packages will get added into rootfs menu entry
CONFIG_gpio-demo
CONFIG_peekpoke
CONFIG_xrt
CONFIG_xrt-dev
CONFIG_zocl
CONFIG_opencl-clhpp-dev
CONFIG_opencl-headers-dev
CONFIG_packagegroup-petalinux-opencv
2.12、修改設備樹文件./project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
/include/ "system-conf.dtsi"
/ {
};
/* SD */
&sdhci1 {
disable-wp;
no-1-8-v;
};
/* USB */
&dwc3_0 {
status = "okay";
dr_mode = "host";
};
&amba {
zyxclmm_drm {
compatible = "xlnx,zocl";
status = "okay";
};
};
2.13、配置根文件系統
petalinux-config -c rootfs
彈出界面中user packages 全部勾選
2.14、配置內核
petalinux-config -c kernel
彈出界面中Library routines → Size in Mega Bytes 修改為 1024
2.15、編譯petalinux工程
petalinux-build
注:此過程需要連接網絡。因需要從github下載源代碼。
2.16、構建SDK
petalinux-build –sdk
編譯完成后會在petalinux鏡像文件夾中自動生成sdk.sh文件,運行該文件,安裝SDK環境。記住安裝路徑,后面Vitis平台配置需要關聯次路徑。
2.17、新建一個pfm文件夾用於后面構建Vitis平台
mkdir pfm
2.18、在pfm文件夾下建立boot文件夾,然后把petalinux生成的image.ub zynqmp_fsbl.elf pmufw.elf bl31.elf u-boot.elf 復制到boot文件夾
2.19、在boot文件夾建立linux.bif文件,內容如下, 路徑需要自行修改
注:.bif 文件創建,使用命令touch name.txt 在使用命令gedit name.bif
/* linux */
the_ROM_image:
{
[fsbl_config] a53_x64
[bootloader] /home/john/peta_prj/linxPsBase/petalinux/pfm/boot/zynqmp_fsbl.elf
[pmufw_image] /home/john/peta_prj/linxPsBase/petalinux/pfm/boot/pmufw.elf
[destination_device=pl] <bitstream>
[destination_cpu=a53-0, exception_level=el-3, trustzone] /home/john/peta_prj/linxPsBase/petalinux/pfm/boot/bl31.elf
[destination_cpu=a53-0, exception_level=el-2] /home/john/peta_prj/linxPsBase/petalinux/pfm/boot/u-boot.elf
}
至此,petalinux工程全部配置完畢。
3、創建Vitis平台
3.1、進入 pfm 文件夾, 啟動 vitis 軟件
cd ./pfm
運行Vitis2020.1環境 路徑自行修改
source /tools/Xilinx/Vitis/2020.1/setting64.sh
打開Vitis工具圖形界面
vitis -workspace wksp1
3.2、Vitis 啟動后,選擇 Create Platform Project。(或從菜單中選擇 File→New→Platform Project也可以), Project name 填寫 axu4ev_base
3.3、接下來選擇從哪里開始制作平台。因為從 XSA 制作,所以選擇 Create from hardware specification(XSA),然后按 Next
3.4、指定用 Vivado 創建的 xsa 文件, Operatings system 是 Linux, Processor 選擇 psu_cortexa53。有一個標志是紅色的,沒關系。設定后,按 Finish。
3.5、窗口中有 linux 和 zynqmp fsbl 和 zynqmp pmufw,對於 linux,后面還需要設定。
3.6、linux on psu_cortexa53 里面指定 bif 文件, Boot ComponentDirectory 和 Linux image Directory都指定為上面建立的 boot 目錄, LinuxRootfs指定petalinux生成的鏡像文件rootfs.cpio.gz,Sysroot 可以暫時不指定, 如果要指定, 可以選擇安裝后的petalinux sdk sysroots/aarch64-xilinx-linux 文件夾。 點擊右上方錘子 開始編譯,等待編譯完成。
4、測試Vitis加速
4.1、從 Vitis 菜單中選擇 File→New→Application Project。輸入項目名稱 hello_world,單擊 Next
4.2、平台選擇剛剛建立的 axu4ev_base
4.3、文件系統選擇 petalinux sdk 安裝后的文件系統, 點擊 Next
4.4、模板就選擇 Hello world, 其他模板可能丌能正常加速, 需要修改。
4.5、在錘子下拉菜單中選擇 Hardware, 就在要生成在板子上運行的文件, 然后點擊錘子編譯,時間比較久, 要求虛擬機內存 16G 以上, 否則會出現沒有原因的錯誤。
4.6、編譯完成后把 sd_card 文件夾下文件全部復制到 sd 卡第一分區, 同時還需要把petalinux編譯生成的鏡像文件boot.src文件拷貝到SD卡第一分區,否則板卡啟動會卡在某處無法啟動,如果沒有分區,請參考《SD卡根文件系統制作》
4.7、SD卡第二分區先初除所以內容,再復制 petalinux 生成的根文件系統,路徑替換為自己的路徑
sudo tar xzvf /peta_prj/linuxPsBase/petalinux/images/linux/rootfs.tar.gz -C /media/john/EXT
4.8、SD 卡插到AXUCGB板子上, 串口終端登錄系統, 運行測試程序 export XILINX_XRT=/usr 是必須運行的
cd /media/sd-mmcblk1p1
export XILINX_XRT=/usr
./hello_world vadd.xclbin
串口打印信息會出現“test passed”信息字樣。