基于FPGA的M2M異構(gòu)虛擬化系統(tǒng)(一)
如圖 14,在團(tuán)隊(duì)自主研發(fā)的QS-I 硬件系統(tǒng)的基礎(chǔ)上,團(tuán)隊(duì)開發(fā)了函數(shù)系統(tǒng)庫和多個(gè)應(yīng)用程序。其中系統(tǒng)函數(shù)庫包括圖形庫、VGA顯示器接口、RS232串口接口、PS/2鍵盤接口。應(yīng)用程序根據(jù)所最終運(yùn)行時(shí)的機(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匯編語言編寫的推箱子游戲。
該項(xiàng)目的硬件系統(tǒng)是自主研發(fā)的,因而需要開發(fā)基于該系統(tǒng)的軟硬件接口函數(shù)庫,并且需要編寫應(yīng)用程序測試系統(tǒng)的各種功能。
該項(xiàng)目的硬件系統(tǒng)支持MIPS體系結(jié)構(gòu)的指令集?;贛IPS指令集,團(tuán)隊(duì)開發(fā)了將MIPS匯編語言翻譯成機(jī)器碼的匯編程序,并分別使用MIPS匯編語言和C語言開發(fā)了系統(tǒng)函數(shù)庫。使用MIPS匯編語言開發(fā)應(yīng)用程序,用來驗(yàn)證五級流水線CPU的功能正確性,檢測出數(shù)據(jù)相關(guān)和控制相關(guān)出現(xiàn)的問題,驗(yàn)證硬件系統(tǒng)對MIPS指令集的支持度,驗(yàn)證CPU與各種外部設(shè)備互聯(lián)的正確性以及系統(tǒng)的總體性能。
基于MIPS匯編語言開發(fā)了俄羅斯方塊游戲。俄羅斯方塊的基本規(guī)則是移動、旋轉(zhuǎn)和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。本設(shè)計(jì)的俄羅斯方塊有5種基本形狀,7種顏色;可通過鍵盤控制左移(A)、右移(D)、旋轉(zhuǎn)(W)、加速下降(S)、暫停(Space)、退出(Q)、選擇級別(L);游戲設(shè)置兩種級別,普通下降速度和較快下降速度兩級;游戲界面顯示幫助、玩家所得分?jǐn)?shù)、下一個(gè)即將下落的形狀等信息;當(dāng)方塊到達(dá)頂端時(shí),游戲失敗;玩家通過不斷的刷新最高分獲得愉悅。
為了提高軟件開發(fā)的效率,使軟件開發(fā)人員方便的使用硬件系統(tǒng)及其外設(shè)資源,團(tuán)隊(duì)使用Gcc編譯器和MASM匯編器的組合,項(xiàng)目團(tuán)隊(duì)開發(fā)了基于C語言的應(yīng)用程序,驗(yàn)證硬件系統(tǒng)對Gcc編譯器和MASM匯編器生成的機(jī)器指令的支持。團(tuán)隊(duì)還開發(fā)了基于C語言的系統(tǒng)函數(shù)庫,包括圖形庫、VGA顯示器接口、鍵盤接口和串口接口等。此外,團(tuán)隊(duì)還使用JAVA語言,開發(fā)了MIPS指令CPU模擬器,使得在軟件的開發(fā)過程中不需要每次都傳輸?shù)接布_發(fā)板上就可以進(jìn)行調(diào)試,大大提高程序開發(fā)的效率。
基于C語言開發(fā)了吃豆子游戲。吃豆子的基本規(guī)則是控制packman的移動,使之吃完所有的豆子,并且躲開怪物的追捕。本程序設(shè)計(jì)的怪物有2個(gè);豆子有兩種,一種普通的小豆子,還有一種大豆子,吃了大豆子能讓怪物慢下來幾秒鐘;可通過鍵盤控制左移(A)、右移(D)、旋轉(zhuǎn)(W)、加速下降(S)、暫停(Space)、退出(Q);游戲界面顯示幫助、玩家所得分?jǐn)?shù)等信息;當(dāng)玩家被怪物抓到時(shí),游戲失敗;玩家將所有的豆子都吃光時(shí),游戲正常結(jié)束。
該硬件系統(tǒng)能夠執(zhí)行不同指令集體系結(jié)構(gòu)的機(jī)器碼。為了驗(yàn)證系統(tǒng)執(zhí)行不同指令集機(jī)器碼的正確性,調(diào)試出硬件系統(tǒng)中存在的問題,團(tuán)隊(duì)開發(fā)了基于x86匯編語言的應(yīng)用程序。團(tuán)隊(duì)還開發(fā)了基于x86語言的系統(tǒng)函數(shù)庫,包括圖形庫、VGA顯示器接口、鍵盤接口和串口接口等。
基于x86匯編語言開發(fā)了推箱子游戲。推箱子的基本規(guī)則是控制機(jī)器人的移動,使之把所有的箱子放到指定的位置。箱子只有1種;可通過鍵盤控制左移(A)、右移(D)、旋轉(zhuǎn)(W)、加速下降(S)、暫停(Space)、退出(Q);游戲界面顯示幫助、玩家所用的時(shí)間等信息;玩家將所有的箱子都放到適當(dāng)?shù)奈恢脮r(shí),游戲正常結(jié)束。
4.詳細(xì)設(shè)計(jì)方案
4.1.RISC CPU詳細(xì)設(shè)計(jì)方案
4.1.1.RISC CPU(QS-I)整體模塊

