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