<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > 用ZYNQ MPSoC玩DOOM

用ZYNQ MPSoC玩DOOM

作者: 時(shí)間:2018-08-08 來(lái)源:網(wǎng)絡(luò ) 收藏

賽靈思和 DornerWorks 的系統軟件團隊在賽靈思的 Zynq® Ultrascale+™ MPSoC 上啟動(dòng) Xen Project 管理程序時(shí),我們發(fā)現可通過(guò)運行當年叱詫一時(shí)的流行電子游戲 Doom 來(lái)演示和測試系統。

本文引用地址:http://dyxdggzs.com/article/201808/385964.htm

神馬?!你不知道 DOOM??(CS 你總知道吧 -__-||)

如何針對 Zynq UltraScale+ MPSoC 通過(guò) QEMU 在 Xen 上運行 Doom 呢,在詳細介紹具體步驟之前,我們先來(lái)了解什么是管理程序,以及它們如何與 Zynq UltraScale+ MPSoC 上的處理器協(xié)同工作。

管理程序及其工作原理

管理程序是一種可虛擬化處理器的計算機程序。運行在虛擬化處理器上的應用程序和操作系統似乎完全擁有系統,但事實(shí)上管理程序負責管理虛擬處理器對物理機資源(例如存儲器和處理內核)的訪(fǎng)問(wèn)。管理程序之所以流行,是因為能實(shí)現設計分區以及系統上運行的獨立軟件元素之間的隔離。

為了支持虛擬化,物理處理器必須提供一個(gè)供管理程序運行的特殊”模式”。因此,介紹處理器模式有助于理解管理程序如何完成處理器魔法。

所有處理器都有一些指令,這些指令可操作寄存器中存儲的值,并可讀寫(xiě)存儲器。處理器的模式是指令和寄存器的集合,以及利用指令訪(fǎng)問(wèn)寄存器和存儲器時(shí)要遵守的規則。為了便于解釋?zhuān)覀円酝ㄓ锰幚砥鳛槔齺?lái)介紹,并使用與結構無(wú)關(guān)的術(shù)語(yǔ)。在這個(gè)實(shí)例中,處理器具有特定的寄存器、指令和模式。寄存器包括 RegisterA、RegisterB、RegisterC、UserProgramCounter、Register-Super 和 SuperProgramCounter。指令包括以下內容。

· ADD Register3 Register1 Register2 將 Register1 與 Register2 相加,并把結果存入 Register3,即 Register3 = Register1 + Register2。

· MOVTO Register2 Register1 將 Register1 中地址所指向的存儲器內容移動(dòng)到 Register2。

· MOVFROM Register2 Register1 將 Register1 的內容移動(dòng)到 Register2 中地址所指向的存儲器。

· ENTERSUPER 進(jìn)入處理器的 SUPER 模式。

· EXITSUPER 退出 SUPER 模式并進(jìn)入 USER 模式。

在 USER 模式下,處理器的指令的功能受到限制。本例中,指令可對除 RegisterSuper 和 SuperProgramCounter 以外的所有寄存器進(jìn)行讀和寫(xiě)操作,處理器可執行除 EXITSUPER 以外的所有指令。

此外,在 USER 模式下,所有指令只能讀和寫(xiě)一部分存儲器,例如從地址 0x0000_0100 到 0x0FFF_FFFF。在 USER 模式下,如果程序嘗試執行不應該執行的指令,或者訪(fǎng)問(wèn)無(wú)權訪(fǎng)問(wèn)的寄存器或存儲器位置,那么處理器將暫停出錯指令 (offending instruction)。

SUPER 模式下,處理器的指令可以讀/寫(xiě)上述所有寄存器,包括 RegisterSuper 和 SuperProgramCounter。以上所列的所有指令,包括 EXITSUPER,都可以執行,另外,附加的指令 ENTERHYPER 也可執行(后面詳細介紹該指令)。此外,在 SUPER 模式下,指令可以訪(fǎng)問(wèn)系統中的全部存儲器(從 0x0000_0000 到 0x7FFF_ FFFF)。

