在X86处理器上跑嵌入式应用程序的Software Emulation

本文作者:amd 工程师 garce sun
在 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


泰克推出首款面向MIPI M-PHY 3.1的测试解决方案
中微爱芯8位低功耗LCD型MCU AiP9P262L/AiP9P263L介绍
获得2MHz开关频率的四种设计技巧
VR直播加速风靡 市场成熟度不断提高
彩电市场一直跌 属于中国彩电产业的大屏化浪潮或将到来
在X86处理器上跑嵌入式应用程序的Software Emulation
AI改变了世界,也改变了科大讯飞,13个交易日后股价上涨33.5%
煤矿安全监控系统的结构组成及功能实现
准备好迎接TI BAW 技术了吗?
解码思维,让瘫痪患者重获运动能力
自制负离子空气清新器,Ionic Air Purifier
电脑USB 3.0根集线器驱动无法使用的原因
解析ARM到底是一家什么样的公司?
【直播预告】第二届物联网线上技术论坛
嵌入式DTU在共享按摩椅系统中应用
中国电信主导提出C-RAN,解决共享5G建设
2021年双十一有哪些运动蓝牙耳机值得买?运动蓝牙耳机推荐
区块链产品溯源是什么
什么是接地电阻 接地电阻测试仪使用方法
bootloader启动过程