在 Vitis 流程中,編譯的目標分為軟件仿真(software emultion),硬件仿真(hardware emulation)以及硬件(hardware)。
軟件仿真是通過用戶創建的自定義主機代碼測試系統的第一步,主要目標是確保主機程序和內核的功能正確性。其中,內核代碼始終在本機編譯和運行。應用程序代碼根據平臺的不同,編譯方式為:
? 在 x86 處理器上本地編譯和運行(數據中心平臺)
? 交叉編譯到 Arm 處理器并在仿真器中運行(嵌入式平臺)
軟件仿真通常用于改進算法、調試功能問題,并讓開發人員快速迭代代碼以進行改進。軟件仿真是一個抽象模型,不使用任何 petalinux 驅動程序,如 Zynq OpenCL (ZOCL)、中斷控制器或設備樹二進制文件 (DTB)。 對于嵌入式平臺來說,軟件仿真創建 sd_card.img、在完整 QEMU 機器上啟動 petalinux 的開銷太重。
為了避免這部分開銷,提高軟件仿真運行效率,我們可以使用 x86 GCC(而不是 ARM-GCC)編譯相同的嵌入式應用程序,從而實現在 x86 處理器上跑嵌入式應用程序的軟件仿真。對于這種方法,用戶不需要提供諸如 sysroot、rootfs 和 sd_card Image 等字段,從而能啟用更快的軟件仿真。
總的來說,與 QEMU 做軟件仿真相比,編譯過程中涉及到以下改動:
用戶需要在 host 安裝 XRT,不需要 Petalinux/SYSROOT。
關于 XRT 的安裝指導,請參考 UG1393 的相關章節內容
用 x86 的 GCC 編譯器而不是 ARM GCC 來編譯 host 代碼。
在 2023.1 Vitis 版本中,x86 編譯需要 GCC 8.3 或更高版本。
v++ -package 以及啟動仿真的流程不盡相同。
下表描述了在 QEMU 下和在 x86 上運行軟件仿真時,構建 PS 應用程序和.xclbin 的差異。
對于包含 AIE 的設計,基于上表的選項有所調整,請參考以下表格:
以上對比適用于 Vitis 2023.1,不同版本的命令行選項可能會有改動。
比如,2022.1 里的 v++ package 選項--package.ps_on_x86 在新版本替換成了—package.emu_ps x86/qemu。
對于嵌入式應用程序運行 x86 編譯也有局限性,主要表現為主機代碼不支持 ARM-only 的數據類型或庫。
以下是使用 _fp16數據類型的主機代碼示例,該數據類型僅在基于 ARM-GCC 的編譯器中受支持,x86 編譯器在編譯相同的主機代碼時會出錯。
在這種情況下,建議使用 PS 的 QEMU 模型,并使用基于 ARM-GCC 的編譯器來編譯 PS 應用程序。
另外,目前并不支持從 Vitis GUI 啟動 PS on x86 的仿真模式,需要從命令行完成。
GitHub 上有使用此功能運行軟件仿真的示例供參考:
https://github.com/Xilinx/Vitis_Accel_Examples/tree/2023.1/emulation/aie_adder_hybrid_swemu
審核編輯:湯梓紅
-
處理器
+關注
關注
68文章
18907瀏覽量
227160 -
嵌入式
+關注
關注
5044文章
18805瀏覽量
298374 -
Xilinx
+關注
關注
70文章
2136瀏覽量
120362 -
應用程序
+關注
關注
37文章
3195瀏覽量
57351 -
Vitis
+關注
關注
0文章
145瀏覽量
7310
原文標題:在 X86 處理器上跑嵌入式應用程序的 Software Emulation
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論