MIPS單周期CPU實(shí)驗(yàn)報(bào)告_第1頁(yè)
MIPS單周期CPU實(shí)驗(yàn)報(bào)告_第2頁(yè)
MIPS單周期CPU實(shí)驗(yàn)報(bào)告_第3頁(yè)
MIPS單周期CPU實(shí)驗(yàn)報(bào)告_第4頁(yè)
MIPS單周期CPU實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、計(jì)算機(jī)組成原理實(shí)驗(yàn)中山大學(xué)SU% 1 AT-Sts ILlMVtKsm計(jì)算機(jī)組成原理實(shí)驗(yàn)(實(shí)驗(yàn)二)學(xué)院名稱:專業(yè)(班級(jí)):學(xué)生姓名:學(xué)號(hào):時(shí)間:2017 年 11 月 25 日實(shí)驗(yàn)二:?jiǎn)沃芷贑PU設(shè)計(jì)與實(shí)現(xiàn)實(shí)驗(yàn)?zāi)康?1)掌握單周期CPU數(shù)據(jù)通路圖的構(gòu)成、原理及其設(shè)計(jì)方法;(2)掌握單周期CPU的實(shí)現(xiàn)方法,代碼實(shí)現(xiàn)方法;(3)認(rèn)識(shí)和掌握指令與 CPU的關(guān)系;(4)掌握測(cè)試單周期 CPU的方法;(5)掌握單周期CPU的實(shí)現(xiàn)方法。實(shí)驗(yàn)內(nèi)容設(shè)計(jì)一個(gè)單周期的MIPSCPU ,使其能實(shí)現(xiàn)下列指令:=算術(shù)運(yùn)算指令(1) add rd , rs, rt (說(shuō)明:以助記符表示,是匯編指令;以代碼表示,是機(jī)器指令

2、)000000rs(5 位)rt(5 位)rd(5 位)reserved功能:rdrs + rt 。reserved為預(yù)留部分,即未用,一般填"0"。(2) addi rt , rs , immediate000001rs(5 位)rt(5 位)immediate (16 位)功能:rtrs + (sign-extend) immediate ; immediate符號(hào)擴(kuò)展再參加"加”運(yùn)算。(3) sub rd , rs , rt000010rs(5 位)rt(5 位)rd(5 位)reserved功能:rdrs - rt=邏輯運(yùn)算指令(4) ori rt , r

3、s , immediate010000rs(5 位)rt(5 位)immediate (16 位)功能:rtrs | (zero-extend) immediate ; immediate 做"0"擴(kuò)展再參加"或"運(yùn)算(5) and rd , rs , rt010001rs(5 位)rt(5 位)rd(5 位)reserved功能:rdrs & rt ;邏輯與運(yùn)算。(6) or rd , rs , rt010010rs(5 位)rt(5 位)rd(5 位)reserved功能:rdrs | rt ;邏輯或運(yùn)算。=移位指令 sll rd, rt,s

4、a011000未用rt(5 位)rd(5 位)sareserved功能:rd rt(zero-extend)sa ,左移 sa 位=比較指令(zero-extend)sa(8) slt rd, rs, rt帶符號(hào)數(shù)011100rs(5 位)rt(5 位)rd(5 位)reserved功能:if (rsrt) rd =1 else rd=0,具體請(qǐng)看表2 ALU 運(yùn)算功能表,帶符號(hào)=存儲(chǔ)器讀/寫(xiě)指令(9) sw rt , immediate( rs) 與存南命100110rs(5 位)rt(5 位)immediate (16 位)功能: memoryrs+ (sign-extend) immed

5、iate rt ; immediate符號(hào)擴(kuò)展再相加。即將rt寄存器的內(nèi)容保存到rs寄存器內(nèi)容和立即數(shù)符號(hào)擴(kuò)展后的數(shù)相加作為地址的內(nèi)存單元 中。(10) lw rt , immediate (rs)讀存儲(chǔ)器100111rs(5 位)rt(5 位)immediate (16 位)功能:rt memoryrs + (sign-extend) immediate ; immediate符號(hào)擴(kuò)展再相加。即讀取rs寄存器內(nèi)容和立即數(shù)符號(hào)擴(kuò)展后的數(shù)相加作為地址的內(nèi)存單元中的數(shù),然后 保存到rt寄存器中。=分支指令(11) beq rs,rt, immediate110000rs(5 位)rt(5 位)im