采用帶模式的處理器,使我們可以利用設計分區來(lái)更簡(jiǎn)單地解決軟件工程設計問(wèn)題。以上實(shí)例中,只有一種方法進(jìn)入 SUPER 模式:執行 ENTERSUPER 指令。同樣,只有一種方法退出 SUPER 模式:執行 EXITSUPER。此外,在 USER 模式下程序只能訪(fǎng)問(wèn)機器的部分存儲器。有了這種方案,我們可編寫(xiě)一個(gè)程序讓處理器同時(shí)運行多個(gè) USER 模式程序。這個(gè)”操作系統”(OS) 程序運行在 SUPER 模式,并管理在 USER 模式中運行的程序。

當 OS 運行時(shí),會(huì )查看需要運行的所有 USER 模式程序,選擇一個(gè)運行,然后使用 EXITSUPER 這樣的指令通知處理器切換到 USER 模式以運行程序。所選的程序會(huì )一直運行,直到有事件導致處理器切回 SUPER 模式。這類(lèi)事件可以是來(lái)自 USER 模式程序的 ENTERSUPER 指令,或外部事件,例如定時(shí)器,它可以不提醒正在 USER 模式下運行的程序將處理器切換到 SUPER 模式。無(wú)論切換如何發(fā)生,每當事件發(fā)生時(shí),我們都可構建 OS 以根據相應策略相繼選擇和運行程序。當切換快速進(jìn)行時(shí),用戶(hù)認為 USER 程序同時(shí)運行。

USER HYPER 模式的用處是讓很多 SUPER 程序運行。SUPER 模式下的每個(gè)程序都可以是 OS;這些 OS 本身會(huì )讓很多 USER 程序并行運行。

SUPER 處理器模式還能防止 USER 程序干擾運行在 SUPER 模式的程序或其他 USER 模式程序。USER 模式程序的任何錯誤或違規都可被控制在該程序自身的實(shí)例中,不會(huì )破壞或干擾為 SUPER 模式操作保留的系統存儲器和寄存器。

聽(tīng)起來(lái)很好,但能否用另一個(gè)模式實(shí)現一些功能?

對我們的機器稍加擴展,就可以引入 HYPER 模式。HYPER 模式可以讀/寫(xiě)所有初始寄存器(RegisterA、RegisterB、RegisterC、UserProgramCounter、RegisterSuper 和 SuperProgramCounter)以及兩個(gè)附加寄存器:RegisterHyper 和 HyperProgramCounter。HYPER 模式下的指令包括初始集以及下面的斜體字。

ADD Register3 Register1 Register2 將 Register1 與 Register2 相加并把結果放在 Register3 中,即 Register3 = Register1 + Register2。

· MOVTO Register2 Register1 將 Register1 中地址所指向的存儲器內容移到 Register2。

· MOVFROM Register2 Register1 將 Register1 的內容移到 Register2 中地址所指向的存儲器。

· MOVTOPHYS Register2 Register1 將 Register1 中物理地址指向的存儲器內容移到 Register2。

· MOVFROMPHYS Register2 Register1 將 Register1 的內容移到 Register2 中地址指向的物理存儲器。

· ENTERSUPER 進(jìn)入處理器的 SUPER 模式。

· EXITSUPER 退出 SUPER 模式并進(jìn)入 USER 模式。

· ENTERHYPER 進(jìn)入處理器的 HYPER 模式。

· EXITHYPER 退出處理器的 HYPER 模式。

· SWITCHSUPER RegisterHyper 切換到 SUPER 程序,該程序將使用 RegisterHyper 中的值來(lái)執行下一個(gè) SUPER 程序。

HYPER 模式中的附加指令和寄存器允許處理器切換哪個(gè)程序在 SUPER 模式中運行,就像 SUPER 模式允許處理器切換哪個(gè)程序在 USER 模式中運行一樣。HYPER 模式的一個(gè)特性是能夠切換哪個(gè)存儲器 SUPER 模式能看到;當一個(gè)在 HYPER 模式中運行的程序執行 SWITCHSUPER RegisterHyper 時(shí),底層存儲器完全斷開(kāi)。這就是說(shuō)當 HYPER 模式中的程序執行了 EXITHYPER 之后,下個(gè) SUPER 程序運行之時(shí),SUPER 模式看到的實(shí)際物理存儲器與運行在 SUPER 模式中的另一個(gè)程序使用的物理存儲器不同。SUPER 模式程序仍使用相同地址訪(fǎng)問(wèn)存儲器,但是該地址指向不同的物理位置。圖 1 顯示了執行 SWITCHSUPER RegisterHyper 前后的處理器存儲器視圖。

