在任意設計流程中,仿真都是不可或缺的關鍵組成部分。它允許用戶在無任何物理硬件的情況下對硬件系統(tǒng)進行確認。這篇簡短的博客將介紹如何使用 QEMU + 協同仿真來對 AMD Versal 自適應 SoC Cortex A72 (QEMU) 上運行的固件進行仿真,該固件會訪問當前 AMD Vivado Design Suite 仿真中正在進行仿真的 PL 中的 IP。本文將使用 Versal VCK190 和 Vivado 2024.2 來生成仿真環(huán)境。
注釋:目前這是實驗性流程,尚未受到正式的支持。
QEMU 設備樹二進制對象
QEMU 使用模型來對 Versal CIPS 進行仿真。每塊 AMD 開發(fā)板都有預構建的設備樹二進制對象 (DTB)。在本博客中使用的是 VCK190 的 DTB。在本系列后續(xù)博文中,將介紹用戶如何自行編譯 DTB,從而與用戶自定義系統(tǒng)保持更緊密的一致。目前,該演示的 DTB 文件已隨本篇博文一同交付。
硬件設計
使用 Vivado 2024.2 來生成簡單的塊設計,如下所示:

設置仿真腳本
此處使用的是由 Vivado 生成的仿真腳本,但要對這些腳本稍作修改:
希望仿真永久保持運行 (all)
希望運行腳本時啟動 GUI (-gui)

需要指定仿真要使用的仿真模型。在此例中,要使用的模型是 TLM。
為此,只需在 BD 上運行以下 Tcl 命令:

下一步,生成輸出文件,將其設為 Global。

生成仿真腳本
生成頂層 RTL 封裝文件,然后運行仿真。這樣會生成仿真腳本,稍后在 QEMU + 協同仿真腳本中將啟動這些仿真腳本。

這樣會在 project_1.simsim_1ehavxsim 中生成仿真腳本以供后續(xù)調用。
開發(fā)者只需使用 Tcl 命令完成這些操作即可,但希望在本篇博文中通過 GUI 演示。
導出硬件以生成 XSA 文件。此文件將在 AMD Vitis 統(tǒng)一軟件平臺中用于生成工作空間,以供在本系列后續(xù)博文中使用。
生成 QEMU
此處將使用以下 QEMU 實參。將 QEMU 實參置于 Linux 腳本中。例如,分別使用 run_qemu_aarch64.sh 和 run_qemu_microblazeel.sh。
Aarch64 QEMU 實參
echo 'INFO: Starting aarch64 QEMU'echo 'INFO: TCP PORT is free 9000'echo 'INFO: qemu-system-aarch64 -nographic -M arm-generic-fdt -serial null -serial null -serial mon:stdio -serial null -display none -boot mode=5 -drive if=sd,index=1,file=qemu_sd.img,format=raw -machine-path /tmp/tmp_dir -sync-quantum 1000000 -hw-dtb board-versal-ps-cosim-vitis-vck190.dtb -m 8G -display none -gdb tcp::9000 -net nic,netdev=eth0 -netdev user,id=eth0,tftp=/tftpboot -net nic'qemu-system-aarch64 -nographic -M arm-generic-fdt -serial null -serial null -serial mon:stdio -serial null -display none -boot mode=5 -drive if=sd,index=1,file=qemu_sd.img,format=raw -machine-path /tmp/tmp_dir -sync-quantum 1000000 -hw-dtb board-versal-ps-cosim-vitis-vck190.dtb -m 8G -display none -gdb tcp::9000 -net nic,netdev=eth0 -netdev user,id=eth0,tftp=/tftpboot -net nic
Microblazeel QEMU 實參
echo 'INFO: Starting microblaze QEMU'echo 'INFO: qemu-system-microblazeel -M microblaze-fdt -serial mon:stdio -display none -device loader,addr=0xf0000000,data=0xba020004,data-len=4 -device loader,addr=0xf0000004,data=0xb800fffc,data-len=4 -device loader,file=pmc_cdo.0.0.bin,addr=0xf2000000 -device loader,file=BOOT_bh.bin,addr=0xf201e000,force-raw=on -device loader,file=plm.elf -hw-dtb board-versal-pmc-virt.dtb -machine-path /tmp/tmp_dir -device loader,addr=0xF1110624,data=0x0,data-len=4 -device loader,addr=0xF1110620,data=0x1,data-len=4'qemu-system-microblazeel -M microblaze-fdt -serial mon:stdio -display none -device loader,addr=0xf0000000,data=0xba020004,data-len=4 -device loader,addr=0xf0000004,data=0xb800fffc,data-len=4 -device loader,file=pmc_cdo.0.0.bin,addr=0xf2000000 -device loader,file=BOOT_bh.bin,addr=0xf201e000,force-raw=on -device loader,file=plm.elf -hw-dtb board-versal-pmc-virt.dtb -machine-path /tmp/tmp_dir -device loader,addr=0xF1110624,data=0x0,data-len=4 -device loader,addr=0xF1110620,data=0x1,data-len=4
此時需要一些文件??梢允褂?HSI 從 Vivado 導出的 XSA 中提取 PLM 文件:

這樣會提取 PDI 以及一個解壓后的文件夾,其中包含以上使用的 plm.elf 文件。
使用以下命令從 PDI 解壓 pmc_cdo.0.0.bin 文件:

QEMU 目前不支持從 JTAG 啟動。在本博客中,將從 SD 啟動。因此,需要生成 SD 卡啟動鏡像與啟動頭文件。要生成 qemu_sd.img 和 BOOT_bh.bin,首先需要生成包含 PDI 的 BOOT.BIN。
為此,可以生成如下 BIF 文件:

然后,只需在此文件上運行 Bootgen 以生成 BOOT.BIN 即可:

下一步,創(chuàng)建 QEMU 鏡像文件 (qemu_sd.img) 并將 BOOT.BIN 添加到此鏡像中。最后,生成啟動頭文件 (BOOT_bh.bin)。

啟動 QEMU + 協同仿真
生成 Linux 腳本以調用上述 QEMU Multi Proc 實參。例如:

使用 Makefile 啟動 QEMU + 協同仿真。使用 tmp 目錄充當 TLM 的共享目錄。需使用環(huán)境變量 COSIM_MACHINE_PATH 將此目錄傳遞給 Vivado 仿真器。

注釋:xsim 路徑將根據您的工程而定。
文件夾結構如下,為便于使用,已將所有文件置于單個文件夾內。

要啟動 QEMU + 協同仿真,運行以下命令:

可以看到,一切都按期望方式啟動。

要終止 QEMU,請運行以下命令:

后續(xù)內容
在下一篇“開發(fā)者分享”中,我們將介紹如何在 Vitis 中連接到該 QEMU + 協同仿真,并構建和部署用戶應用。
-
amd
+關注
關注
25文章
5703瀏覽量
140371 -
soc
+關注
關注
40文章
4619瀏覽量
230065 -
仿真
+關注
關注
55文章
4531瀏覽量
138642 -
開發(fā)板
+關注
關注
26文章
6398瀏覽量
120490
原文標題:開發(fā)者分享|在 AMD Versal? 自適應 SoC 上使用簡單的 QEMU + 協同仿真示例
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發(fā)者社區(qū)】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
如何在AMD Vitis Unified 2024.2中連接到QEMU
使用Aurora 6466b協議實現AMD UltraScale+ FPGA與AMD Versal自適應SoC的對接
【ALINX 技術分享】AMD Versal AI Edge 自適應計算加速平臺之 Versal 介紹(2)
AMD Versal自適應SoC中eMMC燒錄/啟動調試檢查表(上)
AMD Versal自適應SoC內置自校準的工作原理
Versal自適應SoC系統(tǒng)集成和 確認方法指南
AMD率先推出符合DisplayPort? 2.1 8K視頻標準的FPGA和自適應SoC
AMD發(fā)布第二代Versal自適應SoC,AI嵌入式領域再提速
AMD Versal? Adaptive SoC CPM PCIE PIO EP設計CED示例
AMD Versal自適應SoC CPM5 QDMA的Tandem PCIe啟動流程介紹
AMD Versal自適應SoC器件Advanced Flow概覽(上)
AMD Versal自適應SoC器件Advanced Flow概覽(下)
在AMD Versal自適應SoC上使用QEMU+協同仿真示例
評論