6、mediate (16 位)功能:if(rs=rt) pc -pc + 4 + (sign-extend) immediate <<2 else pc pc + 4特別說(shuō)明:immediate 是從PC+4地址開(kāi)始和轉(zhuǎn)移到的指令之間指令條數(shù)。immediate符號(hào)擴(kuò)展之后左移 2位再相加。為什么要左移 2位?由于跳轉(zhuǎn)到的指令地址肯定是4的倍數(shù)(每條指令占4個(gè)字節(jié)),最低兩位是“00”,因此將immediate 放進(jìn)指令碼中的時(shí)候, 是右移了 2位的,也就是以上說(shuō)的“指令之間指令條數(shù)”。12 ) bne rs,rt, immediate110001rs(5 位)rt(5 位)imme

7、diate功能:if(rs!=rt) pc -pc + 4 + (sign-extend)immediate 2else pc pc + 4特別說(shuō)明:與beq不同點(diǎn)是,不等時(shí)轉(zhuǎn)移,相等時(shí)順序執(zhí)行。(13) bgtz rs, immediate110010rs(5 位)00000immediate功能:if(rs>0) pc -pc + 4 + (sign-extend) immediate <<2 else pc pc + 4=跳轉(zhuǎn)指令(14) j addr111000addr27.2=停機(jī)指令(15) halt11111100000000000000000000000000

8、(26位)功能:停機(jī);不改變 PC的值,PC保持不變。三.實(shí)驗(yàn)原理1 .時(shí)間周期:?jiǎn)沃芷贑PU指的是一條指令的執(zhí)行在一個(gè)時(shí)鐘周期內(nèi)完成,然后開(kāi)始下一條指令的執(zhí) 行,即一條指令用一個(gè)時(shí)鐘周期完成。電平從低到高變化的瞬間稱為時(shí)鐘上升沿,兩個(gè)相鄰時(shí)鐘上升沿之間的時(shí)間間隔稱為一個(gè)時(shí)鐘周期。時(shí)鐘周期一般也稱振蕩周期(如果晶振的輸出沒(méi)有經(jīng)過(guò)分頻就直接作為 CPU的工作時(shí)鐘,則時(shí)鐘周期就等于振蕩周期。若振蕩周期經(jīng)二分頻后形成 時(shí)鐘脈沖信號(hào)作為CPU的工作時(shí)鐘,這樣,時(shí)鐘周期就是振蕩周期的兩倍。)CPU在處理指令時(shí),一般需要經(jīng)過(guò)以下幾個(gè)步驟:(1)取指令(IF):根據(jù)程序計(jì)數(shù)器 PC中的指令地址,從存儲(chǔ)器中取

9、出一條指令,同時(shí), PC根據(jù)指令字長(zhǎng)度自動(dòng)遞增產(chǎn)生下一條指令所需要的指令地址,但遇到“地址轉(zhuǎn)移”指令 時(shí),則控制器把“轉(zhuǎn)移地址”送入 PC,當(dāng)然得到的“地址”需要做些變換才送入PC。(2)指令譯碼(ID):對(duì)取指令操作中得到的指令進(jìn)行分析并譯碼,確定這條指令需要完 成的操作,從而產(chǎn)生相應(yīng)的操作控制信號(hào),用于驅(qū)動(dòng)執(zhí)行狀態(tài)中的各種操作。(3)指令執(zhí)行(EXE):根據(jù)指令譯碼得到的操作控制信號(hào),具體地執(zhí)行指令動(dòng)作,然后 轉(zhuǎn)移到結(jié)果寫(xiě)回狀態(tài)。(4)存儲(chǔ)器訪問(wèn)(MEM ):所有需要訪問(wèn)存儲(chǔ)器的操作都將在這個(gè)步驟中執(zhí)行,該步驟給出存儲(chǔ)器的數(shù)據(jù)地址,把數(shù)據(jù)寫(xiě)入到存儲(chǔ)器中數(shù)據(jù)地址所指定的存儲(chǔ)單元或者從存儲(chǔ)器中