HYPER 模式很有用,是因為它允許很多個(gè) SUPER 程序運行。SUPER 模式中每個(gè)程序都可以是 OS;這些 OS 本身可以讓很多 USER 程序并列運行.這意味著(zhù),我們可以在相同硬件上運行多個(gè) OS,例如 Windows 和 Linux;在一個(gè)處理器上運行 20 個(gè) Linux 實(shí)例;或者之間的任意組合。由于每個(gè)虛擬 OS 實(shí)例無(wú)法看到另一個(gè) OS 實(shí)例,因此如果一個(gè)崩潰,不會(huì )使另一個(gè)實(shí)例也崩潰。HYPER 模式的特性還有其他應用:我們可以在多個(gè) OS 之間對系統資源分區;監測 HYPER 模式下每個(gè) OS 的執行,以在崩潰時(shí)重啟;以及在虛擬 OS 運行時(shí)密切關(guān)注系統狀態(tài)。

圖 1:HYPER 模式下執行 SWITCHSUPER RegisterHyper 的前后區別

隨著(zhù)處理器從 USER 切換到 SUPER 模式,再從 SUPER 切換到 HYPER 模式,機器會(huì )賦予執行代碼更多特權。本例中,USER 模式程序只有權使用四個(gè)寄存器(RegisterA、RegisterB、RegisterC 和 UserProgramCounter)和四個(gè)指令:(ADD、MOVTO、MOVFROM和ENTER-SUPER)。此外,USER 程序只能讀寫(xiě) 0x0000_0100 至 0x0FFF_ FFFF 的存儲器。一旦進(jìn)入 SUPER 模式,處理器允許指令與 RegisterSuper 和 SuperProgramCounter 對話(huà),并允許執行 EXITSUPER 和 ENTERHYPER。此外,SUPER 程序可以訪(fǎng)問(wèn)從 0x0000_0000 至 0x7FFF_FFFF 的存儲器。

最后,一旦處理器進(jìn)入 HYPER 模式,其指令就可以操作 RegisterHyper 和 HyperProgramCounter,而且程序可執行 SWITCH-SUPER 和 EXITHYPER。

圖 2:各種模式如環(huán)形所示

HYPER 模式還允許處理器讀寫(xiě)所有虛擬存儲器,0x0000_0000 至 0xFFFF_FFFF,以及讀寫(xiě)實(shí)際物理存儲器。這些特權等級通常被直觀(guān)地用環(huán)形來(lái)描述(圖 2)。主環(huán),即 HYPER 環(huán)為特權等級較低的環(huán)賦予權限,最終可控制整個(gè)系統。

理論結合實(shí)踐

ARM® 創(chuàng )建處理器設計,供 ARM 合作伙伴構建芯片用。ARM 處理器包含一個(gè)或多個(gè)內核。每個(gè)內核實(shí)現一個(gè) ARM 架構。例如,Zynq UltraScale+ MPSoC 包含一個(gè) ARM Cortex™-A53 處理器及四個(gè) ARMv8-A 物理內核(圖 3)。

當查看 ARM 處理器的文檔和代碼時(shí),這種區別很重要;為了全面理解具有一個(gè) ARM 內核的”芯片”,可參考有關(guān)架構 (如 ARMv8-A) 和處理器 (如 Cortex-A53) 的文檔。ARMv8 架構中有四個(gè)例外等級 (來(lái)源:ARM 架構參考手冊,D1-1404):

1、例外等級 0 (EL0),無(wú)需特權即可執行;

2、例外等級 1 (EL1),執行 OS 以及任何執行特權指令的內容;

3、例外等級 2 (EL2),允許硬件被虛擬化;以及

