內容案例教案_第1頁
內容案例教案_第2頁
內容案例教案_第3頁
內容案例教案_第4頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

5CPU2019年6月6I/OVerilogquartus20MIPS5段流水CPU設計。采用I/O統(tǒng)一編址方式,即將輸入輸出的I/O地址空間,作為數據存I/OlwDE2實驗板上的按鍵等輸入設備信息。即將外部設備狀態(tài),讀到CPU內部寄存器。利用設計的I/O端口,通過sw指令,輸出對DE2實驗板上的LED從CPU內部的寄存器,寫入到外部設備的相應控制寄存器(或可直利用自己編寫的程序代碼,在自己設計的CPU上,實現對板載輸入LED7段LED數碼管顯示出來。4bit4bit二進制輸入相加,利用兩LED10進制形式顯示“和”等(具體任務形式不做MIPS20供以上兩種指令集(MIPS和Y86)應用功能的程序設計代碼,并提DE1-SOC就能夠實現一個5段流水CPU。首先我仔細觀察了5段流水線的CPU設flush信號,清10pipepcpipepc模塊的主要作用是在時鐘上升沿時,將下一條指令的地址( 寫入pc。為IF階段從instructionrom正確的下一條指令做準備。當resetn信號下降沿時,需要將pc復位到-4。需要注意的是,wpcir為低電平時,代表流水線因為lw指令發(fā)生了數據,需要插入一條nop指令。對 modulepipepc(,wpcir,clock,resetn,pc [31:0] clock,resetn output[31:0] [31:0] always@(negedgeresetnorposedge if(resetn== pc<= if(wpcir!=pc; 18pipeifpipeif模塊的主要作用就是根據pc值取出下一條指令。總體的代碼與單周期cpu中的非常相似。其中 _mux需要的四個信號產生在流水線需要注意的是mem_clock與單周期cpu有較大區(qū)別。因為需要給pc信號 modulepipeif(pcsource,pc,bpc,da,jpc,,pc4,ins,mem_clock [31:0]pc,bpc,jpc, output[31:0],pc4,ins6 [31:0],pc4,ins mux4x32_mux(pc4,bpc,da,jpc,pcsource, assignpc4=pc+ sc_instmemimem(pc,ins,mem_clock11pipeirpipeir模塊就是IF/ID階段的段間寄存器。在時鐘上升沿處寫入寄存時,flush為高電平,需要清空這一條讀入的指令。1modulepipeir(pc4,ins,wpcir,flush,clock,resetn,dpc4,inst2 pc4,ins3wpcir,flush,clock,resetn4outputdpc4,inst56 dpc4,inst7 always@(posedgeclockornegedge if(resetn== dpc4<= inst<= if(wpcir!= dpc4<= if(flush==0)inst<= elseinst<= 23pipeid及控制信號的產生。從寄存器堆中取數據與單周期cpu較為類似(時鐘信號需要注意。pipeif3pc的來源(bpc,jpc,da)也在而cu才是關鍵中的關鍵,需要用來管理等操作。我在著手編寫程所有的控制信號都應該與wpcirwpcir信號為低電判斷數據時,需要辨別當前的指令是r型、i型還是j型,它們指fwdafwdb的表達式可以通過分析,直接通過組合邏輯給出,不一定要按課件的偽代碼一樣通過if判斷。按照上述思路,完成cu的編寫后,pipeid模塊中其他部分并不, modulepipeid(mwreg,mrn,ern,ewreg,em2reg,mm2reg,dpc4, wrn,wdi,ealu,malu,mmo,wwreg,clock, bpc,jpc,pcsource,wpcir,flush,dwreg,dm2reg,dwmem, daluimm,da,db,dimm,drn,dshift,djal56mrn,ern,7mm2reg,em2reg,mwreg,ewreg,wwreg,clock,8inst,wdi,ealu,malu,mmo, output[31:0]bpc,dimm,jpc,da, output wpcir,flush,dwreg,dm2reg,dwmem,daluimm,dshift,djal;q1,q2,da,fwda,rsrtequ=(da==regrt,e=sext&instdimm={{16{e}},jpc={dpc4[31:28],inst[25:0],1’offset={{14{e}},inst[15:0],1’bpc=dpc4+reg_clock= regfilerf(inst[25:21],inst[20:16],wdi,wrn,wwreg,reg_clock,resetn,q1,q2); mux4x32da_mux(q1,ealu,malu,mmo,fwda,da mux4x32db_mux(q2,ealu,malu,mmo,fwdb,db mux2x5rn_mux(inst[15:11],inst[20:16],regrt,drn sc_cucu(inst[31:26],inst[5:0],rsrtequ,dwmem,dwreg,regrt,dm2reg,daluc,dshift,daluimm,pcsource,djal,sext,wpcir,flush,inst[25:21],inst[20:16],mrn,mm2reg,mwreg,ern,em2reg,ewreg,fwda,fwdb);32cucpu中提供的代碼完1modulesc_cu(op,func,rsrtequ,wmem,wreg,regrt,m2reg,aluc,shift aluimm,pcsource,jal,sext,wpcir,flush,rs,rt,mrn,mm2reg,mwreg,ern,em2reg,ewreg,fwda, assignwpcir=~(em2reg&(~(i_j|i_jal)&(r_type&ern==rt|ern==rs)));5 assignflush=(i_beq&rsrtequ)|(i_bne&~rsrtequ7 assignpcsource[1]=i_jr|i_j|i_jal assignpcsource[0]=(i_beq&rsrtequ)|(i_bne&~rsrtequ)||i_jal assignwreg=wpcir&(i_add|i_sub|i_and|i_or|i_xor i_sll|i_srl|i_sra|i_addi|i_andi i_ori|i_xori|i_lw| | assignaluc[3]=wpcir& assignaluc[2]=wpcir&(i_sub|i_or|i_lui|i_srl|i_sra| assignaluc[1]=wpcir&(i_xor|i_lui|i_sll|i_srl|i_sra| assignaluc[0]=wpcir&(i_and|i_or|i_sll|i_srl|i_sra|i_andi|i_ori); assign =wpcir&(i_sll|i_srl| assignaluimm=wpcir&(i_addi|i_andi|i_ori|i_xori|i_lw| assign =wpcir&(i_addi|i_lw|i_sw|i_beq| assignwmem=wpcir& assignm2reg=wpcir& assignregrt =wpcir&(i_addi|i_andi|i_ori|i_xori|i_lw| =wpcir& assignfwda[1]=~(ewreg&(ern!=0)&(ern==rs)&~em2reg)&(mwreg&(mrn!=0)&(mrn==rs)); assignfwda[0]=(ewreg&(ern!=0)&(ern==rs)&~em2reg)|(mwreg&(mrn!=0)&(mrn==rs)&mm2reg); assignfwdb[1]=~(ewreg&(ern!=0)&(ern==rt)&~em2reg)&(mwreg&(mrn!=0)&(mrn==rt)); assignfwdb[0]=(ewreg&(ern!=0)&(ern==rt)&~em2reg)|(mwreg&(mrn!=0)&(mrn==rt)&mm2reg);32pipederegpipederegID/EX段間寄存器,并無值得贅述的部分,完全就pipeexe1modulepipeexe(ealuc,ealuimm,ea,eb,eimm,eshift,ern0,epc4,ejalern,ealu [31:0]ea,eb,eimm, ealuimm,eshift,ejal output[31:0] output [31:0]a,b,r [31:0]epc8=epc4+ [4:0]ern=ern0| mux2x32a_mux(ea,eimm,eshift,a mux2x32b_mux(eb,eimm,ealuimm,b mux2x32ealu_mux(r,epc8,ejal,ealu al_unit(a,b,ealuc,r15pipeemregpipeemregEX/MEM段間寄存器,同樣沒有值得贅述的部分,pipememipemem經完成了IO唯一值得注意的就是時鐘信號,此前實驗的代碼中write_enable=we也就是clock下降沿處。因此,在寫入時,恰好write_enable也處于跳變過 問題。因此只要簡單地令write_enable=we即可,這樣做的一個前提是,we50MHz的頻率下并不構除此以外,sc_datamem模塊及其調用的模塊與單周期實驗中完全相1modulepipemem(resetn,mwmem,malu,mb,clock,mem_clock,mmo,in_port0,in_port1,in_port2,out_port0,out_port1,out_port2);2mwmem,clock,3 malu,mb,in_port0,in_port1,45outputmmo,out_port0,out_port1,6mem_clock= sc_datamemdmem(resetn,malu,mb,mmo,mwmem,mem_clock,in_port0,in_port1,in_port2,out_port0,out_port1,8pipemwregpipemwregMEM/WB由于I/O部分的代碼與上次實驗中完全相同,因此不再一一展示。直接進入

溫馨提示

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

評論

0/150

提交評論