在 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文章
19799瀏覽量
233463 -
嵌入式
+關注
關注
5138文章
19524瀏覽量
314692 -
Xilinx
+關注
關注
73文章
2181瀏覽量
124314 -
應用程序
+關注
關注
38文章
3322瀏覽量
58698 -
Vitis
+關注
關注
0文章
147瀏覽量
7818
原文標題:在 X86 處理器上跑嵌入式應用程序的 Software Emulation
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
國產X86處理器與國際CPU有多大差距?有人做了個測試
AMD x86核心SoC搶攻嵌入式應用市場
arm還是x86?未來在工業SBC數字誰可以脫穎而出
適用于x86架構的快速啟動步驟是什么?
μCOS-III怎么在Cortex-M3處理器上移植?
基于嵌入式X86的數控系統的設計與實現
英特爾:Core Duo進軍x86嵌入式平臺市場
獲Zen架構授權,國產X86處理器即將問世
全球首款集成AI協處理器的x86處理器實照公布 采用LGA觸點式封裝方式
什么是x86嵌入式工控主板,x86嵌入式主板該如何選擇
x86處理器如何處理MSI-X中斷請求

評論