10、得 到數(shù)據(jù)地址單元中的數(shù)據(jù)。(5)結(jié)果寫(xiě)回(WB):指令執(zhí)行的結(jié)果或者訪問(wèn)存儲(chǔ)器中得到的數(shù)據(jù)寫(xiě)回相應(yīng)的目的寄存 器中。單周期CPU ,是在一個(gè)時(shí)鐘周期內(nèi)完成這五個(gè)階段的處理。取指令.IF-4指令執(zhí)行,EXE-4存儲(chǔ)滯訪訶V 一結(jié)果寫(xiě)PkMEM-WB.圖1單周期CPU指令處理過(guò)程對(duì)于不同的指令,需要執(zhí)行的步驟是不同的,其中取字指令( lw)需要執(zhí)行全部五個(gè)步驟。因此,CPU的時(shí)間周期由取字指令決定。2 .指令類型:MIPS的三種指令類型:R類型:3126 2521 2016 1511 10650Oprsrtrdsafunct6位 5位 5位 5位 5位 6位I類型,3126 2521 2016

11、150oprsrtimmediate6位5位5位16位J類型: 3126 250opaddress6位26位其中,op :為操作碼;rs:只讀。為第1個(gè)源操作數(shù)寄存器, 寄存器地址(編號(hào))是0000011111, 001F ;rt :可讀可寫(xiě)。為第2個(gè)源操作數(shù)寄存器,或目的操作數(shù)寄存器,寄存器地址(同上);rd :只寫(xiě)。為目的操作數(shù)寄存器,寄存器地址(同上);sa :為位移量(shift amt ),移位指令用于指定移多少位;funct :為功能碼,在寄存器類型指令中( R類型)用來(lái)指定指令的功能與操作碼配合 使用;immediate :為16位立即數(shù),用作無(wú)符號(hào)的邏輯操作數(shù)、有符號(hào)的算術(shù)操作

12、數(shù)、數(shù)據(jù) 加載(Load ) /數(shù)據(jù)保存(Store )指令的數(shù)據(jù)地址字節(jié)偏移量和分支指令中相對(duì)程序計(jì)數(shù) 器(PC)的有符號(hào)偏移量;address :為地址。在本CPU設(shè)計(jì)中,由于指令的類型較少,所以所有指令均由操作碼( op)確定。在R 型指令中,功能碼(funct )為000000 。3 .控制線路圖與數(shù)據(jù)通路:PCIftSMerrHWCLKIDatalnIns. MEMR電就I 口齒V 阻Read ReglRead R即2Write RegRegister FileRead Cata2,匹Ladd nz 九4 口, 0 IPC4 *wme DaiaMRD IWRDAddrDatfli M

13、EMDa La Ou I!Catah上圖為CPU的數(shù)據(jù)通路和必要的控制線路圖,其中Ins.Mem 為指令存儲(chǔ)器,Data.Mem為數(shù)據(jù)存儲(chǔ)器。訪問(wèn)存儲(chǔ)器時(shí),先給出內(nèi)存地址,然后由讀或?qū)懶盘?hào)控制操作。對(duì)于寄存器 組,先給出寄存器地址,讀操作時(shí),輸出端就直接輸出相應(yīng)數(shù)據(jù);而在寫(xiě)操作時(shí),在WE使能信號(hào)為1 ,在時(shí)鐘邊沿觸發(fā)將數(shù)據(jù)寫(xiě)入寄存器。4 .控制信號(hào):控制信號(hào)的作用控制信號(hào)名狀態(tài)“ 0”狀態(tài)“1 ”Reset初始化PC為0PC接收新地址PCWrePC 7、更改,相關(guān)指令:haltPC更改,相關(guān)指令:除指令 halt外ALUSrcA來(lái)自寄存器堆datal輸出,相關(guān)指令:add、sub、addi、o

