電子科大-系統(tǒng)結(jié)構(gòu)實(shí)驗(yàn)-解決控制冒險(xiǎn)_第1頁(yè)
電子科大-系統(tǒng)結(jié)構(gòu)實(shí)驗(yàn)-解決控制冒險(xiǎn)_第2頁(yè)
電子科大-系統(tǒng)結(jié)構(gòu)實(shí)驗(yàn)-解決控制冒險(xiǎn)_第3頁(yè)
電子科大-系統(tǒng)結(jié)構(gòu)實(shí)驗(yàn)-解決控制冒險(xiǎn)_第4頁(yè)
電子科大-系統(tǒng)結(jié)構(gòu)實(shí)驗(yàn)-解決控制冒險(xiǎn)_第5頁(yè)
已閱讀5頁(yè),還剩4頁(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、實(shí)驗(yàn)報(bào)告課程名稱:計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)實(shí)驗(yàn)學(xué)院:計(jì)算機(jī)科學(xué)與工程學(xué)院專(zhuān)業(yè):計(jì)算機(jī)科學(xué)與技術(shù)指導(dǎo)教師:好老師學(xué)生姓名:愛(ài)學(xué)習(xí)的大哥哥 2014666666666實(shí)驗(yàn)成績(jī):日期:2017年5月26日電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 電 子 科 技 大 學(xué)實(shí) 驗(yàn) 報(bào) 告一、 實(shí)驗(yàn)項(xiàng)目名稱:解決控制冒險(xiǎn)二、 實(shí)驗(yàn)室名稱:主樓A2-412 實(shí)驗(yàn)時(shí)間:2017年5月26日三、 實(shí)驗(yàn)?zāi)康脑诮o出的流水線代碼基礎(chǔ)上,增加ID級(jí)關(guān)閉寫(xiě)使能信號(hào),以解決不正確分支指令的影響。通過(guò)完成這次實(shí)驗(yàn),加深對(duì)控制冒險(xiǎn)現(xiàn)象的產(chǎn)生和消除控制冒險(xiǎn)的原理的理解,提高編程和測(cè)試的能力。四、 實(shí)驗(yàn)原理(一) 轉(zhuǎn)移相關(guān)問(wèn)題轉(zhuǎn)移指令改變程序順序執(zhí)行的

2、特性。由于是流水線操作,在轉(zhuǎn)移發(fā)生之前,若干條轉(zhuǎn)移指令的后續(xù)指令已被取到流水線處理機(jī)中。這就是所謂的轉(zhuǎn)移相關(guān)問(wèn)題(branch hazard),有時(shí)也稱之為控制相關(guān)問(wèn)題(control hazard)。回顧我們前面介紹的處理轉(zhuǎn)移相關(guān)問(wèn)題的4種技術(shù):以上任何一種方法都會(huì)使硬件固定,編譯時(shí)會(huì)根據(jù)硬件機(jī)制和轉(zhuǎn)移行為對(duì)代碼進(jìn)行調(diào)度,以獲取最佳性能。(二) 消除無(wú)條件轉(zhuǎn)移指令的后一條指令影響每條指令在ID時(shí)判斷在當(dāng)前在EXE階段的操作碼暫存器的值是否是無(wú)條件轉(zhuǎn)移指令:如果是,那么不使能當(dāng)前在ID階段的那條指令的WZ、WMEM和WREG的信號(hào),這樣這條指令的執(zhí)行就對(duì)程序的邏輯沒(méi)有影響。(三) 條件轉(zhuǎn)移指令