4、例外等級 3 (EL3),允許在安全與非安全處理器狀態(tài)之間切換。

以下程序通常在這些模式下運行,如ARM 架構參考手冊 (D1–1404)中所述:EL0,應用程序;EL1,OS 內核以及通常所描述的相關(guān)特權函數;EL2,管理程序;EL3,安全監控器。我們的理論實(shí)例直接對應 ARMv8 執行模式 EL0 至 EL2:USER 對應 EL0,SUPER 對應 EL1,HYPER 對應 EL2。ARM 添加第四個(gè)特權等級,即 EL3;利用這個(gè)特權等級,我們可在安全與非安全環(huán)境之間切換 EL0 和 EL1。盡管 EL3 的使用是一個(gè)很重要的論題,能夠為架構增加大量的功能,但是在本實(shí)例中我們將其忽略,并著(zhù)重介紹 EL0-EL2(利用管理程序的虛擬化)。如果對計算機如何保護金融交易感興趣,可以參閱 ARMv8 EL3 文檔(免費提供,需注冊)。這是非常好的參考文檔,從中可以獲得極為詳細的介紹。

圖 3:Zynq UltraScale+ MPSoC 架構

進(jìn)入和退出例外模式

在真實(shí)系統中,模式之間的切換比我們的實(shí)例更復雜一些。ARM 總結了 ARMv8-A 架構的行為并在參考手冊中給出。手冊中介紹,只有在接到例外或從例外返回時(shí),才能改變執行所處的例外等級。在接到例外時(shí),例外等級只能升高或保持不變;在從例外返回時(shí),例外等級只能降低或保持不變。只有三個(gè)指令能生成針對下個(gè)例外等級的例外:SVC (Supervisor Call),生成針對 EL1 的例外;HVC (Hypervisor Call),生成針對 EL2 的例外;SMC (Secure Monitor Call),生成針對 EL3 的例外。這些指令取值范圍為 0-65,555,允許每個(gè)例外等級有 216 個(gè)系統調用。這些指令針對下個(gè)例外等級,而且是唯一可供運行在較低例外等級的程序從運行在較高例外等級的程序請求某些內容的機制。在我們的理論實(shí)例中,SVC 是 SWITCHSUPER,HVC 是 SWITCHHYPER。

PetaLinux 工具包含一組命令,以供用戶(hù)在賽靈思 FPGA 和 SoC 上輕松創(chuàng )建和擴展 Linux 系統。

在前一個(gè)部分,我們介紹了能夠讓運行在 USER 模式(EL0)的程序進(jìn)入 SUPER 模式 (EL1) 的事件。大多數運行在 USER 模式的程序生成的事件是請求存儲器。當運行在 EL0 中的用戶(hù)空間程序從運行在 EL1 中的 OS 請求存儲器時(shí),這個(gè)用戶(hù)空間程序的 C 代碼可能調用函數 malloc(),再由該函數調用 mmap() 或 sbrk(),以從 OS 請求一個(gè)指向可用存儲器的指針。在 ARMv8-A 架構中的 Linux 上,這個(gè)過(guò)程在幕后轉化為 SVC 系統調用。該系統調用會(huì )把處理器轉換為 EL1,從而將控制權送回 OS,后者會(huì )解讀調用內容并提供正確的響應——本例中是指向所請求存儲器區域的指針,或者是一個(gè)錯誤,用以指出沒(méi)有可用存儲器。

演示創(chuàng )建和工具

現在我們來(lái)介紹我們團隊在 Zynq UltraScale+ QEMU Model 上運行 Doom 時(shí)所采用的步驟。這些步驟展示了如何獲得和構建運行演示所需的每個(gè)組件,如何運行以及以什么順序運行每個(gè)組件,以及如何與演示交互。成功完成該演示之后,你會(huì )獲得一個(gè)環(huán)境,用來(lái)在上面進(jìn)行實(shí)驗,以了解 Xen 管理程序在仿真的 Zynq UltraScale+ MPSoC 上的運行情況。還需要將此遷移植 Zynq UltraScale+ MPSoC 芯片,這可作為練習由用戶(hù)來(lái)完成。