14、r、and、 ori、beq、bne、bgtz、slt、sw、lw來(lái)自移位數(shù)sa,同時(shí),進(jìn)行(zero-extend)sa ,即270,sa,相關(guān)指令:sllALUSrcB來(lái)自寄存器堆data2輸出,相關(guān)指令:add、sub、or、and、sll、slt、 beq、bne、bgtz來(lái)自sign或zero擴(kuò)展的立即數(shù),相關(guān)指令: addi、ori、sw、lwDBDataSrc來(lái)自ALU運(yùn)算結(jié)果的輸出,相關(guān)指令:add、addi、sub、ori、or、and、slt、sll來(lái)自數(shù)據(jù)存儲(chǔ)器(Data MEM )的輸 出,相關(guān)指令:lwRegWre無(wú)寫(xiě)寄存器組寄存器,相關(guān)指令:beq、bne、bgtz

15、、sw、halt、j寄存器組寫(xiě)使能,相關(guān)指令:add、addi、sub、ori、or、and、slt、sll、 lwInsMemRW寫(xiě)指令存儲(chǔ)器讀指令存儲(chǔ)器(Ins. Data)/RD讀數(shù)據(jù)存儲(chǔ)器,相關(guān)指令:lw輸出高阻態(tài)/WR寫(xiě)數(shù)據(jù)存儲(chǔ)器,相關(guān)指令:sw無(wú)操作RegDst寫(xiě)寄存器組寄存器的地址,來(lái)自rt字段,相關(guān)指令:addi、ori、lw寫(xiě)寄存器組寄存器的地址,來(lái)自 rd字 段,相關(guān)指令:add 、 sub 、 and 、 or、 slt、sllExtSel(zero-extend) immediate (0 擴(kuò)展),相關(guān)指令:ori(sign-extend) immediate(#擴(kuò)展)

16、,相關(guān)指令: addi、sw、lw、bne、 bne、bgtzPCSrc1.000 : pc< pc+4 ,相關(guān)指令:add、addi、sub、or、ori、and、slt、 sll、sw、lw、beq(zero=0)、bne(zero=1)、bgtz(sign=1 ,或 zero=1);01 : pc< pc+4+(sign-extend) immediate , 相關(guān)指令: beq(zero=1)、 bne(zero=0) 、bgtz(sign=0 , zero=0);10 : pc< (pc+4)31.28,addr27.2,0,0,相關(guān)指令:j;11 :未用ALUOp

17、2.0ALU 8種運(yùn)算功能選擇(000-111),看功能表ALU功能表ALUOp2.0功能描述000Y = A + B加001Y = A - B減010Y = B<<AB左移A位011Y = A V B或100Y = A A B與101Y= (A<B ) ?1: 0比較A與B 小帶符號(hào)110if (A<B &&(A31 = B31)Y = 1;else if ( A31 && 舊31)Y = 1;else Y = 0;比較A與B 帶符號(hào)111Y = A © B異或附:本CPU的指令集并未用到ALU的全部功能。5 .主要模塊接口說(shuō)

18、明:Instruction Memory :指令存儲(chǔ)器,address ,指令存儲(chǔ)器地址輸入端口Dataln ,指令存儲(chǔ)器數(shù)據(jù)輸入端口(指令代碼輸入端口)DataOut ,指令存儲(chǔ)器數(shù)據(jù)輸出端口(指令代碼輸出端口)InsMemRW ,指令存儲(chǔ)器讀寫(xiě)控制信號(hào),為 0寫(xiě),為1讀Data Memory :數(shù)據(jù)存儲(chǔ)器,address ,數(shù)據(jù)存儲(chǔ)器地址輸入端口DataOut ,數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)輸出端口/RD ,數(shù)據(jù)存儲(chǔ)器讀控制信號(hào),為 。讀/WR ,數(shù)據(jù)存儲(chǔ)器寫(xiě)控制信號(hào),為 0寫(xiě)Register File :寄存器組Read Reg1 , rs寄存器地址輸入端口Read Reg2 , rt寄存器地址輸入端

19、口Write Reg ,將數(shù)據(jù)寫(xiě)入的寄存器端口,其地址來(lái)源 rt或rd字段Write Data ,寫(xiě)入寄存器的數(shù)據(jù)輸入端口Read Datal , rs寄存器數(shù)據(jù)輸出端口Read Data2 , rt寄存器數(shù)據(jù)輸出端口WE ,寫(xiě)使能信號(hào),為1時(shí),在時(shí)鐘邊沿觸發(fā)寫(xiě)入RST ,寄存器清零信號(hào),為 0時(shí)寄存器清零ALU :算術(shù)邏輯單元result , ALU運(yùn)算結(jié)果zero ,運(yùn)算結(jié)果標(biāo)志,結(jié)果為 0,則zero=1 ;否則zero=0sign ,運(yùn)算結(jié)果標(biāo)志,結(jié)果最高位為0,則sign=0 ,正數(shù);否則,sign=1 ,負(fù)數(shù)四.實(shí)驗(yàn)器材電腦一臺(tái),Xilinx Vivado軟件一套,Basys3板一

20、塊。五.實(shí)驗(yàn)過(guò)程與結(jié)果1.各個(gè)指令對(duì)應(yīng)的控制信號(hào)指令PCWreALUSrcAALUSrcBDBDataSrcRegWreInsMemRWRDWRRegDstExtSelAdd100011111XAddi1010111101Sub100011111XOri1010111100And100011111XOr100011111XSll110011111XSlt100011111XSw101X0110X1Lw1011110101Beq100X0111X1Bne100X0111X1Bgtz100X0111X1J1XXX0111XXHalt0XXX0111XX控制信號(hào)ALUOpAdd000Addi000S

21、ub001Ori011And100Or011Sll010Slt110Sw000Lw000Beq001Bne001Bgtz101J010HaltXXX除異或運(yùn)算(111 )外,ALU所有功能均被使用。PCSrc指令00add、addi、sub、or、ori、and、slt、sll、sw、lw、beq(zero=0) 、bne(zero=1)、 bgtz(sign=1 ,或 zero=1)01beq(zero=1)、bne(zero=0) 、bgtz(sign=0 , zero=0)10j2.主要模塊代碼及仿真(1 )控制單元 C control unit )Verilog 代碼:1. modul

