這次的Project是用Verilog來描述一個MiniMIPS的CPU,而我Verilog的編寫又不太熟,所以程式中有相當多的贅行,整個程式看起來亂糟糟的。
特色:
1.Memory 的介面我們使用了市面上的RAM&ROM 所具備的 peripheral interface,包括了RD、WR、雙向的I/O PORT、和Address界面,同時我們也有注意到時序的問題,我們把CPI設為二,於第一個stage取指令,第二個stage時做資料的存取,(類似von Neumann architecture),不讓Memory同時做輸入輸出的動作,當電路合成於FPGA時,能方便地使用外部的記憶體來做program & data的存取。
2.我們在撰寫Behavior的時候相當注重合成規則,盡量使單時脈通過的暫存器數降低,降低時脈交互作用的影響。
3.支援的指令有26條,涵蓋了大部分的基礎常用指令。雖然沒有全部包涵,但是一般的運算和判斷都已經足夠使用了。
4.所有的單元都是獨立並且各擁有其完整的輸入輸出宣告,並有宣告許多觸發旗標,使其在觸發時能執行相對應的動作,對於程式的模組化是有相當大的幫助。
##CONTINUE##
支援的指令如下
instruction | OPcode | Fn | |
---|---|---|---|
lui | 15 | ||
add | 0 | 32 | |
sub | 0 | 34 | |
slt | 0 | 42 | |
addi | 8 | ||
slti | 10 | ||
sll | 0 | 0 | |
srl | 0 | 2 | |
sra | 0 | 3 | use operation “<<<”,which is not support in Verilogger. |
sllv | 0 | 4 | |
srlv | 0 | 6 | |
srav | 0 | 7 | use operation “<<<”,which is not support in Verilogger. |
and | 0 | 36 | |
or | 0 | 37 | |
xor | 0 | 38 | |
nor | 0 | 39 | |
andi | 12 | 0 | |
ori | 13 | 0 | |
xori | 14 | 0 | |
lw | 35 | 0 | |
sw | 43 | 0 | |
j | 2 | ||
jal | 3 | ||
bltz | 1 | rs[31](sign bit) is 1 then branch. | |
beq | 4 | (rs – rt) is 0 then branch. | |
bne | 5 | (rs – rt) is not 0 then branch. | |
詳細的MIPS資料可以參考Wiki的MIPS architecture
程式原始碼可以在這裡下載
ㄉㄉ
回覆刪除= =
回覆刪除