摘要
在多核體系構架與并行計算時代,尤其是云計算的出現(xiàn),虛擬化技術正迅速發(fā)展成為計算系統(tǒng)中的一項核心技術。虛擬化技術提供了系統(tǒng)層次之間的抽象化,并將資源以一個或多個虛擬的運行環(huán)境提供給用戶。目前對虛擬化的研究工作主要關注于資源的分割,獨立和封裝等研究點,但主要在一個特定處理器體系結構以及處理器同構的前提下。
本項目提出一種新穎的M2M(Multiple ISAs applications to Multiple heter-ogeneous core,M2M)概念,將虛擬化系統(tǒng)分為多核異構層、虛擬化管理層、二進制翻譯層、軟件應用層四個層次,創(chuàng)新地在傳統(tǒng)的虛擬化管理層上增加二進制翻譯層,從而引入多個不同體系結構的應用程序,虛擬化管理器調度分配給硬件層引入的異構處理器。M2M的特性使虛擬化系統(tǒng)上層應用的靈活性大大增加,并且硬件異構化也使系統(tǒng)的效率有效提升。
本項目主要貢獻點和創(chuàng)新點有:
多指令集體系應用虛擬環(huán)境。在應用層提供不同指令集體系構架的虛擬運行環(huán)境,以支持不同應用系統(tǒng)的應用程序。
軟硬協(xié)同的二進制翻譯層。在二進制翻譯層,采用軟硬協(xié)同的方式實現(xiàn)不同架構體系間的動態(tài)二進制翻譯,提高硬件目標代碼生成和運行的性能和靈活性。
設計實現(xiàn)了自主可擴展32位的SoC核。在多核異構層,設計了一個自主,可擴展,可配置的32位RISC處理器?;诖颂幚砥骱丝膳渲脤崿F(xiàn)多個RISC SoC平臺(QS-I)。本項目在XUP Virtex-5和Digilent Nexys3 FPGA開發(fā)平臺構建了多核異構層。
動態(tài)虛擬化管理。在虛擬化管理層,以輕量級的方式實現(xiàn)了系統(tǒng)資源與上層應用的管理。通過資源管理與任務調度動態(tài)分配或遷移運行任務。虛擬層的多個體系結構的應用程序(如x86和MIPS)可動態(tài)運行于異構的處理器核上(如處理能力不同的MIPS核)。
提供了系統(tǒng)庫和運行程序。在軟件應用層,為自主設計的QS-I平臺提供完善的程序運行環(huán)境并設計了多樣化的應用程序。項目完全自主地設計實現(xiàn)了系統(tǒng)庫(如圖形庫、I/O庫)以及典型的多樣化應用軟件,包括MIPS下的吃豆子游戲、X86下的推箱子游戲。
1.項目背景
在計算機科學領域中,虛擬化代表著對計算資源的抽象,而不僅僅局限于虛擬機的概念,實現(xiàn)虛擬化的方法不止一種,無論何種方法都是以不同層次的抽象來實現(xiàn)某一視角對應的效果。
1.1.項目需求
虛擬化技術正迅速發(fā)展成為計算系統(tǒng)中的一項核心技術,它提供了計算機系統(tǒng)層次之間的抽象層,并將資源分配以提供一個或多個虛擬的運行環(huán)境?,F(xiàn)在對虛擬化的研究工作主要關注于資源的分割,獨立和封裝等研究點,但主要在一個特定處理器體系結構以及處理器同構的前提下。本項目提出一種新穎的M2M(Multiple ISAs applications to Multiple heterogeneous core,M2M)概念,將虛擬化系統(tǒng)分為多核異構層、虛擬化管理層、二進制翻譯層、軟件應用層四個層次,創(chuàng)新地在傳統(tǒng)的虛擬化管理層上增加二進制翻譯層,從而引入多個不同體系結構的應用程序,并在硬件層引入處理器的異構性。M2M的特性使虛擬化系統(tǒng)的上層應用的靈活性大大增加,并且硬件異構化也使系統(tǒng)的效率有效提升。
1.2.相關技術及其發(fā)展現(xiàn)狀
本小節(jié)將介紹虛擬化以及動態(tài)翻譯等技術的基本概念及其發(fā)展現(xiàn)狀。
1.2.1.虛擬化技術的基本概念
虛擬化技術最早可以追溯到上個世紀60年代,IBM公司的System 360系統(tǒng)對運行多個虛擬化系統(tǒng)進行了最早的嘗試。如今,虛擬化技術正迅速發(fā)展成為計算機系統(tǒng)中的一項核心技術,它提供了計算機系統(tǒng)層次之間的抽象層,并將資源分配以提供一個或多個虛擬的運行環(huán)境。
例如計算機系統(tǒng)可分為如圖 1中所示的四個層次,由最底層的硬件自下而上分別是操作系統(tǒng)、用戶庫、應用程序。相應地,虛擬化技術可以針對各個層次進行抽象虛擬,從而為上一層的應用提供一個或多個虛擬環(huán)境。
圖 1 計算機系統(tǒng)的四個層次
更具體地,虛擬化的層次可分為如圖 2所示的指令集架構(ISA)、硬件抽象層(HAL)、操作系統(tǒng)、用戶級庫、應用程序的五個層次。圖 2中還在各個層次下方列出了與其對應的知名產(chǎn)品。
圖 2 虛擬化技術的五個層次及其相應產(chǎn)品
1.2.2.ISA層的虛擬化技術
ISA層的虛擬化是虛擬化技術中的一個重要內容,它的主要目的是為上層應用提供一個或多個不同于物理層實際處理器ISA的ISA抽象層,從而使得多個處理器架構的應用程序能夠在同一個處理器上運行,如圖 3所示。
圖 3 ISA層的虛擬化
ISA層虛擬化所產(chǎn)生的異構性使處理器本身的性能得到提高[1]。同時,x86架構憑借其強大的軟硬件支持,仍將在未來的處理器競爭中占有統(tǒng)治地位[2] 。本項目將重點實現(xiàn)不同ISA(x86和MIPS)之間的虛擬化技術,使該RISC處理器與x86架構達到二進制兼容。
1.2.3.動態(tài)翻譯技術
在ISA層的虛擬化中,二進制翻譯是最重要的實現(xiàn)技術。二進制翻譯是指把一中體系結構的機器碼翻譯成為另一種體系結構的機器碼。通過二進制翻譯,體系結構將成為一個軟件層,它使得復雜的遺留體系結構能夠用簡單的硬件來實現(xiàn),并且使得新穎的體系結構能夠兼容原來的軟件;此外,二進制翻譯能夠促進軟件的優(yōu)化[3]。
二進制翻譯有兩種主要的實現(xiàn)方法,一種是靜態(tài)翻譯,另一種動態(tài)翻譯。
靜態(tài)翻譯把整個二進制可執(zhí)行文件翻譯成目標體系結構的指令集,它不需要先運行代碼,所有的翻譯都在編譯時完成。所以靜態(tài)翻譯很難做到正確性,因為不是所有的代碼都能在編譯時被翻譯器發(fā)現(xiàn)。比如,可執(zhí)行文件的某些部分只能通過間接跳轉才能到達,而間接跳轉的目標值只有在運行時才知道。
動態(tài)翻譯把一小段源體系結構的代碼翻譯成目標體系結構的代碼并把這一小段生成的代碼緩存起來。只有當代碼被運行時才開始執(zhí)行翻譯。跳轉指令會被指定到已經(jīng)翻譯和緩存起來的代碼段上。
2.項目目標及開發(fā)平臺選擇
2.1.項目目標及內容
本項目提出一種新穎的M2M(Multiple ISAs applications to Multiple heter-ogeneous core,M2M)概念,在虛擬化管理層上增加二進制翻譯層,從而引入多個不同體系結構的應用程序,并在硬件層引入處理器的異構性。如圖 4所示的項目總體層次包括多核異構層、虛擬化管理層、二進制翻譯層以及軟件應用層。
圖 4 項目總體層次
本項目目標是基于Xilinx公司的XUP Virtex-5和Digilent的Nexys3 FPGA開發(fā)板實現(xiàn)多個RISC SoC平臺建立硬件多核異構層;選擇MIPS和x86 ISA構架設計吃豆子、俄羅斯方塊等典型應用程序構成多樣化應用場景,實現(xiàn)M2M原型系統(tǒng)。
具體任務如下:
多核異構層
實現(xiàn)MIPS基本指令集,支持精確中斷,含一級Cache的32位RISC CPU的RTL描述及其驗證;
完成VGA(或DVI)、PS/2、SRAM、UART等外設的控制器模塊描述及各個模塊的驗證;
引入Wishbone總線,集成SoC平臺的各個模塊;
基于不同F(xiàn)PGA的RISC SoC平臺(分別在XUP Vritex-5和Digilent Nexys3上基于自主軟核QS-I搭建了RISC SoC平臺),構建多核異構層
虛擬化管理層
對多核異構層的資源管理;
對應用層多樣化程序的調度分配
二進制翻譯層
以軟硬件協(xié)同方式完成RISC處理器在ISA層對x86的虛擬化,使得RISC處理器能夠與多架構(如x86)二進制兼容;
動態(tài)翻譯的軟件架構設計
軟件應用層
系統(tǒng)軟件編寫。系統(tǒng)軟件包括外設的驅動程序及系統(tǒng)控制程序;
運行環(huán)境及庫編寫。設計實現(xiàn)系統(tǒng)庫(如圖形庫、I/O庫);
應用軟件編寫。應用軟件包括多個SoC完整應用系統(tǒng)(x86和MIPS),如簡單的游戲程序。
2.2.開發(fā)平臺選擇
本項目主要選用Xilinx公司的XUP Virtex-5開發(fā)平臺及Digilent公司的Nexys3開發(fā)平臺。
2.2.1.XUP Virtex-5 FPGA開發(fā)平臺簡介
XUP Virtex5是集成了OpenSparcT1開源微處理器的一個強大系統(tǒng)。其豐富的特色以及開發(fā)平臺的通用性,使得該板卡非常適合在教學及研究的領域搭建各種系統(tǒng)。如數(shù)字設計、嵌入式系統(tǒng)、通訊系統(tǒng)、網(wǎng)絡、視頻及圖像處理等各個領域。XUP Virtex-5實體圖見圖 5,其資源模塊圖如圖 6所示。XUP Virtex-5含有豐富的片上資源以及完整的工業(yè)標準接口。
圖 5 XUP Virtex-5 FPGA開發(fā)平臺
圖 6 XUP Virtex-5平臺資源模塊
本項目基于XUP Virtex-5 FPGA開發(fā)平臺構建了基于自主軟核QS-I的RISC SoC平臺。
2.2.2.Digilent Nexys3 FPGA開發(fā)平臺簡介
Digilent公司的Nexys3平臺是一個基于Xilinx Sparten-6 FPGA的完整,易用的數(shù)字電路開發(fā)平臺。Sparten-6 FPGA為高性能邏輯設計做了充分優(yōu)化,其片內的block RAM,時鐘管理模塊,DSP等資源為高級邏輯設計提供了必要硬件基礎。Nexys3實體圖見圖 7,其平臺資源模塊如圖 8。
圖 7 Digilent Nexys3 FPGA開發(fā)平臺
圖 8 Digilent Nexys3平臺資源模塊[!--empirenews.page--]
本項目基于Digilent Nexys3 FPGA開發(fā)平臺構建了基于自主軟核QS-I的RISC SoC平臺。
3.總體設計方案說明
3.1.1.系統(tǒng)總體框架及關鍵技術分析
本項目的總體框架如圖 9,實現(xiàn)時采用V5-MIPS core和N3-MIPS core構成異構原型。
圖 9 項目總體框架圖
項目的關鍵技術包括:
多核異構層
32位RISC處理器的結構競爭、控制競爭、數(shù)據(jù)競爭三大競爭的解決以及擴展CPU指令集,支持GNU的mips_elf_gcc編譯器等開源工具鏈
流水線中的精確中斷及異常的實現(xiàn)
CPU的Cache設計:
Cache的映射策略
Cache的寫策略
CPU和各個外設模塊對Wishbone總線的集成:
CPU的對外接口設計
各個外設符合Wishbone協(xié)議的接口設計
各個模塊與總線的集成
基于不同FPGA的RISC SoC平臺(分別在XUP Vritex-5和Digilent Nexys3上基于自主軟核QS-I搭建了RISC SoC平臺),構建多核異構層?;趩蝹€核的可擴展SoC框架核心如圖 10
圖 10 RISC SoC
虛擬化管理層
對多核異構層的資源管理策略;
對應用層程序的調度分配策略
二進制翻譯層
以基本塊為翻譯單位的動態(tài)翻譯實現(xiàn)
寄存器的映射
Big endian(MIPS)與little endian(x86)
X86標志位處理
x86中斷及系統(tǒng)調用的模擬
轉移分發(fā)器
翻譯塊管理
軟件應用層
SoC系統(tǒng)軟件模塊
各個外設模塊的驅動程序
3.1.2.RISC CPU(QS-I)結構
RISC CPU(QS-I)的總體框架如圖 11所示。QS-I中的整數(shù)流水線采用Fetch à Decode à Execute à Memory à Writeback的五級流水線結構。QS-I中采用哈佛結構的指令Cache和數(shù)據(jù)Cache。此外,為了加速ISA層虛擬化的動態(tài)翻譯實現(xiàn),QS-I中含有專門的硬件模塊以加速動態(tài)翻譯。
圖 11 RISC CPU(QS-I)總體框架圖
3.1.3.動態(tài)翻譯策略與方案
圖 12 動態(tài)翻譯及執(zhí)行架構圖
二進制動態(tài)翻譯及執(zhí)行架構如圖 12所示,主要有翻譯及執(zhí)行兩個過程。翻譯過程將源體系的程序進行翻譯,生成新體系的程序。執(zhí)行過程負責生成塊在新體系下的運行。以8086轉MIPS為例,源體系為8086,新體系為MIPS。圖中SMEM代表的是源內存,保存的是8086可執(zhí)行程序,TMEM代表的是目標內存,保存的是8086程序塊翻譯后得到的相應MIPS程序塊。翻譯過程是在MIPS環(huán)境中,翻譯塊的執(zhí)行在虛擬環(huán)境中。兩種環(huán)境的轉換需要經(jīng)過上下文切換。切換時,先保存當前狀態(tài),包括它自己的一套寄存器組,再載入新的狀態(tài)。
跳轉緩存為硬件模塊,加速生成塊的執(zhí)行。跳轉緩存保存的是對,SPC為某指令在SMEM中的地址,TPC則是在TMEM中相應的地址。在執(zhí)行生成塊遇到轉移跳轉指令時,根據(jù)SPC在跳轉緩存中找對應的TPC,以繼續(xù)執(zhí)行生成塊。
3.1.4.Wishbone總線及基本外設
Wishbone 總線最先是由Silicon公司提出,現(xiàn)在己被移交給OpenCores組織維護,它通過在IP核之間建立一個通用接口完成互聯(lián)。可以用于在軟核、固核以及硬核之間進行互聯(lián)。
Wishbone規(guī)范具有如下特點:
簡單、緊湊,需要很少的邏輯門
完整的普通數(shù)據(jù)據(jù)傳輸總線協(xié)議,包括單個讀寫傳輸周期和事件周期
支持大端數(shù)據(jù)和小端數(shù)據(jù),接口自動完成兩者之間的轉換
支持存儲器映射、FIFO存儲器、交叉互聯(lián)
采用握手協(xié)議,允許速率控制,可以達到每個時鐘周期進行一次數(shù)據(jù)傳輸
支持普通周期結束、重試結束、錯誤結束等總線周期形式,支持用戶自定義的標志
采用MASTER/SLAVE體系結構,支持多點進程(Multi-MASTER)
支持各種各樣的IP核互聯(lián),包括USB、雙向總線、復用器互聯(lián)等
相對于其他的IP核接口規(guī)范來說,Wishbone接口規(guī)范具有簡單、開放、高效、利于實現(xiàn)等特點而且完全免費,并沒有專利保護。基于上述優(yōu)點,因此采用Wishbone總線進行接口設計。
QS-I 硬件系統(tǒng)在團隊自主研發(fā)的MIPS體系結構5級流水CPU的基礎上,采用Wishbone開源總線,將主存、顯示器、鍵盤、RS232等外部設備與CPU進行互聯(lián)。CPU作為Wishbone開源總線MASTER/SLAVE體系結構中的MASTER設備,向總線發(fā)起訪問外設的請求;Wishbone總線接收來自CPU的訪問請求和訪問命令,向外設發(fā)起訪問請求;外設相應請求后,數(shù)據(jù)通過Wishbone總線傳給CPU。采用Wishbone總線后,系統(tǒng)能夠高效的訪問各種外設,而且具有較好的可擴展性,比如在Wishbone開源總線MASTER/SLAVE體系結構中,MASTER設備和SLAVE設備都是可已同時聯(lián)接多個的,總線會解決相關的訪問沖突。
下文將介紹Wishbone開源總線的相關信號的定義及作用。
圖 13 Wishbone總線規(guī)范中使用的主要信號
所有的Wishbone接口信號都是高電平有效,設計成高電平有效的主要原因是由于低電平有效信號的書寫問題,不同的設計者表達低電平有效信號的方式不同,拿最常見的低電平有效的復位信號來說,其表示方法就有_RST_I、N_RST_I、#RST_I和/RST_I,而高電平有效的信號其表達方式通常只有一種。所有的Wishbone接口信號都以_I或者_O結束。_I表示輸入,_O表示輸出。()表示該信號為總線信號,總線的寬度可以為1,也可以為大于1的任何值。
在圖7中,主設備具有遵守Wishbone規(guī)范的主設備接口,從設備具有遵守Wishbone規(guī)范的從設備接口,INTERCON模塊將主設備和從設備的對應數(shù)據(jù)、地址和控制線連接起來,SYSCON模塊提供時鐘和復位信號,這兩個信號被送入主設備和從設備。圖7給出了Wishbone接口的常見信號,這些信號有些是必須的,有些是可選的。這些信號的基本功能描述如下:
CLK_O/CLK_I:時鐘信號。時鐘信號由SYSCON模塊產(chǎn)生,并送入各個主設備和從設備。SYSCON通常內部存在一個鎖相環(huán),將來源于芯片外的晶體振蕩器或者時鐘輸入信號整形、分頻或者倍頻為芯片內所需要的時鐘信號。所有Wishbone信號都同步到時鐘信號上,包括復位信號。
RST_O/RST_I:同步復位信號,高電平有效。復位信號由SYSCON模塊產(chǎn)生,并送入各主設備及從設備。
DAT_O()/DAT_I():主設備和從設備的之間的數(shù)據(jù)信號,數(shù)據(jù)可以由主設備傳送給從設備,也可以由從設備傳送給主設備。一對主設備和從設備之間最多存在兩條數(shù)據(jù)總線,一條用于主設備向從設備傳輸數(shù)據(jù),另外一條用于從設備向主設備傳輸數(shù)據(jù)。Wishbone規(guī)定數(shù)據(jù)總線的最大寬度為64位,這一規(guī)定實際上是考慮到目前商用處理器的最大位數(shù)為64,實際上數(shù)據(jù)總線的寬度可以是任意值。就筆者看來,在64位處理器以后,處理器將向多核方向發(fā)展,總線將向高速串行方向發(fā)展。
ADR_O(n…m)/ADR_I(n…m):地址信號,主設備輸出地址到從設備。n取決于IP核的地址寬度,m取決于數(shù)據(jù)總線DAT_O()/DAT_I()的寬度和粒度。數(shù)據(jù)總線的粒度指的是數(shù)據(jù)總線能夠一次傳送的最小比特數(shù),很多處理器如ARM的數(shù)據(jù)總線的粒度為1個字節(jié),但是也有一些處理器如CEVA TeakLite DSP的數(shù)據(jù)總線粒度為2個字節(jié)。一個位寬為32比特、粒度為1個字節(jié)的數(shù)據(jù)總線的地址信號應定義為ADR_O(n…2)/ADR_I(n…2)。在傳送數(shù)據(jù)時,具體哪些字節(jié)有效通過SEL_O()/SEL_I()信號(見下文)控制。
TGD_O/TGD_I()、TGA_O()/TGA_I():TGD_O/TGD_I()為數(shù)據(jù)標簽,具體講是附加于在數(shù)據(jù)總線DAT_O()/DAT_I()的標簽,該標簽可以用于傳送關于數(shù)據(jù)總線的額外信息如奇偶校驗信息、時間戳信息等。TGA_O/TGA_I()為地址標簽,具體講是附加于在地址總線ADR_O()/ADR_I()的標簽,該標簽可以用于傳送關于地址總線的額外信息如地址總線奇偶校驗信息、存儲器保護信息等。Wishbone只規(guī)定了TGD_O/TGD_I和TGA_O()/TGA_I()的接口時序,用戶可以定義TGD_O/TGD_I的具體含義。
TGC_O/TGC_I():TGC_O/TGC_I()為總線周期標簽,該標簽可以用于傳送關于當前總線周期所進行操作的描述如操作類型(包括單次操作、塊操作、RMW操作)、中斷應答類型、緩存操作類型等。類似的,Wishbone只規(guī)定了TGC_O/TGC_I()的接口時序,用戶可以定義TGD_O/TGD_I的具體含義。
ACK_O/ACK_I、ERR_O/ERR_I、RTY_O/RTY_I:主從設備間的操作結束方式信號。ACK表示成功,ERR表示錯誤,RTY表示重試(Retry)。操作總是在某一總線周期內完成的,因此操作結束方式也稱為總線周期結束方式。成功是操作的正常結束方式,錯誤表示操作失敗,造成失敗的原因可能是地址或者數(shù)據(jù)校驗錯誤,寫操作或者讀操作不支持等。重試表示從設備當前忙,不能及時處理該操作,該操作可以稍后重新發(fā)起。接收到操作失敗或者重試后,主設備如何響應取決于主設備的設計者。
SEL_O()/SEL_I():有效數(shù)據(jù)總線選擇信號,標識當前操作中數(shù)據(jù)總線上哪些比特是有效的,以總線粒度為單位。SEL_O()/SEL_I()的寬度為數(shù)據(jù)總線寬度除以數(shù)據(jù)總線粒度。比如一個具有32位寬、粒度為1個字節(jié)的數(shù)據(jù)總線的選擇信號應定義為SEL_O(3:0)/ SEL_I(3:0),SEL(4’b1001)代表當前操作中數(shù)據(jù)總線的最高和最低字節(jié)有效。
CYC_O/CYC_I、LOCK_O/LOCK_I、GNT_O()/GNT_I:總線周期信號CYC_O/CYC_I有效代表一個主設備請求總線使用權或者正在占有總線,但是不一定正在進行總線操作(是否正在進行總線操作取決于選通信號STB_O/STB_I是否有效)。只有該信號有效,Wishbone主設備和從設備接口的其它信號才有意義。CYC_O/CYC_I信號在一次總線操作過程中必須持續(xù)有效,比如一次塊讀操作可能需要多個時鐘周期,CYC_O/CYC_I信號必須保持持續(xù)有效。實際上,該信號的實際作用等同于其他總線標準中的仲裁申請信號。當存在多個主設備時,它們可能希望同時進行總線操作,主設備通過仲裁申請信號向仲裁器申請總線占有權,仲裁器通過一定的仲裁優(yōu)先級邏輯向其中一個選定的主設備發(fā)送總線允許信號GNT_O()/GNT_I,表示該主設備可以占用總線。GNT_O()是仲裁器輸出的允許信號,一般有多個;而對于一個主設備,其允許信號輸入GNT_I卻只有一個。一次總線操作可能需要多個時鐘周期,比如一次塊操作。在操作過程中,仲裁器可能會提前將總線占用權收回并分配給其他主設備從而打斷當前主設備的操作,LOCK_O/LOCK_I有效代表本次總線操作是不可打斷的。仲裁器收到LOCK_I信號,就不會提前收回總線使用權。圖 13中只有一個主設備和一個從設備,因此沒畫出仲裁器模塊,該模塊可以視為是INTERCON的一部分,見本章最后給出的例子。
STB_O/STB_I:選通信號。選通有效代表主設備發(fā)起一次總線操作。只有選通信號有效(此時CYC_O/CYC_I也必須為高),ADR_O/ADR_I()、DAT_O()/DAT_I()、SEL_O()/SEL_I()才有意義。在Wishbone總線規(guī)范中,CYC_O/CYC_I是最高層的控制信號,只有該信號有效,STB_O/STB_I信號才有意義。一個信號有意義是指該信號的當前值是需要主設備或者從設備解釋的,0為無效,1為有效,而一個信號沒有意義是指該信號的當前值主設備和從設備不必關心,是0還是1都無效。
WE_O/WE_I:寫使能信號,代表當前周期中進行的操作是寫操作還是讀操作。1代表寫,0代表讀。
3.1.5.系統(tǒng)庫及應用程序設計
為了能夠更好地發(fā)揮系統(tǒng)功能,擴大系統(tǒng)的應用范圍,充分利用系統(tǒng)的各種硬件資源以及外圍設備,包括鍵盤、串口、顯示器,項目團隊開發(fā)出了供應用程序調用的系統(tǒng)庫。根據(jù)外設,可以將系統(tǒng)庫函數(shù)分為四部分:系統(tǒng)宏定義和端口常量、鍵盤接口函數(shù)、顯示器接口函數(shù)和串口接口函數(shù)。
圖 14 系統(tǒng)庫及應用程序總體結構[!--empirenews.page--]
如圖 14,在團隊自主研發(fā)的QS-I 硬件系統(tǒng)的基礎上,團隊開發(fā)了函數(shù)系統(tǒng)庫和多個應用程序。其中系統(tǒng)函數(shù)庫包括圖形庫、VGA顯示器接口、RS232串口接口、PS/2鍵盤接口。應用程序根據(jù)所最終運行時的機器碼可以分為MIPS體系結構應用程序和x86體系結構應用程序。其中,MIPS體系結構應用程序包括使用MIPS匯編語言編寫的俄羅斯方塊游戲和使用C語言編寫的吃豆子游戲;x86體系結構應用程序包括使用8086匯編語言編寫的推箱子游戲。
該項目的硬件系統(tǒng)是自主研發(fā)的,因而需要開發(fā)基于該系統(tǒng)的軟硬件接口函數(shù)庫,并且需要編寫應用程序測試系統(tǒng)的各種功能。
該項目的硬件系統(tǒng)支持MIPS體系結構的指令集?;贛IPS指令集,團隊開發(fā)了將MIPS匯編語言翻譯成機器碼的匯編程序,并分別使用MIPS匯編語言和C語言開發(fā)了系統(tǒng)函數(shù)庫。使用MIPS匯編語言開發(fā)應用程序,用來驗證五級流水線CPU的功能正確性,檢測出數(shù)據(jù)相關和控制相關出現(xiàn)的問題,驗證硬件系統(tǒng)對MIPS指令集的支持度,驗證CPU與各種外部設備互聯(lián)的正確性以及系統(tǒng)的總體性能。
基于MIPS匯編語言開發(fā)了俄羅斯方塊游戲。俄羅斯方塊的基本規(guī)則是移動、旋轉和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。本設計的俄羅斯方塊有5種基本形狀,7種顏色;可通過鍵盤控制左移(A)、右移(D)、旋轉(W)、加速下降(S)、暫停(Space)、退出(Q)、選擇級別(L);游戲設置兩種級別,普通下降速度和較快下降速度兩級;游戲界面顯示幫助、玩家所得分數(shù)、下一個即將下落的形狀等信息;當方塊到達頂端時,游戲失敗;玩家通過不斷的刷新最高分獲得愉悅。
為了提高軟件開發(fā)的效率,使軟件開發(fā)人員方便的使用硬件系統(tǒng)及其外設資源,團隊使用Gcc編譯器和MASM匯編器的組合,項目團隊開發(fā)了基于C語言的應用程序,驗證硬件系統(tǒng)對Gcc編譯器和MASM匯編器生成的機器指令的支持。團隊還開發(fā)了基于C語言的系統(tǒng)函數(shù)庫,包括圖形庫、VGA顯示器接口、鍵盤接口和串口接口等。此外,團隊還使用JAVA語言,開發(fā)了MIPS指令CPU模擬器,使得在軟件的開發(fā)過程中不需要每次都傳輸?shù)接布_發(fā)板上就可以進行調試,大大提高程序開發(fā)的效率。
基于C語言開發(fā)了吃豆子游戲。吃豆子的基本規(guī)則是控制packman的移動,使之吃完所有的豆子,并且躲開怪物的追捕。本程序設計的怪物有2個;豆子有兩種,一種普通的小豆子,還有一種大豆子,吃了大豆子能讓怪物慢下來幾秒鐘;可通過鍵盤控制左移(A)、右移(D)、旋轉(W)、加速下降(S)、暫停(Space)、退出(Q);游戲界面顯示幫助、玩家所得分數(shù)等信息;當玩家被怪物抓到時,游戲失敗;玩家將所有的豆子都吃光時,游戲正常結束。
該硬件系統(tǒng)能夠執(zhí)行不同指令集體系結構的機器碼。為了驗證系統(tǒng)執(zhí)行不同指令集機器碼的正確性,調試出硬件系統(tǒng)中存在的問題,團隊開發(fā)了基于x86匯編語言的應用程序。團隊還開發(fā)了基于x86語言的系統(tǒng)函數(shù)庫,包括圖形庫、VGA顯示器接口、鍵盤接口和串口接口等。
基于x86匯編語言開發(fā)了推箱子游戲。推箱子的基本規(guī)則是控制機器人的移動,使之把所有的箱子放到指定的位置。箱子只有1種;可通過鍵盤控制左移(A)、右移(D)、旋轉(W)、加速下降(S)、暫停(Space)、退出(Q);游戲界面顯示幫助、玩家所用的時間等信息;玩家將所有的箱子都放到適當?shù)奈恢脮r,游戲正常結束。
4.詳細設計方案
4.1.RISC CPU詳細設計方案
4.1.1.RISC CPU(QS-I)整體模塊
圖 15 QS-I CPU整體模塊圖
如圖 15所示,QS-I的整體模塊中主要包括兩部分,第一部分是五級流水線和Cache,另一個模塊是動態(tài)二進制翻譯加速模塊(DBT Accelerator)。CPU的對外接口符合Wishbone總線標準。
在下一節(jié)中,我們將會介紹QS-I CPU中各個單元模塊功能以及其時序。
4.1.2.RISC CPU(QS-I)各單元模塊功能與時序
4.1.2.1五級流水線模塊詳細設計方案
功能描述
本模塊的功能是完成指令的五級流水化執(zhí)行,并支持中斷及異常。一條指令的執(zhí)行經(jīng)過是Fetch(取指) à Decode(譯碼) à Execute(執(zhí)行) à Memory(訪存) à Writeback(寫回)五個階段。其中Fetch階段從指令Cache中由PC(Praogram Counter)取得下一條指令;Decode階段完成指令的大部分譯碼工作,并產(chǎn)生相應的控制信號;Execute階段主要完成指令的算術運算以及少量選擇電路;Memory階段完成訪存任務,數(shù)據(jù)將從數(shù)據(jù)Cache中讀取或者寫入;Writeback階段完成寫回指令的修改Register File(寄存器堆)的寫操作。此外,本模塊完成了流水線中的精確中斷處理。
- 子模塊列表
|
Module |
Description |
|
pc_reg |
Module of PC register |
|
if_stage |
Instruction Fetch stage |
|
if_id_reg |
Registers between IF and ID stages |
|
id_stage |
Instruction Decode stage |
|
id_exe_stage |
Registers between ID and EXE stages |
|
exe_stage |
Execute stage |
|
exe_mem_reg |
Registers between EXE and MEM stages |
|
mem_stage |
Memory stage |
|
mem_wb_reg |
Registers between MEM and WB stages |
|
wb_stage |
Writeback stage |
|
except |
Module of exception handling |
詳細設計
pc_reg
本模塊完成對PC寄存器的更新任務。若流水線中出現(xiàn)stall或者Cache發(fā)生miss等情況則延遲對PC寄存器的更新。本模塊的時序如下圖所示。
圖 16 pc_reg時序圖
if_stage
本模塊完成對指令Cache的取指。模塊的對外接口符合Wishbone總線標準。CPU的對外接口包括IBus(指令總線)和DBus(數(shù)據(jù)總線),為了將CPU成功集成入Wishbone總線中,CPU的對外接口部分的邏輯設計必須符合Wishbone標準。此外,CPU對外部設備(如RAM,ROM,UART)的訪問速度以及CPU有無Cache(高速緩存)是未知的,因此這部分的邏輯設計必須帶有通用性。
本模塊的主要時序如下圖。
圖 17 if_stage時序圖
if_id_reg
本模塊完成IF和ID兩個階段之間的信號流水。本模塊的時序圖如下。
圖 18 if_id_reg時序圖
id_stage
本模塊完成指令的基本譯碼,并產(chǎn)生相應的控制信號。RISC處理器的結構競爭、控制競爭、數(shù)據(jù)競爭三大競爭的解決:
采用旁路(bypass)技術解決數(shù)據(jù)競爭,雙跳(double bump)解決結構競爭,延時槽技術解決控制競爭。
本模塊的基本時序圖如下。
圖 19 id_stage時序圖
id_exe_stage
本模塊完成IF和ID兩個階段之間的信號流水。本模塊的時序圖如下。
圖 20 id_exe_reg時序圖
exe_stage
本模塊完成指令的算術邏輯運算。其中,運算包括add, sub, and, or, xor, nor, sll, srl, sra, lui等算術或邏輯運算。
為了x86架構動態(tài)翻譯的加速需要,在ALU(算術運算單元)中增加了x86 flag標志寄存器,并將該寄存器作為一個系統(tǒng)寄存器,用戶程序可通過mfc0,mtc0指令來修改flag標志寄存器。
本模塊的時序圖如下。
圖 21 exe_stage時序圖