22、e controlUnit(2. input 5:0 opcode,3. input zero,4. input sign,5. output reg PCWre,6. output reg ALUSrcA,7. output reg ALUSrcB,8. output reg DBDataSrc,9. output reg RegWre,10. output reg InsMemRW,11. output reg RD,12. output reg WR,13. output reg RegDst,14. output reg ExtSel,15. output reg 1:0 PCSrc,

23、16. output reg 2:0 ALUOp17. );18. initial begin19. RD = 1;20. WR = 1;21. RegWre =0;22. InsMemRW = 0;23. end24.25.26.27.28.29.30.31.32.33.34.35.36.37.always (opcode) begincase (opcode)6'b000000:begin / addPCWre = 1;ALUSrcA = 0;ALUSrcB = 0;DBDataSrc = 0;RegWre = 1;InsMemRW = 1;RD = 1;WR = 1;RegDst

24、 = 1;ALUOp = 3'b000;end38. 6'b000001:begin /addi39. PCWre = 1;40. ALUSrcA = 0;41. ALUSrcB = 1;42. DBDataSrc =0;43. RegWre = 1;44. InsMemRW =1;45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.RD = 1;WR=1;RegDst

25、 = 0;ExtSel = 1;ALUOp = 3'b000;end6'b000010:beginsubPCWre = 1;ALUSrcA = 0;ALUSrcB = 0;DBDataSrc = 0;RegWre = 1;InsMemRW = 1;RD = 1;WR = 1;RegDst = 1;ALUOp = 3'b001;end6'b010000:beginoriPCWre = 1;ALUSrcA = 0;ALUSrcB = 1;DBDataSrc = 0;RegWre = 1;InsMemRW = 1;RD = 1;WR = 1;RegDst = 0;Ex

