計算機組織期末的專題。
說明
請設計一個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
想法
核心重點在於如何模擬pipeline,大家都知道MIPS有5個stage,如果按照順序一定沒戲,因為第一個指令執行完,第二個指令就馬上把第一個指令留下來的資訊覆蓋掉了。
所以要用while去模擬一個cycle,並從後面開始倒回處理,這樣每次處理的資訊才會剛好是前一個指令留下來的資訊
接下來就是按照規格跟MIPS架構圖去設計每個stage該有什麼reg變數了。
程式碼如下:github