3、條件轉(zhuǎn)移指令的實(shí)現(xiàn)思想與無(wú)條件轉(zhuǎn)移指令有所類(lèi)似,但不完全相同。首先對(duì)于條件轉(zhuǎn)移指令本身來(lái)說(shuō),需要判斷Z標(biāo)志是否能用。若Z標(biāo)志還沒(méi)有準(zhǔn)備好,則要暫停流水線一個(gè)時(shí)鐘周期。這一點(diǎn)和判斷數(shù)據(jù)相關(guān)極為相似。但由于轉(zhuǎn)移指令只可能改變PC而不改變其它狀態(tài),因此用不著封鎖WZ,WMEM,WREG(對(duì)轉(zhuǎn)移指令來(lái)講,這些信號(hào)原本就為0)。因?yàn)槿绻幵谧g碼級(jí)的是條件轉(zhuǎn)移指令,而且處在EXE級(jí)的是ALU類(lèi)型的指令(就要寫(xiě)Z標(biāo)志到流水線寄存器Z了),則要等到ALU指令寫(xiě)完Z后,再判斷轉(zhuǎn)移與否,為此要暫停一個(gè)周期(或者如前所述,插入一條nop指令)。對(duì)于條件轉(zhuǎn)移指令的下一條指令的處理辦法與無(wú)條件指令不同。因?yàn)闂l件轉(zhuǎn)移的下

4、一條指令有可能執(zhí)行也有可能不執(zhí)行,需要在對(duì)無(wú)條件轉(zhuǎn)移指令的處理策略上進(jìn)行擴(kuò)展:條件轉(zhuǎn)移的下一條指令在ID時(shí)判斷在當(dāng)前在EXE階段的操作碼暫存器的值是否是條件轉(zhuǎn)移指令并且判斷是否轉(zhuǎn)移成功(Z的值沒(méi)變),如果發(fā)現(xiàn)成功,那么不使能當(dāng)前在ID階段的那條指令的WZ、WMEM和WREG的信號(hào),這條指令的執(zhí)行就對(duì)程序的邏輯沒(méi)有影響(與無(wú)條件處理方式相同);如果發(fā)現(xiàn)轉(zhuǎn)移不成功,說(shuō)明本條指令為有效指令,使能當(dāng)前在ID階段的那條指令的WZ、WMEM和WREG的信號(hào),本條指令正常執(zhí)行。五、 實(shí)驗(yàn)內(nèi)容在給出的流水線代碼基礎(chǔ)上,增加ID級(jí)關(guān)閉寫(xiě)使能信號(hào),以解決不正確分支指令的影響。六、 實(shí)驗(yàn)器材(設(shè)備、元器件)ISE

5、Design Suite 14.7集成開(kāi)發(fā)環(huán)境,編程語(yǔ)言:Verilog HDL硬件描述語(yǔ)言七、 實(shí)驗(yàn)步驟1、新建項(xiàng)目,將上個(gè)實(shí)驗(yàn)完成的解決數(shù)據(jù)冒險(xiǎn)與數(shù)據(jù)前推的代碼拷貝進(jìn)來(lái)2、在直接跳轉(zhuǎn)中,需要廢除跳轉(zhuǎn)指令的下一條(當(dāng)譯碼出跳轉(zhuǎn)指令時(shí),下一條已經(jīng)流出,所以要廢除掉);而在條件跳轉(zhuǎn)中,需要根據(jù)z的值來(lái)判斷是否廢除下一條指令。在代碼中譯碼級(jí),pcsource定義如下assign pcsource1=i_jr|i_j|i_jal;/選擇下一條指令的地址,00選PC+4,01選轉(zhuǎn)移地址,10選寄存器內(nèi)地址,11選跳轉(zhuǎn)地址assign pcsource0=i_beq&rsrtequ|i_bne&

6、amp;rsrtequ|i_j|i_jal;LOADDEPEN,BTAKEN,ID_branch );如果是直接跳轉(zhuǎn),那么一定廢除,pcsource=11,如果是條件跳轉(zhuǎn),廢除的條件就是pcsource=01,暫不考慮jr指令,那么要廢除下一條指令的條件就是pcsource=00;3、在頂層模塊添加變量wire wz;/決定是否寫(xiě)z值wire 1:0 exepcsource;/exe pcsource 主要用在條件跳轉(zhuǎn)wz需要在id級(jí)計(jì)算出來(lái),然后傳遞到exe級(jí),如果廢除指令那么wz=0;exepcsource與之相反,從exe級(jí)傳遞到id級(jí),用來(lái)指示下一條指令是否廢除。4、增加這兩個(gè)變量后,