想玩 DOOM 嗎?

為了讓過(guò)程更簡(jiǎn)單,賽靈思提供基礎的根文件系統,這樣用戶(hù)就無(wú)需花時(shí)間和精力自己構建。此演示所需的所有下載內容在以下網(wǎng)址中均有提供: www.wiki.xil- inx.com/Doom+on+Xen+Demo。

該演示首先通過(guò)更新由賽靈思提供的預編譯根文件系統 (rootFS),可包含所需的組件。然后,利用賽靈思的 PetaLinux 工具運行演示。rootFS 包含運行于 Linux 系統上的大部分程序——具體來(lái)說(shuō)就是用來(lái)啟動(dòng)系統的一組腳本,以及用來(lái)實(shí)現系統的應用程序與函數庫集。我們用來(lái)擴展演示中的基礎 rootFS 所使用的兩個(gè)工具分別是 Buildroot 和 PetaLinux。我們使用 Buildroot 為賽靈思提供的基礎 rootFS 構建 Doom 二進(jìn)制文件,同時(shí)使用 PetaLinux 創(chuàng )建 rootFS 的剩余部分并引導演示。

Buildroot

Buildroot 是一個(gè)簡(jiǎn)單的構建系統,用于為 Linux 系統創(chuàng )建 rootFS。它使用 make menuconfig 接口,這是一個(gè)用來(lái)配置 Linux 內核本身的常用方法。Buildroot 包含對 PrBoom 的默認支持,這對于本演示很有幫助。(PrBoom 是我們所使用的 Doom 游戲的 GNU 通用公共許可證 [GPL] 版本。這里我們會(huì )穿插使用 PrBoom 和 Doom 這兩個(gè)術(shù)語(yǔ)。 )Buildroot 對 Xen 構建不提供本地支持(盡管它可創(chuàng )建用于構建 Xen 所需的所有庫和工具鏈),因此賽靈思提供 Xen、Xen 工具和為用戶(hù)預編譯的 Xen 庫以及其他一些所需的庫,以讓過(guò)程簡(jiǎn)單直觀(guān)。

PetaLinux

PetaLinux 工具包含一個(gè)命令集,以便讓用戶(hù)在賽靈思 FPGA 和 SoC 上輕松創(chuàng )建和擴展 Linux 系統。該演示使用 petalinux-build 和 petalinux-boot 命令。petalinux-build 命令用于創(chuàng )建全部所需的組件。petalinux-boot 命令(外加幾個(gè)變量)用于啟動(dòng)在 QEMU 仿真器上運行的所有組件。介紹 PetaLinux 工具中的所有命令超出了本文的范圍,但是通過(guò)此演示系統應該很容易發(fā)掘這兩個(gè)命令和其他命令的功能。參考PetaLinux 工具文檔 — 參考指南 UG1144 (v2015.4) 了解更多信息。

項目先決條件

該項目需要一個(gè)運行 Linux 的工作站或虛擬機,具有滿(mǎn)足 UG1144 (v2015.4) 中所列的 PetaLinux 工具安裝要求的環(huán)境,而且環(huán)境中需要安裝賽靈思 PetaLinux Tools v2015.4 版本。

一旦 Doom 啟動(dòng),你就可以使用鍵盤(pán)和鼠標控制游戲。應記住,可能需要點(diǎn)擊 ESC 鍵來(lái)開(kāi)始游戲。開(kāi)始游戲咯!

步驟 1:構建 ROOTFS

首先,我們需要構建 rootFS。從賽靈思下載 doom_demo.tar.gz,打開(kāi)下載目錄中的一個(gè) terminal;你可在以下網(wǎng)址中找到全部所需文件: www.wiki.xilinx.com/Doom+on+Xen+Demo。我們將該目錄稱(chēng)為 。

解壓文檔。

$ cd

$ tar -xzf doom_demo.tar.gz cd doom_demo

我們會(huì )看到一個(gè)文件夾,我們將把它存到根文件系統(一個(gè)用于 Dom0,另一個(gè)用于 DomU)?,F在,我們需要構建 PrBoom,并復制到 rootFS。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 嵌入式

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>