You are on page 1of 8

HW1: 32-bits complete ALU

B10930016 鄭棓文
32-bits Read Only Register File

建立一個RF的module並將位於Addr_1與Addr_2
的資料分別寫入Src_1與Src_2。
32-bits Read Only Register File

1~5 定義每個功能的funct Code

18 將Src_1和Src_2的數值相加並放入ALUResult並將超過32bits的資料放
入Carry
19 將Src_1和Src_2的數值相減並放入ALUResult並將超過32bits的資料放
入Carry
20 將Src_1和Src_2的數值進行Nor運算並把結果放入ALUResult

21 將Src_1的資料左移shamt次並把結果放入ALUResult

22 若funct Code都不符合上述情形,則將ALUResult和Carry設為0

26~33 判斷ALUResult是否等於0,若為0將Zero設為1,否則Zero的數值為0
32-bits Complete ALU

建立一個CompALU的module並將位於Addr_1與
Addr_2的資料分別寫入Src_1與Src_2。
tb_ALU.in

Src_1的資料 Src_2的資料 資料位移量


各項功能代碼

tb_CompALU.in

OP Code Source Target Destination


Register Register Register
Shamt
Funct
tb_RF

上圖為tb_RF的執行結果Addr_1和Addr_2的
結果分別指向對應的暫存器資料

RF.dat Tb_RF.out

上圖為RF.dat裡的參數 上圖為Tb_RF.out裡的參數
5bits的位址分別指向32個暫 Addr_1對應的暫存器資料從
存器其中之一 00開始1f結束,而Addr_2則
如00100指向7FFF_FFFF 反之。
tb_ALU

Addu Subu/Carry Nor Sll Zero Default

上圖為tb_ALU的執行結果,分別用了6行test
command 來測試各項程式功能,舉其中一行為
例Src_1 = 32’h3, Src_2 = 32’h0, shamt = 5’h04,
funct = 6’h21,Src_1的資料會左移4個bits,則
ALUResult = 32’h30, Zero = 0, Carry = 0。

tb_CompALU

Addu Subu/Carry Nor Sll Zero Default


上圖為tb_ALU的執行結果,分別用了6行test
command 來測試各項程式功能,舉其中一行
為例CompALU_instr = 32’h0063008a,則
Source Register = 5’b00011, Target Register =
5’b00011, Destination Register = 5’b00000,
Shamt = 5’b00010, Funct = 6’b001010。而運算
結果為CompALU_data = 32’b0 , Zero = 1,
Carry = 0。
Conclusion
本次作業的目標是用Verilog設計一個32bits的complete ALU,
透過兩個Module加以實現分別為Register和ALU。將
CompALU_instr的指令以R-format的形式拆解成OP Code, Source
Register, Target Register, Destination Register, Shamt, Funct,將
Source Register和Target Register分別指向對應的暫存器資料。將
暫存器的數據通過ALU中不同功能的運算可得ALUResult, Zero,
Carry。其中,Zero代表了ALUResult內的數值是否為0,而Carry
則是判斷ALUResult是否溢位。

Insight
這次做作業的過程中還是遇到了一些困難,由於沒有
寫過Verilog的經驗,但有了範例檔給我很大的協助,使我
了解程式的基本結構,不過許多語法上的使用還花了許多
時間摸索。我印象最為深刻的是Zero flag 的處理,在經
歷多次錯誤後才發現wire和reg在應用上的差別,若要在
always中寫入參數wire是無法實現的。
而處理完成是在撰寫報告時也發現了很多沒搞懂的細
節,例如tb_RF的執行結果再仔細閱讀RF testbench 的程
式後才發現Addr_1和Addr_2是相反方向執行的,以及
CompALU內的資料運行方式也是讓我研究許久的部分。
整體來說有了範例教學後程式撰寫的難度不高,但有
許多細節部分需要再額外加強才能徹底搞懂,透過此次作
業使我了解到Verilog的基本操作以及加強課堂上所學的各
種概念。

You might also like