26、tSel = 0;ALUOp = 3'b011;end6'b010001:begin/andPCWre = 1;ALUSrcA = 0;ALUSrcB = 0;DBDataSrc = 0;RegWre = 1;InsMemRW = 1;RD = 1;WR = 1;RegDst = 1;ALUOp = 3'b100;end6'b010010:begin/or89.90.91.92.93.94.95.96.97.98.99.100.101.102.103.104.105.106.107.108.109.110.111.112.113.114.115.116.117.

27、118.119.120.121.122.123.124.125.126.127.128.129.130.131.132.PCWre = 1;ALUSrcA = 0;ALUSrcB = 0;DBDataSrc = 0;RegWre = 1;InsMemRW = 1;RD = 1;WR = 1;RegDst = 1;ALUOp = 3'b011;end6'b011000:begin sllPCWre = 1;ALUSrcA = 1;ALUSrcB = 0;DBDataSrc = 0;RegWre = 1;InsMemRW = 1;RD = 1;WR = 1;RegDst = 1;A

28、LUOp = 3'b010;end6'b011100:begin sltPCWre = 1;ALUSrcA = 0;ALUSrcB = 0;DBDataSrc = 0;RegWre = 1;InsMemRW = 1;RD = 1;WR = 1;RegDst = 1;ALUOp = 3'b110;end6'b100110:begin /swPCWre = 1;ALUSrcA = 0;ALUSrcB = 1;RegWre = 0;InsMemRW = 1;RD = 1;WR = 0;ExtSel =1;133.134.135.136.137.138.139.140.

29、141.142.143.144.145.146.147.148.149.150.151.152.153.154.155.156.157.158.159.160.161.162.163.164.165.166.167.168.169.170.171.172.173.174.175.176.ALUOp = 3'b000;end6'b100111:begin lwPCWre = 1;ALUSrcA = 0;ALUSrcB = 1;DBDataSrc = 1;RegWre = 1;InsMemRW = 1;RD = 0;WR = 1;RegDst = 0;ExtSel = 1;ALUO

30、p = 3'b000;end6'b110000:begin beqPCWre = 1;ALUSrcA = 0;ALUSrcB = 0;RegWre = 0;InsMemRW = 1;RD = 1;WR = 1;ExtSel = 1;ALUOp = 3'b001;end6'b110001:begin bnePCWre = 1;ALUSrcA = 0;ALUSrcB = 0;RegWre = 0;InsMemRW = 1;RD = 1;WR = 1;ExtSel = 1;ALUOp = 3'b001;end6'b110010:beginPCWre =

31、 1;ALUSrcA = 0;ALUSrcB = 0;RegWre = 0;InsMemRW = 1;RD = 1;177.178.179.180.181.182.183.184.185.186.187.188.189.190.191.192.193.194.195.196.197.198.199.200.201.202.203.204.205.206.207.208.209.210.211.212.213.214.215.216.217.218.219.220.WR = 1;ExtSel = 1;ALUOp = 3'b001;end6'b111000:begin /jPCWr