7、頂層模塊 id級(jí)與exe級(jí)的代碼如下pipeid id_stage (dpc4,inst, /指令譯碼ID級(jí) wrn,wdi,wwreg,clock,resetn, bpc,jpc,pcsource,dwreg,dm2reg,dwmem,daluc,daluimm,da,db,dimm,drn,dshift,djal,z, ern,mrn,ewreg,mwreg,idadepend,idbdepend,em2reg,wpc,exepcsource,wz); pipeexe exe_stage (wz,ealuc,ealuimm,ea,eb,eimm,eshift,ern0,epc4,/指令執(zhí)行

8、EXE ejal,ern,ealu,z, malu,wmo,exeadepend,exebdepend); 5、加入exepcsource后,根據(jù)步驟2的分析,如果pcsource!=00,就廢除掉下一條指令,即wreg、wmem、wz全部置0,這里需要注意的是,wz的值有多種表示方法,由于wz只在控制冒險(xiǎn)中使用,并且在控制冒險(xiǎn)中wreg=wmem=wz,所以這里可以直接將wreg的值賦給wz,也可以wz=exepcsource0(pcsource0=i_beq&rsrtequ|i_bne&rsrtequ|i_j|i_jal,在條件跳轉(zhuǎn)中pcsource0= i_beq&

9、;rsrtequ|i_bne)assign wreg=(i_add|i_sub|i_mul|i_and|i_or|i_xor|i_sll| /wreg為1時(shí)寫(xiě)寄存器堆中某一寄存器,否則不寫(xiě) i_srl|i_sra|i_addi|i_muli|i_andi|i_ori|i_xori| i_lw|i_lui|i_jal) & wpc & (exepcsource0=0) & (exepcsource1=0);assign wmem=i_sw & wpc & (exepcsource0=0) & (exepcsource1=0);/為1時(shí)寫(xiě)存儲(chǔ)器,否則

10、不寫(xiě)assign wz=wregid級(jí)cu模塊完整代碼如下:module pipeidcu(rsrtequ,func, op,wreg,m2reg,wmem,aluc,regrt,aluimm, sext,pcsource,shift,jal, /*數(shù)據(jù)前推加入的參數(shù)*/ exe_rd,mem_rd,exe_wreg,mem_wreg,idadepend,idbdepend,rs,rt,rd,exe_m2reg,wpc,exepcsource,wz ); input 1:0 exepcsource; input 4:0 exe_rd,mem_rd,rs,rt,rd; input exe_wre

11、g,mem_wreg,exe_m2reg; output 1:0 idadepend,idbdepend; output wpc; /wreg 是否寫(xiě)寄存器 /dm2reg為1時(shí)將存儲(chǔ)器數(shù)據(jù)寫(xiě)入寄存器,否則將ALU結(jié)果寫(xiě)入寄存器 /dwmem為1時(shí)寫(xiě)存儲(chǔ)器,否則不寫(xiě) /daluimm為1時(shí)ALUb輸入端使用立即數(shù) /dshift為1時(shí)ALUa輸入端使用移位位數(shù) /djal為1時(shí)執(zhí)行jal指令,否則不是 input rsrtequ; input 5:0 func,op; output wz,wreg,m2reg,wmem,regrt,aluimm,sext,shift,jal; output 4

12、:0 aluc; output 1:0 pcsource; wire i_add,i_sub,i_mul,i_and,i_or,i_xor,i_sll,i_srl,i_sra,i_jr; /對(duì)指令進(jìn)行譯碼 wire i_addi,i_muli,i_andi,i_ori,i_xori,i_lw,i_sw,i_beq,i_bne,i_lui,i_j,i_jal;and(i_add,op5,op4,op3,op2,op1,op0,func2,func1,func0);and(i_sub,op5,op4,op3,op2,op1,op0,func2,func1,func0);and(i_mul,op5,

13、op4,op3,op2,op1,op0,func2,func1,func0);and(i_and,op5,op4,op3,op2,op1,op0,func2,func1,func0);and(i_or,op5,op4,op3,op2,op1,op0,func2,func1,func0);and(i_xor,op5,op4,op3,op2,op1,op0,func2,func1,func0);and(i_sra,op5,op4,op3,op2,op1,op0,func2,func1,func0);and(i_srl,op5,op4,op3,op2,op1,op0,func2,func1,func

14、0);and(i_sll,op5,op4,op3,op2,op1,op0,func2,func1,func0);and(i_jr,op5,op4,op3,op2,op1,op0,func2,func1,func0); and(i_addi,op5,op4,op3,op2,op1,op0); and(i_muli,op5,op4,op3,op2,op1,op0); and(i_andi,op5,op4,op3,op2,op1,op0); and(i_ori,op5,op4,op3,op2,op1,op0); and(i_xori,op5,op4,op3,op2,op1,op0); and(i_l

15、w,op5,op4,op3,op2,op1,op0); and(i_sw,op5,op4,op3,op2,op1,op0); and(i_beq,op5,op4,op3,op2,op1,op0); and(i_bne,op5,op4,op3,op2,op1,op0); and(i_lui,op5,op4,op3,op2,op1,op0); and(i_j,op5,op4,op3,op2,op1,op0); and(i_jal,op5,op4,op3,op2,op1,op0); wire i_rs=i_add|i_sub|i_mul|i_and|i_or|i_xor|i_jr|i_addi|i_