圖 15 QS-I CPU整體模塊圖
如圖 15所示,QS-I的整體模塊中主要包括兩部分,第一部分是五級流水線和Cache,另一個(gè)模塊是動態(tài)二進(jìn)制翻譯加速模塊(DBT Accelerator)。CPU的對外接口符合Wishbone總線標(biāo)準(zhǔn)。
在下一節(jié)中,我們將會介紹QS-I CPU中各個(gè)單元模塊功能以及其時(shí)序。
4.1.2.RISC CPU(QS-I)各單元模塊功能與時(shí)序
4.1.2.1五級流水線模塊詳細(xì)設(shè)計(jì)方案
功能描述
本模塊的功能是完成指令的五級流水化執(zhí)行,并支持中斷及異常。一條指令的執(zhí)行經(jīng)過是Fetch(取指) à Decode(譯碼) à Execute(執(zhí)行) à Memory(訪存) à Writeback(寫回)五個(gè)階段。其中Fetch階段從指令Cache中由PC(Praogram Counter)取得下一條指令;Decode階段完成指令的大部分譯碼工作,并產(chǎn)生相應(yīng)的控制信號;Execute階段主要完成指令的算術(shù)運(yùn)算以及少量選擇電路;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è)計(jì)
pc_reg
本模塊完成對PC寄存器的更新任務(wù)。若流水線中出現(xiàn)stall或者Cache發(fā)生miss等情況則延遲對PC寄存器的更新。本模塊的時(shí)序如下圖所示。

圖 16 pc_reg時(shí)序圖
if_stage
本模塊完成對指令Cache的取指。模塊的對外接口符合Wishbone總線標(biāo)準(zhǔn)。CPU的對外接口包括IBus(指令總線)和DBus(數(shù)據(jù)總線),為了將CPU成功集成入Wishbone總線中,CPU的對外接口部分的邏輯設(shè)計(jì)必須符合Wishbone標(biāo)準(zhǔn)。此外,CPU對外部設(shè)備(如RAM,ROM,UART)的訪問速度以及CPU有無Cache(高速緩存)是未知的,因此這部分的邏輯設(shè)計(jì)必須帶有通用性。
本模塊的主要時(shí)序如下圖。

圖 17 if_stage時(shí)序圖
if_id_reg
本模塊完成IF和ID兩個(gè)階段之間的信號流水。本模塊的時(shí)序圖如下。

圖 18 if_id_reg時(shí)序圖
id_stage
本模塊完成指令的基本譯碼,并產(chǎn)生相應(yīng)的控制信號。RISC處理器的結(jié)構(gòu)競爭、控制競爭、數(shù)據(jù)競爭三大競爭的解決:
采用旁路(bypass)技術(shù)解決數(shù)據(jù)競爭,雙跳(double bump)解決結(jié)構(gòu)競爭,延時(shí)槽技術(shù)解決控制競爭。
本模塊的基本時(shí)序圖如下。

圖 19 id_stage時(shí)序圖
id_exe_stage
本模塊完成IF和ID兩個(gè)階段之間的信號流水。本模塊的時(shí)序圖如下。

圖 20 id_exe_reg時(shí)序圖
exe_stage
本模塊完成指令的算術(shù)邏輯運(yùn)算。其中,運(yùn)算包括add, sub, and, or, xor, nor, sll, srl, sra, lui等算術(shù)或邏輯運(yùn)算。
為了x86架構(gòu)動態(tài)翻譯的加速需要,在ALU(算術(shù)運(yùn)算單元)中增加了x86 flag標(biāo)志寄存器,并將該寄存器作為一個(gè)系統(tǒng)寄存器,用戶程序可通過mfc0,mtc0指令來修改flag標(biāo)志寄存器。
本模塊的時(shí)序圖如下。

圖 21 exe_stage時(shí)序圖
評論