32、e = 1;RegWre = 0;InsMemRW = 1;RD = 1;WR = 1;ALUOp = 3'b010;end6'b111111:begin /haltPCWre = 1;RegWre = 0;InsMemRW = 1;RD = 1;WR = 1;enddefault :beginRD = 1;WR = 1;RegWre = 0;InsMemRW = 0;endendcaseendalways(opcode or zero or sign) begin if (opcode = 6'b111000)/jPCSrc = 2'b10;else if (

33、opcode5:3 = 3'b110) beginif (opcode2:0 = 3'b000) beginif 億ero = 1)PCSrc = 2'b01;elsePCSrc = 2'b00;endelse if (opcode2:0 = 3'b001) begin if 億ero = 0)PCSrc = 2'b01;elsePCSrc = 2'b00;endelse begin221. if 億ero = 0 && sign = 0)222. PCSrc = 2'b01;223. else224. PCSrc

34、 = 2'b00;225. end226. end227. else begin228. PCSrc = 2'b00;229. end230. end231. endmodule仿真截圖:(2)程序計(jì)數(shù)器(PC)Verilog 代碼:1. modulePC(2. inputclk,3. input31:0 PCin,4. inputPCWre,5. inputReset,6. output reg 31:0PCout7. );8. initial begin9. PCout <= 0;10. end11. always(posedge clk) begin12. if (

35、Reset = 0) begin13. PCout <= 0;14. end15. else if (PCWre = 0) begin16. PCout <= PCout;17. end18.else begin19. PCout <= PCin;20. end21. end22. endmodule仿真截圖:(3)程序存儲(chǔ)器(instruction memory )Verilog 代碼:1. module IMemory(2. input InsMemRW,3. input 31:0 address,4. output reg 31:0 DataOut5. );6. reg

36、 7:0 mem 0:127;7. initial begin8. DataOut = 32'b111111_0000000_0000000_0000000_00000;9. $readmemb( "C:/Users/ACER/Desktop/-p/project_1/rom_data.coe", mem);10. end11. always(address or InsMemRW) begin12. if (InsMemRW = 1) begin13. DataOut31:24 <= memaddress;14. DataOut23:16 <= mem

37、address+1;15. DataOut15:8 <= memaddress+2;16. DataOut7:0 <= memaddress+3;17. end18. end19. endmodule仿真截圖:Uki,.嗎,L | |2Q p<HQ «慳?1的ELT! i I, IIWO M |1 I i I . u I n 1平苦1! !1恒明燦NMODIODOi。也 MOd10DM01«J,on叫04|»:1姻:我|GO:C<K>:iL: NdiXIOOi-1 1 | /IF/simDataOij-rSI :CI NOLlOOSD

38、-M L J1,11II11L _r _(4) ALUVerilog 代碼:1. module ALU(2. input 2:0 ALUopcode,3. input 31:0 rega,4. input 31:0 regb,5. output reg 31:0 result,6. output zero,7. output sign8. );9. assign zero = (result=0)?1:0;10. assign sign = result31;11. always ( ALUopcode or rega or regb ) begin12. case (ALUopcode)13

39、. 3'b000:result=rega+ regb;14. 3'b001:result=rega- regb;15. 3'b010:result=regb<< rega;16. 3'b011:result=rega| regb;17. 3'b100:result=rega& regb;18. 3'b101:result=(rega< regb)?1:0;/不帶符號(hào)比較19. 3'b110 : begin /帶符號(hào)比較20. if (rega<regb &&( rega31 = 0 &

40、;& regb31=0) |21. (rega31 = 1 && regb31=1) result = 1;22. else if (rega31 = 0 && regb31=1) result = 0;23. else if ( rega31 = 1 && regb31=0) result = 1;24. else result = 0;25. end26. 3'b111 :result=regaA regb;27. endcase28. end29. endmodule仿真截圖:慳產(chǎn)J . 一iiao us .I1呼"

41、;.111130 u .I|嗯F 一|1150 U!.n| m ALITq /.小良口口門(mén)雄31閨Q Hl F43U.lt ,JL : DjCOXOXrZQOWK總口'JMQM 帕 a.:QMMQQI .:MMQQQ".L轉(zhuǎn)外轉(zhuǎn) j:叩MQQQI.FFFFFFH:叫 MQQQIJ:附附加罐::帥的前:tttttttt j00000000''-ODDDDDDI.'ODDOQQQQ:'-DDDDDDDI.:-CDDDDDDD'' DOODOOQl:-ffffEffdITTTTTTTTf!-'I' 1 1 1 1TTT