16、muli| i_andi|i_ori|i_xori|i_lw|i_sw|i_beq|i_bne; wire i_rt=i_add|i_sub|i_mul|i_and|i_or|i_xor|i_sra|i_srl|i_sll|i_sw|i_beq|i_bne; /控制信號(hào)的生成/ assign wreg=(i_add|i_sub|i_mul|i_and|i_or|i_xor|i_sll| /wreg為1時(shí)寫(xiě)寄存器堆中某一寄存器,否則不寫(xiě) i_srl|i_sra|i_addi|i_muli|i_andi|i_ori|i_xori| i_lw|i_lui|i_jal) & wpc &

17、 (exepcsource0=0) & (exepcsource1=0); assign regrt=i_addi|i_muli|i_andi|i_ori|i_xori|i_lw|i_lui; /regrt為1時(shí)目的寄存器是rt,否則為rd assign jal=i_jal; /為1時(shí)執(zhí)行jal指令,否則不是 assign m2reg=i_lw; /為1時(shí)將存儲(chǔ)器數(shù)據(jù)寫(xiě)入寄存器,否則將ALU結(jié)果寫(xiě)入寄存器 assign shift=i_sll|i_srl|i_sra;/為1時(shí)ALUa輸入端使用移位位數(shù) assign aluimm=i_addi|i_muli|i_andi|i_ori|i

18、_xori|i_lw|i_lui|i_sw;/為1時(shí)ALUb輸入端使用立即數(shù) assign sext=i_addi|i_muli|i_lw|i_sw|i_beq|i_bne;/為1時(shí)符號(hào)拓展,否則零拓展 assign aluc4=i_sra;/ALU的控制碼 assign aluc3=i_sub|i_or|i_ori|i_xor|i_xori| i_srl|i_sra|i_beq|i_bne;/ALU的控制碼 assign aluc2=i_sll|i_srl|i_sra|i_lui;/ALU的控制碼 assign aluc1=i_and|i_andi|i_or|i_ori|i_xor|i_xo

19、ri|i_beq|i_bne;/ALU的控制碼 assign aluc0=i_mul|i_muli|i_xor|i_xori|i_sll|i_srl|i_sra|i_beq|i_bne;/ALU的控制碼 assign wmem=i_sw & wpc & (exepcsource0=0) & (exepcsource1=0);/為1時(shí)寫(xiě)存儲(chǔ)器,否則不寫(xiě) /assign wmem=i_sw & wpcir; /判斷相關(guān)性 assign rs1IsReg=i_and | i_andi | i_or | i_ori | i_add | i_addi | i_sub |

20、i_lw | i_sw | i_sll | i_srl | i_sra; assign rs2IsReg=i_and | i_or | i_add | i_sub | i_sll | i_sra | i_srl; assign exe_a_depen=(rs=exe_rd) & (exe_wreg=1) & (rs1IsReg); assign mem_a_depen=(rs=mem_rd) & (mem_wreg=1) & (rs1IsReg); assign exe_b_depen=(rt=exe_rd) & (exe_wreg=1) & (

21、rs2IsReg) | (rd=exe_rd)&(exe_wreg=1)&(i_sw); assign mem_b_depen=(rt=mem_rd) & (mem_wreg=1) & (rs2IsReg) | (rd=mem_rd)&(mem_wreg=1)&(i_sw); assign idadepend0= (mem_a_depen | 0); assign idadepend1=(mem_a_depen | exe_a_depen | 0) ; /a_depen 和 b_depen 信號(hào)全部都需要在暫停流水線時(shí)候跟隨檢測(cè) assign i

