108-02 NCU CE3001-A Computer Organization Pipeline Implement
請繳交程式碼與執行檔,執行檔能一次讀入四個指令檔案,然後分別輸出四個結果,不要分開成四個獨立的執行檔,程式碼請附上註解,若作業未完成請附上說明文件告知作業完成進度(意思是屍體也有可能有分數)。
- 截止時間 : 6/14 23:59:59 (change to 2020-06-22 00:00)
- 限制語言 : C、C++
Computer Organization Pipeline Simulation Homework
請同學以 C/C++程式語言實作課本 Pipeline 處理器之指令運作模擬程式。同學需實作下列指令:「lw」、「sw」、「add」、「addi」、「sub」、「and」、「andi」、「or」、「slt」、「beq」。 並且能夠偵測與處理「data hazard」、「hazard with load」、「branch hazard」。
MIPS 指令轉換後的 32-bit 機器碼指令為程式的輸入,每題的 32-bit 機器碼指令放在作業資料夾中對應的「*.txt」檔案,請同學們撰寫模擬程式將檔案讀入並處理。
根據連續輸入的 32-bit 機器碼指令,模擬其在每個 clock cycle 時,各個 pipeline registers所儲存的值,並輸出寫入至對應文件中。 其中「Instruction」和「Control signals」的結果以二進位表示,其餘皆以十進位表示。 輸出文件格式請按照範例輸出(SampleOutput.txt)。 「Control signals」的排列順序與額外定義的「ALUop」請參考附錄。
請參考作業資料夾中的範例輸入「SampleInput.txt」和其結果輸出「SampleOutput.txt」,其中範例輸入對應的MIPS指令如下:
- lw $1, 0x03($8)
- add $3, $0, $2
- beq $0, $2, 0x06 #(branch PC+4+4×6)
P.S. Branch 指令第三個欄位應為 label,這裡為了方便而表示成數字形式,非正確寫法。
請繳交程式碼與執行檔,執行檔能一次讀入四個指令檔案,然後分別輸出四個結果,不要分開成四個獨立的執行檔,程式碼請附上註解,若作業未完成請附上說明文件告知作業完成進度。
通過公佈的測資得到該題的 60%分數,通過隱藏的測資再得該題的 40%分數。
嚴禁抄襲。
題目一共四題,每一題都是獨立的,不會相互影響。並請依照每一題輸入,將結果分別寫入到「genResult.txt」、「dataResult.txt」、「loadResult.txt」和「branchResult.txt」之中。以下是每題的解說。
P.S. 後面的題目可能會包含前面的 hazard。
- 請同學的模擬程式從"General" 檔中讀出指令,其對應的MIPS指令為:(10 pts.)
- or $3, $6, $0
- add $1, $4, $5
- and $8, $7, $2
將執行結果依照範例輸出格式寫入" genResult.txt "中。
- 請同學的模擬程式從"Datahazard"檔中讀出指令,其對應的MIPS指令為:(30 pts.)
- add $5, $2, $3
- sub $4, $5, $3
- and $6, $5, $7
- or $8, $5, $9
將執行結果依照範例輸出格式寫入"dataResult.txt"中。
- 請同學的模擬程式從"Lwhazard"檔中讀出指令,其對應的 MIPS 指令為:(30 pts.)
- lw $2, 0x04($7)
- and $4, $2, $5
- or $4, $4, $2
- add $3, $2, $4
將執行結果依照範例輸出格式寫入"loadResult.txt"中。
- 請同學的模擬程式從"Branchhazard"檔中讀出指令,其對應的 MIPS 指令為:(30 pts.)
- beq $8, $2, 0x03 # (branch 至 and 指令)
- addi $3, $6, 15
- sub $4, $5, $1
- lw $6, 0x00($0)
- and $7, $2, $7
將執行結果依照範例輸出格式寫入"branchResult.txt"中。
暫存器初始化為以下所示:假設宣告一般暫存器$0 ~ $9,共10個暫存器。
名稱 | Reg | Reg | Reg | Reg | Reg |
---|---|---|---|---|---|
暫存器編號 | $0 | $1 | $2 | $3 | $4 |
初始值 | 0 | 9 | 5 | 7 | 1 |
暫存器編號 | $5 | $6 | $7 | $8 | $9 |
初始值 | 2 | 3 | 4 | 5 | 6 |
資料記憶體初始化為以下所示:
名稱 | Reg | Reg | Reg | Reg | Reg |
---|---|---|---|---|---|
記憶體位址 | 0x00 | 0x04 | 0x08 | 0x0C | 0x10 |
初始值 | 5 | 9 | 4 | 8 | 7 |
PS.指令記憶體的初始位址由「0」開始。
再次強調 請勿抄襲
這是個人作業,接受討論但不接受共同完成,討論不會造成你們的程式碼一樣。 由於上次作業有不少抄襲情況 我們最後決定不處理,但如果這次作業被發現抄襲者,我們會去看你上次作業有無抄襲,如果有就是連上次的作業一併扣分,抄襲者及被抄者都給予1分,不接受任何討價還價。
(抄襲比對會連同歷屆的、網路上找得到的版本、github上的版本)