微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > FPGA和CPLD > 在 Zynq MPSoC上运行 Doom 游戏

在 Zynq MPSoC上运行 Doom 游戏

时间:08-02 来源:互联网 点击:
理论结合实践

ARM 创建处理器设计,供 ARM 合作伙伴构建芯片用。ARM 处理器包含一个或多个内核。每个内核实现一个 ARM 架构。例如,Zynq UltraScale+ MPSoC 包含一个 ARM Cortex-A53 处理器及四个 ARMv8-A 物理内核(图 3)。

当查看 ARM 处理器的文档和代码时,这种区别很重要;为了全面理解具有一个 ARM 内核的“芯片”,可参考有关架构

(如 ARMv8-A)和处理器(如 Cortex-A53)的文档。

ARMv8 架构中有四个例外等级(来源:ARM 架构参考手册,D1-1404):
1.    例外等级 0 (EL0),无需特权即可执行;
2.    例外等级 1 (EL1),执行 OS 以及任何执行特权指令的内容;
3.    例外等级 2 (EL2),允许硬件被虚拟化;以及
4.    例外等级 3 (EL3),允许在安全与非安全处理器状态之间切换。

以下程序通常在这些模式下运行,如ARM 架构参考手册 (D1–1404)中所述:EL0,应用程序;EL1,OS 内核以及通常所描述的相关特权函数;EL2,管理程序;EL3,安全监控器。我们的理论实例直接对应 ARMv8 执行模式 EL0 至 EL2:USER 对应 EL0,SUPER 对应 EL1,HYPER 对应 EL2。ARM 添加第四个特权等级,即 EL3;利用这个特权等级,我们可在安全与非安全环境之间切换 EL0 和 EL1。尽管 EL3 的使用是一个很重要的论题,能够为架构增加大量的功能,但是在本实例中我们将其忽略,并着重介绍 EL0-EL2(利用管理程序的虚拟化)。如果对计算机如何保护金融交易感兴趣,可以参阅 ARMv8 EL3 文档(免费提供,需注册)。这是非常好的参考文档,从中可以获得极为详细的介绍。


图 2 — 各种模式如环形所示

进入和退出例外模式

在真实系统中,模式之间的切换比我们的实例更复杂一些。ARM 总结了 ARMv8-A 架构的行为并在参考

手册中给出。手册中介绍,只有在接到例外或从例外返回时,才能改变执行所处的例外等级。在接到例外时,例外等级只能升高或保持不变;在从例外返回时,例外等级只能降低或保持不变。只有三个指令能生成针对下个例外等级的例外:SVC (Supervisor Call),生成针对 EL1 的例外;HVC (Hypervisor Call),生成针对 EL2 的例外;SMC (Secure Monitor Call),生成针对 EL3 的例外。这些指令取值范围为 0-65,555,允许每个例外等级有 216 个系统调用。这些指令针对下个例外等级,而且是唯一可供运行在较低例外等级的程序从运行在较高例外等级的程序请求某些内容的机制。在我们的理论实例中,SVC 是 SWITCHSUPER,HVC 是 SWITCHHYPER。


图 3 — Zynq UltraScale+ MPSoC

在前一个部分,我们介绍了能够让运行在 USER 模式(EL0)的程序进入 SUPER 模式 (EL1) 的事件。大多数运行在 USER 模式的程序生成的事件是请求存储器。当运行在 EL0 中的用户空间程序从运行在 EL1 中的 OS 请求存储器时,这个用户空间程序的 C 代码可能调用函数 malloc(),再由该函数调用 mmap() 或 sbrk(),以从 OS 请求一个指向可用存储器的指针。在 ARMv8-A 架构中的 Linux 上,这个过程在幕后转化为 SVC 系统调用。该系统调用会把处理器转换为 EL1,从而将控制权送回 OS,后者会解读调用内容并提供正确的响应——本例中是指向所请求存储器区域的指针,或者是一个错误,用以指出没有可用存储器。

演示创建和工具

现在我们来介绍我们团队在 Zynq UltraScale+ QEMU Model 上运行 Doom 时所采用的步骤。这些步骤展示了如何获得和构建运行演示所需的每个组件,如何运行以及以什么顺序运行每个组件,以及如何与演示交互。成功完成该演示之后,你会获得一个环境,用来在上面进行实验,以了解 Xen 管理程序在仿真的 Zynq UltraScale+ MPSoC 上的运行情况。还需要将此迁移植 Zynq UltraScale+ MPSoC 芯片,这可作为练习由用户来完成。

为了让过程更简单,赛灵思提供基础的根文件系统,这样用户就无需花时间和精力自己构建。此演示所需的所有下载内容在以下网址中均有提供:www.wiki.xil- inx.com/Doom+on+Xen+Demo.

该演示首先通过更新由赛灵思提供的预编译根文件系统 (rootFS),可包含所需的组件。然后,利用赛灵思的 PetaLinux 工具运行演示。rootFS 包含运行于 Linux 系统上的大部分程序——具体来说就是用来启动系统的一组脚本,以及用来实现系统的应用程序与函数库集。我们用来扩展演示中的基础 rootFS所使用的两个工具分别是 Buildroot 和 PetaLinux。我们使用 Buildroot 为赛灵思提供的基础 rootFS 构建 Doom 二进制文件,同时使用 PetaLinux 创建 rootFS 的剩余部分并引导演示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top