Qemu Co-simulation

本文将展示如何使用qemu+systemC来完成IP的simulation,复用已有的高级语言实现的benchmark来剖析IP的性能。

qemu-simulaton-uart

图1 verilog-uart的Qemu co-simulation

qemu-simulaton-ethernet

图2 verilog-ethernet的Qemu co-simulation

mult-process-qemu

图3 Multi-Process Qemu的协同仿真

Qemu inside VirtualBox

qemu-network-inside-virtualbox

图4 在VirtualBox环境下QEMU网络配置

三个OS

  • Host OS: Windows 11
  • VirtualBox Guest OS: Ubuntu 20.04 x86_64
  • Qemu AArch64 OS: AArch64 Embedded OS

环境

在PC物理机上面安装Windows Host OS,在Windows里面安装VirtualBox软件,通过VirtualBox提供一个虚拟机环境,在此环境中安装一个Ubuntu 20.04 Guest OS,然后我们进入Ubuntu操作系统内下运行qemu-system-aarch64软件,通过Qemu再提供一个虚拟机环境, 在这个Qemu提供的VM环境中,我们运行AArch64 Linux OS。这样就得到一个虚拟机里面再嵌套一个虚拟机的环境(VM inside VM)

Physical Host OS
    Ubuntu Guest OS
        Qemu AArch64 OS

网络

  • 关注Ubuntu Guest OS和Windows Host OS之间的网络通路
    通过NAT技术将Ubuntu OS里面的网络报文传递给Host OS,在Ubuntu的环境中我们可以直接ping到Host OS网络和外部网络。也就是说,在Ubuntu环境下我们可以访问Host OS提供的网络服务和外部网络服务,但是在Host OS环境下,我们不能直接通过NAT技术ping到Ubuntu OS网络,只能通过VirtualBox提供的Host-only network访问Ubuntu OS里面提供的服务。

  • 关注QEMU AArch64 OS和Ubuntu Guest OS之间的网络通路
    通过TAP桥接的方式将Qemu OS里面的网络报文传递给Ubuntu OS,在Qemu OS里面可以直接ping到Ubuntu OS网络,在Ubuntu OS里面也可以直接ping到Qemu OS网络。也就是说,在QEMU OS里面我们可以直接访问Ubuntu OS提供的服务,在Ubuntu OS里面也可以直接访问Qemu OS提供的服务,相当于Qemu OS和Ubuntu OS以直连的方式进行通信。

  • 关注QEMU AArch64 OS和Windows Host OS之间的网络通路
    不能直接ping,也就是说,我们在Qemu AArch64 OS里面不能直接ping到Host OS网络和外部网络,这时候需要借助Ubuntu里面安装的tinyporxy代理将Qemu OS里面发出的网络报文转发到Host OS和外部网络,这样Qemu OS才能访问到Host OS和外部网络提供的服务