42、回!'1!'1Is'I'11L11(5)寄存器堆Verilog 代碼:1. moduleRegFile(2. inputCLK,3. inputRST,4. inputRegWre,5. input4:0 ReadRegl,6. input4:0 ReadReg2,7. input4:0 WriteReg,8. input31:0 WriteData,9. output 31:0 ReadData1,10. output 31:0 ReadData211. );12. reg 31:0 regFile1:31;/ 寄存器定義必須用reg 類型13. intege

43、r i;14. assign ReadData1 = (ReadReg1 = 0) ? 0 : regFileReadReg1;/ 讀寄存器數(shù)據(jù)15. assign ReadData2 = (ReadReg2 = 0) ? 0 : regFileReadReg2;16. always (negedge CLK) begin/ 必須用時(shí)鐘邊沿觸發(fā)17. if (RST=0) begin18. for (i=1;i<32;i=i+1)19. regFilei <= 0;20. end21. else if (RegWre = 1 && WriteReg != 0) be

44、gin22. regFileWriteReg <= WriteData;23. end24. end25.26. endmodule仿真截圖:N Ttl41t200 D.t,1刖。uxIEOO ax.1IEOO 3.TIIIII.cu01|1111-1_r-1I 1_1_1 I_r.K5T0Li140i1 RMdM|lbA:<00;iI;:3DCNjK W 1 K.MKc 盤(pán)(4:0DCK入1V1 !_MJ:旬BX *X *31 帕1£ 加通“即陽(yáng)OC4MKOa3,頓鐘:涮闡期_x tOOWQCiJ1:;,碗則m_I - R>>ulP«t*L 31:

45、 dQWOWWQMQI如口:NQQMQI.DCIQOMODIqqimiqq一IQWMO :MOMWIkH0DI00D"X"IdDMODi?皿£>0D £時(shí)口 iifliao :*1111(6)數(shù)據(jù)存儲(chǔ)單元(Data Memory )Verilog 代碼:1. module DataMemory(2. input clk,3. input 31:0 address,4. input RD,5. input WR,6. input 31:0 Dataln,7. output 31:0 DataOut8. );9.10. reg 7:0 ram0:127

46、;11. integer i;12. initial begin;13. for (i=0;i<128;i=i+1)14. rami<=0;15. end16. / output17. assign DataOut7:0 = (RD = 0)? ramaddress+3:8'bz;18. assign DataOut15:8 = (RD = 0)? ramaddress+2:8'bz;19. assign DataOut23:16 = (RD = 0)? ramaddress+1:8'bz;20. assign DataOut31:24 = (RD = 0)

47、? ramaddress:8'bz;21. / input22. always(negedge clk) begin23. if (WR = 0) begin24. if (address>=0 && address<128) begin25. ramaddress <= DataIn31:24;26. ramaddress+1 <= DataIn23:16;27. ramaddress+2 <= DataIn15:8;28. ramaddress+3 <= DataIn7:0;29. end30. end31. end32. end

48、module仿真截圖:3.測(cè)試程序:測(cè)試程序如下:地址匯編程序指令代碼op(6)rs(5)rt(5)rd(5)/immediate (16)16進(jìn)制數(shù)代碼0x00000000addi $1,$0,800000100000000010000 0000 0000 10000401 00080x00000004ori $2,$0,201000000000000100000 0000 0000 00104002 00020x00000008add $3,$2,$1000000000100000100011 00000 0000000041 18000X0000000Csub $5,$3,$200001

49、0000110001000101 00000 0000000862 28000x00000010and $4,$5,$2010001000110001000100 00000 0000004462 20000x00000014or $8,$4,$2010010001000001001000 00000 0000004882 40000x00000018sll $8,$8,1011000000000100001000 00001 0000006008 40400x0000001cbne $8,$1,-2(毛轉(zhuǎn)18)11000101000000011111 1111 1111 1110C501 FFFE0x00000020slt $6,$2,$1011100000100000100110 00000 0000007041 30000x00000024slt $7,$6,$0011100001100000000111 00000 00000070C0 38000x00000028addi $7,$7,80000010011100111000

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論