在任意設計流程中,仿真都是不可或缺的關鍵組成部分。它允許用戶在無任何物理硬件的情況下對硬件系統(tǒng)進行確認。這篇簡短的博客將介紹如何使用 QEMU + 協(xié)同仿真來對 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 + 協(xié)同仿真腳本中將啟動這些仿真腳本。

這樣會在 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 + 協(xié)同仿真
生成 Linux 腳本以調用上述 QEMU Multi Proc 實參。例如:

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

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

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

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

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

后續(xù)內容
在下一篇“開發(fā)者分享”中,我們將介紹如何在 Vitis 中連接到該 QEMU + 協(xié)同仿真,并構建和部署用戶應用。
-
amd
+關注
關注
25文章
5682瀏覽量
139923 -
soc
+關注
關注
40文章
4574瀏覽量
229085 -
仿真
+關注
關注
54文章
4480瀏覽量
138221 -
開發(fā)板
+關注
關注
26文章
6288瀏覽量
118010
原文標題:開發(fā)者分享|在 AMD Versal? 自適應 SoC 上使用簡單的 QEMU + 協(xié)同仿真示例
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發(fā)者社區(qū)】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
如何在AMD Vitis Unified 2024.2中連接到QEMU
使用Aurora 6466b協(xié)議實現(xiàn)AMD UltraScale+ FPGA與AMD Versal自適應SoC的對接
【ALINX 技術分享】AMD Versal AI Edge 自適應計算加速平臺之 Versal 介紹(2)
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 GTM如何用XSIM仿真和觀察PAM4信號
AMD Versal自適應SoC器件Advanced Flow概覽(上)
AMD Versal自適應SoC器件Advanced Flow概覽(下)
在AMD Versal自適應SoC上使用QEMU+協(xié)同仿真示例
評論