[計算機組織]期末專題-MIPS模擬器

Posted by John on 2017-03-14
Words 407 and Reading Time 1 Minutes
Viewed Times

計算機組織期末的專題。

說明

請設計一個pipelined的cpu模擬器

(可以任何語言來模擬 ex:C & C++)

以stall來解決所有的hazard問題,換言之,需要實作hazard的邏輯判斷

Input 為一名為memory.txt的文字檔,裡面為MIPS的組合語言程式 Output 請輸出此程式執行結果於一名為result.txt的文字檔

Instructions

指令有下列幾種:lw、sw、add、sub、beq(選擇)

Register Number

32個,初始時$0暫存器的值為0,其他都是1

Memory Size

32 words,初始時記憶體中的每個word都是1

利用Stall解決各種Hazard

當在ID階段發現與前一個指令有相依性時,暫時不再往前執行,等到結果在某個cycle寫入目的地暫存器後,在同一個cycle再完成ID

Ex: Data Hazard

在ID階段發現目前指令為beq時,IF不執行抓取指令的動作,等到beq指令完成ID階段後,到達EXE時,在同一cycle才抓取正確位置的指令

EX: Control Hazard

Example

1
2
3

想法

核心重點在於如何模擬pipeline,大家都知道MIPS有5個stage,如果按照順序一定沒戲,因為第一個指令執行完,第二個指令就馬上把第一個指令留下來的資訊覆蓋掉了。

所以要用while去模擬一個cycle,並從後面開始倒回處理,這樣每次處理的資訊才會剛好是前一個指令留下來的資訊

4

接下來就是按照規格跟MIPS架構圖去設計每個stage該有什麼reg變數了。

程式碼如下:github


>