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