22、dbdepend0=(mem_b_depen | aluimm | 0 ); assign idbdepend1=(mem_b_depen | exe_b_depen | 0 ); /b_depen 00 b 01 imm 10 mem_wb 11 wb_c assign stall =(rs=exe_rd) & exe_m2reg & rs1IsReg ) | (rt=exe_rd) & exe_m2reg & rs2IsReg) | (rd=exe_rd ) & exe_wreg & i_sw) | (rd=mem_rd) & mem

23、_wreg & i_sw); assign wz=wreg; assign wpc = stall; assign pcsource1=i_jr|i_j|i_jal;/選擇下一條指令的地址,00選PC+4,01選轉(zhuǎn)移地址,10選寄存器內(nèi)地址,11選跳轉(zhuǎn)地址 assign pcsource0=i_beq&rsrtequ|i_bne&rsrtequ|i_j|i_jal;endmodule八、 實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析(一) 畫(huà)出修改后的流水線圖(二) 寫(xiě)出增加的多路選擇器的選擇信號(hào)邏輯函數(shù)增加的多路選擇器信號(hào)邏輯函數(shù)如下: /加上數(shù)據(jù)前推之后變成四選一的多路器 mux4x32 a

24、lu_ina (ea,sa,malu,wmo,exe_a_depend,alua); mux4x32 alu_inb (eb,eimm,malu,wmo,exe_b_depend,alub); mux2x32 save_pc8(ealu0,epc8,ejal,ealu);/選擇最后ALU結(jié)果的來(lái)源,ejal為0時(shí)是ALU內(nèi)部算出的結(jié)果,為1時(shí)是PC+8 assign ern=ern0|5ejal;/當(dāng)jal指令執(zhí)行時(shí),把返回地址寫(xiě)入31號(hào)寄存器 alu al_unit (alua,alub,ealuc,ealu0,z,wz);/ALU增加的多路選擇器(四選一)的定義如下:module mux4

25、x32(a0,a1,a2,a3,s,y ); input 31:0 a0,a1,a2,a3; input 1:0 s; output 31:0 y; assign y=(s=2'b00)?a0:(s=2'b01)?a1:(s=2'b10)?a2:a3;/四選一endmodule(三)流水線仿真結(jié)果,對(duì)仿真結(jié)果作必要說(shuō)明1. 首先測(cè)試無(wú)條件跳轉(zhuǎn)jump指令,代碼如下 /測(cè)試branch指令(無(wú)條件轉(zhuǎn)移) assign rom6'h00=32'h48000002;/ jump,2; 跳轉(zhuǎn)到 add r3,r1,r2 assign rom6'h01=3

26、2'h28003c62;/ ori r2,r3,15; assign rom6'h02=32'h00100c22;/ add r3,r1,r2; assign rom6'h03=32'h00100c22;/ add r3,r1,r2; assign rom6'h04=32'h00100c22;/ add r3,r1,r2; assign rom6'h05=32'h00000000;在指令中,第一條指令便是一條無(wú)條件跳轉(zhuǎn)指令,要跳轉(zhuǎn)到地址為2 的指令,控制冒險(xiǎn)應(yīng)廢除掉ori指令,即r2不寫(xiě)入r3|15(15),到了add指令時(shí),alu結(jié)果應(yīng)為0運(yùn)行程序,觀察結(jié)果分析一下,在300ns時(shí),計(jì)算出ori指令的值為15,但是并沒(méi)有寫(xiě)入寄存器,因?yàn)樵?00ns時(shí)alu的值為0,故證明了無(wú)條件跳轉(zhuǎn)的控制冒險(xiǎn)消除成功。2. 測(cè)試條件跳轉(zhuǎn)branch,代碼如下 /測(cè)試branch指令的停頓 a

溫馨提示

  • 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)論