基于FPGA的M2M異構(gòu)虛擬化系統(tǒng)(一)
如圖 14,在團隊自主研發(fā)的QS-I 硬件系統(tǒng)的基礎(chǔ)上,團隊開發(fā)了函數(shù)系統(tǒng)庫和多個應(yīng)用程序。其中系統(tǒng)函數(shù)庫包括圖形庫、VGA顯示器接口、RS232串口接口、PS/2鍵盤接口。應(yīng)用程序根據(jù)所最終運行時的機器碼可以分為MIPS體系結(jié)構(gòu)應(yīng)用程序和x86體系結(jié)構(gòu)應(yīng)用程序。其中,MIPS體系結(jié)構(gòu)應(yīng)用程序包括使用MIPS匯編語言編寫的俄羅斯方塊游戲和使用C語言編寫的吃豆子游戲;x86體系結(jié)構(gòu)應(yīng)用程序包括使用8086匯編語言編寫的推箱子游戲。
該項目的硬件系統(tǒng)是自主研發(fā)的,因而需要開發(fā)基于該系統(tǒng)的軟硬件接口函數(shù)庫,并且需要編寫應(yīng)用程序測試系統(tǒng)的各種功能。
該項目的硬件系統(tǒng)支持MIPS體系結(jié)構(gòu)的指令集?;贛IPS指令集,團隊開發(fā)了將MIPS匯編語言翻譯成機器碼的匯編程序,并分別使用MIPS匯編語言和C語言開發(fā)了系統(tǒng)函數(shù)庫。使用MIPS匯編語言開發(fā)應(yīng)用程序,用來驗證五級流水線CPU的功能正確性,檢測出數(shù)據(jù)相關(guān)和控制相關(guān)出現(xiàn)的問題,驗證硬件系統(tǒng)對MIPS指令集的支持度,驗證CPU與各種外部設(shè)備互聯(lián)的正確性以及系統(tǒng)的總體性能。
基于MIPS匯編語言開發(fā)了俄羅斯方塊游戲。俄羅斯方塊的基本規(guī)則是移動、旋轉(zhuǎn)和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。本設(shè)計的俄羅斯方塊有5種基本形狀,7種顏色;可通過鍵盤控制左移(A)、右移(D)、旋轉(zhuǎn)(W)、加速下降(S)、暫停(Space)、退出(Q)、選擇級別(L);游戲設(shè)置兩種級別,普通下降速度和較快下降速度兩級;游戲界面顯示幫助、玩家所得分?jǐn)?shù)、下一個即將下落的形狀等信息;當(dāng)方塊到達(dá)頂端時,游戲失敗;玩家通過不斷的刷新最高分獲得愉悅。
為了提高軟件開發(fā)的效率,使軟件開發(fā)人員方便的使用硬件系統(tǒng)及其外設(shè)資源,團隊使用Gcc編譯器和MASM匯編器的組合,項目團隊開發(fā)了基于C語言的應(yīng)用程序,驗證硬件系統(tǒng)對Gcc編譯器和MASM匯編器生成的機器指令的支持。團隊還開發(fā)了基于C語言的系統(tǒng)函數(shù)庫,包括圖形庫、VGA顯示器接口、鍵盤接口和串口接口等。此外,團隊還使用JAVA語言,開發(fā)了MIPS指令CPU模擬器,使得在軟件的開發(fā)過程中不需要每次都傳輸?shù)接布_發(fā)板上就可以進行調(diào)試,大大提高程序開發(fā)的效率。
基于C語言開發(fā)了吃豆子游戲。吃豆子的基本規(guī)則是控制packman的移動,使之吃完所有的豆子,并且躲開怪物的追捕。本程序設(shè)計的怪物有2個;豆子有兩種,一種普通的小豆子,還有一種大豆子,吃了大豆子能讓怪物慢下來幾秒鐘;可通過鍵盤控制左移(A)、右移(D)、旋轉(zhuǎn)(W)、加速下降(S)、暫停(Space)、退出(Q);游戲界面顯示幫助、玩家所得分?jǐn)?shù)等信息;當(dāng)玩家被怪物抓到時,游戲失敗;玩家將所有的豆子都吃光時,游戲正常結(jié)束。
該硬件系統(tǒng)能夠執(zhí)行不同指令集體系結(jié)構(gòu)的機器碼。為了驗證系統(tǒng)執(zhí)行不同指令集機器碼的正確性,調(diào)試出硬件系統(tǒng)中存在的問題,團隊開發(fā)了基于x86匯編語言的應(yīng)用程序。團隊還開發(fā)了基于x86語言的系統(tǒng)函數(shù)庫,包括圖形庫、VGA顯示器接口、鍵盤接口和串口接口等。
基于x86匯編語言開發(fā)了推箱子游戲。推箱子的基本規(guī)則是控制機器人的移動,使之把所有的箱子放到指定的位置。箱子只有1種;可通過鍵盤控制左移(A)、右移(D)、旋轉(zhuǎn)(W)、加速下降(S)、暫停(Space)、退出(Q);游戲界面顯示幫助、玩家所用的時間等信息;玩家將所有的箱子都放到適當(dāng)?shù)奈恢脮r,游戲正常結(jié)束。
4.詳細(xì)設(shè)計方案
4.1.RISC CPU詳細(xì)設(shè)計方案
4.1.1.RISC CPU(QS-I)整體模塊
圖 15 QS-I CPU整體模塊圖
如圖 15所示,QS-I的整體模塊中主要包括兩部分,第一部分是五級流水線和Cache,另一個模塊是動態(tài)二進制翻譯加速模塊(DBT Accelerator)。CPU的對外接口符合Wishbone總線標(biāo)準(zhǔn)。
在下一節(jié)中,我們將會介紹QS-I CPU中各個單元模塊功能以及其時序。
4.1.2.RISC CPU(QS-I)各單元模塊功能與時序
4.1.2.1五級流水線模塊詳細(xì)設(shè)計方案
功能描述
本模塊的功能是完成指令的五級流水化執(zhí)行,并支持中斷及異常。一條指令的執(zhí)行經(jīng)過是Fetch(取指) à Decode(譯碼) à Execute(執(zhí)行) à Memory(訪存) à Writeback(寫回)五個階段。其中Fetch階段從指令Cache中由PC(Praogram Counter)取得下一條指令;Decode階段完成指令的大部分譯碼工作,并產(chǎn)生相應(yīng)的控制信號;Execute階段主要完成指令的算術(shù)運算以及少量選擇電路;Memory階段完成訪存任務(wù),數(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 |
詳細(xì)設(shè)計
pc_reg
本模塊完成對PC寄存器的更新任務(wù)。若流水線中出現(xiàn)stall或者Cache發(fā)生miss等情況則延遲對PC寄存器的更新。本模塊的時序如下圖所示。
圖 16 pc_reg時序圖
if_stage
本模塊完成對指令Cache的取指。模塊的對外接口符合Wishbone總線標(biāo)準(zhǔn)。CPU的對外接口包括IBus(指令總線)和DBus(數(shù)據(jù)總線),為了將CPU成功集成入Wishbone總線中,CPU的對外接口部分的邏輯設(shè)計必須符合Wishbone標(biāo)準(zhǔn)。此外,CPU對外部設(shè)備(如RAM,ROM,UART)的訪問速度以及CPU有無Cache(高速緩存)是未知的,因此這部分的邏輯設(shè)計必須帶有通用性。
本模塊的主要時序如下圖。
圖 17 if_stage時序圖
if_id_reg
本模塊完成IF和ID兩個階段之間的信號流水。本模塊的時序圖如下。
圖 18 if_id_reg時序圖
id_stage
本模塊完成指令的基本譯碼,并產(chǎn)生相應(yīng)的控制信號。RISC處理器的結(jié)構(gòu)競爭、控制競爭、數(shù)據(jù)競爭三大競爭的解決:
采用旁路(bypass)技術(shù)解決數(shù)據(jù)競爭,雙跳(double bump)解決結(jié)構(gòu)競爭,延時槽技術(shù)解決控制競爭。
本模塊的基本時序圖如下。
圖 19 id_stage時序圖
id_exe_stage
本模塊完成IF和ID兩個階段之間的信號流水。本模塊的時序圖如下。
圖 20 id_exe_reg時序圖
exe_stage
本模塊完成指令的算術(shù)邏輯運算。其中,運算包括add, sub, and, or, xor, nor, sll, srl, sra, lui等算術(shù)或邏輯運算。
為了x86架構(gòu)動態(tài)翻譯的加速需要,在ALU(算術(shù)運算單元)中增加了x86 flag標(biāo)志寄存器,并將該寄存器作為一個系統(tǒng)寄存器,用戶程序可通過mfc0,mtc0指令來修改flag標(biāo)志寄存器。
本模塊的時序圖如下。
圖 21 exe_stage時序圖
評論