計算機組成原理實驗報告單周期CPU的設計與實現(xiàn)_第1頁
計算機組成原理實驗報告單周期CPU的設計與實現(xiàn)_第2頁
計算機組成原理實驗報告單周期CPU的設計與實現(xiàn)_第3頁
計算機組成原理實驗報告單周期CPU的設計與實現(xiàn)_第4頁
計算機組成原理實驗報告單周期CPU的設計與實現(xiàn)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

電子科技大學計算機科學與工程學院標準實驗報告(實驗)課程名稱:計算機構成原理實驗電子科技大學教務處制表電子科技大學實驗

報告學生姓名:郫縣尼克楊

學號:

2014

指導教師:陳虹實驗地址:主樓

A2-411

實驗時間:

12周-15

周一、實驗室名稱:主樓A2-411二、實驗項目名稱:單周期CPU的設計與實現(xiàn)。三、實驗學時:8學時四、實驗原理:(一)概括單周期(SingleCycle)CPU是指CPU從拿出1條指令到履行完該指令只要1個時鐘周期。1個時鐘周期Clock指令0指令1指令2指令4指令5一條指令的履行過程包含:取指令→剖析指令→取操作數(shù)→履行指令→保留結果。關于單周期CPU來說,這些履行步驟均在一個時鐘周期內(nèi)達成。(二)單周期cpu整體電路本實驗所設計的單周期CPU的整體電路構造以下。(三)MIPS指令格式化MIPS指令系統(tǒng)構造有MIPS-32和MIPS-64兩種。本實驗的MIPS指令采納MIPS-32。以下所說的MIPS指令均指MIPS-32。MIPS的指令格式為32位。下列圖給出MIPS指令的3種格式。312625212016151110650R型指令oprsrtrdsafunc312625212016150I型指令oprsrtimmediate3126250J型指令opaddress本實驗只選用了9條典型的MIPS指令來描繪CPU邏輯電路的設計方法。下列圖列出了本實驗的所波及到的9條MIPS指令。五、實驗目的1、掌握單周期CPU的工作原理、實現(xiàn)方法及其構成零件的原理和設計方法,如控制器、運算器等。?2、認識和掌握指令與CPU的關系、指令的履行過程。?3、嫻熟使用硬件描繪語言Verilog、EDA工具軟件進行軟件設計與仿真,以培育學生的剖析和設計CPU的能力。六、實驗內(nèi)容(一)制定本實驗的指令系統(tǒng),指令應包含

R型指令、I

型指令和

J型指令,指令數(shù)為9條。(二)CPU各功能模塊的設計與實現(xiàn)。(三)對設計的各個模塊的仿真測試。(四)整個CPU的封裝與測試。七、實驗器械(設施、元器件):(一)安裝了XilinxISEDesignSuite13.4的PC機一臺(二)FPGA開發(fā)板:AnvylSpartan6/XC6SLX45(三)計算機與FPGA開發(fā)板經(jīng)過JTAG(JointTestActionGroup接方式以下圖。

)接口連結,其連八、實驗步驟一個CPU主要由ALU(運算器)、控制器、存放器堆、取指零件及其余基本功能零件等構成。?在本實驗中基本功能零件主要有:32位2選1多路選擇器、5位2選1多路選擇器、32位存放器堆、ALU等。(一)新建工程(NewProject)啟動ISEDesignSuite13.4軟件,而后選擇菜單File→NewProject,彈出NewProjectWizard對話框,在對話框中輸入工程名CPU,并指定工作路徑D:\Single_Cycle_CPU。(二)基本功能器件的設計與實現(xiàn)(1)多路選擇器的設計與實現(xiàn)a.5位2選1多路選擇器(MUX5_2_)1的設計與實現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:MUX5_2_,1而后輸入其實現(xiàn)代碼:MODULEMUX5_2_1(INPUT[4:0]A,INPUT[4:0]B,INPUTSEL,OUTPUT[4:0]O);ASSIGNO=SEL?B:A;ENDMODULE在ISE集成開發(fā)環(huán)境中,對模塊MUX5_2_1進行綜合(Synthesize),綜合結果以下圖:在ISE集成開發(fā)環(huán)境中,對模塊MUX5_2_1進行仿真(Simulation)。輸入以下測式代碼:MODULEMUX5_2_1_T;INPUTSREG[4:0]

A;REG[4:0]

B;REGSEL;OUTPUTSWIRE[4:0]C;INSTANTIATETHEUNITUNDERTEST(UUT)MUX5_2_1UUT(.A(A),.B(B),.SEL(SEL),.C(C));INITIALBEGININITIALIZEINPUTSA=0;B=0;SEL=0;WAIT100NSFORGLOBALRESETTOFINISH#100;A=5'B10100;B=0;SEL=1;WAIT100NSFORGLOBALRESETTOFINISH#100;A=1;B=5'B10000;SEL=0;WAIT100NSFORGLOBALRESETTOFINISH#100;A=5'B00000;B=5'B11000;ADDSTIMULUSHEREENDENDMODULE而后進行仿真,仿真結果以下圖:b.32位2選1多路選擇器的設計與實現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:MUX32_2_,1而后輸入其實現(xiàn)代碼:MODULEMUX32_2_1(INPUT[31:0]A,INPUT[31:0]B,INPUTSEL,OUTPUT[31:0]O);ASSIGNO=SEL?B:A;ENDMODULE在ISE集成開發(fā)環(huán)境中,對模塊MUX32_2_1進行綜合(Synthesize),綜合結果以下圖:在ISE集成開發(fā)環(huán)境中,對模塊MUX32_2_1進行仿真(Simulation)。第一輸入以下測式代碼:MODULEMUX32_2_1_T;INPUTSREG[31:0]REG[31:0]

A;B;REGSEL;OUTPUTSWIRE[31:0]O;INSTANTIATETHEUNITUNDERTEST(UUT)MUX32_2_1UUT(.A(A),.B(B),.SEL(SEL),.O(O));INITIALBEGINA=0;B=0;SEL=0;WAIT100NSFORGLOBALRESETTOFINISH#100;A=32'H00000001;B=32'H00000000;SEL=1;#100;A=32'H00000101;B=32'H00000010;SEL=0;ADDSTIMULUSHEREENDENDMODULE而后進行仿真,仿真結果以下圖:(2)符號擴展(Sign_Extender)的設計與實現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:Sign_Extender,而后輸入其實現(xiàn)代碼:MODULESIGN_EXTENDER(INPUT[15:0]D,OUTPUT[31:0]O);ASSIGNO=([15:15]==1'0)?{16'0,D[15:0]}:{16'1,D[15:0]};DBBBENDMODULE在ISE集成開發(fā)環(huán)境中,對模塊Sign_Extender進行綜合(Synthesize),綜合結果以下圖。在ISE集成開發(fā)環(huán)境中,對模塊MUX32_2_1進行仿真(Simulation)。第一輸入以下測式代碼:MODULESIGN_EXTENDERT;INPUTSREG[15:0]D;OUTPUTSWIRE[31:0]O;INSTANTIATETHEUNITUNDERTEST(UUT)SIGN_EXTENDERUUT(.D(D),.O(O));INITIALBEGININITIALIZEINPUTSD=0;WAIT100NSFORGLOBALRESETTOFINISH#100;ADDSTIMULUSHERED=16'H0011;#100;D=16'H1011;ENDENDMODULE而后進行仿真,仿真結果以下圖:(3)32位存放器堆(RegFile)的設計與實現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:RegFile,而后輸入其實現(xiàn)代碼:MODULEREGFILE(INPUT[4:0]RN1,RN2,WN,INPUTWRITE,INPUT[31:0]WD,OUTPUT[31:0]A,B,INPUTCLOCK);REG[31:0]REGISTER[1:31];ASSIGNA=(RN1==0)?0:REGISTER[RN1];ASSIGNB=(RN2==0)?0:REGISTER[RN2];ALWAYS@(POSEDGECLOCK)BEGINIF(WRITE&&WN!=0)REGISTER[WN]<=WD;ENDENDMODULE在ISE集成開發(fā)環(huán)境中,對模塊RegFile進行綜合(Synthesize),綜合結果如圖所示。在ISE集成開發(fā)環(huán)境中,對模塊RegFile進行仿真(Simulation)。輸入以下測式代碼:MODULEREGFILE_T;INPUTSREG[4:0]R1;NREG[4:0]RN2;REG[4:0]W;NREGWRITE;W;REG[31:0]DREGCLOCK;OUTPUTSWIRE[31:0]A;WIRE[31:0]B;INSTANTIATETHEUNITUNDERTEST(UUT)REGFILEUUT(.RN1(RN1),.RN2(RN2),.WN(WN),.WRITE(WRITE),.WD(WD),.A(A),.B(B),.CLOCK(CLOCK));INITIALBEGININITIALIZEINPUTSRN1=0;RN2=0;WN=0;WRITE=0;WD=0;CLOCK=0;WAIT100NSFORGLOBALRESETTOFINISH#100;RN1=5'B00001;RN2=5'B00001;WN=5'B00001;WRITE=1;WD=0;CLOCK=0;#100;CLOCK=1;#50;WD=32'HBBBBBBBB;#50;CLOCK=0;#100;CLOCK=1;#100CLOCK=0;ADDSTIMULUSHEREENDENDMODULE而后進行仿真,仿真結果以下圖:(4)運算器(ALU)設計與實現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:ALU,而后輸入其實現(xiàn)代碼:INPUT[31:0]A,B,INPUT[2:0]ALU_OPERATION,[31:0]R,OUTPUTESULTZOUTPUTERO);R=(ALU_==3'000)?A+B:ASSIGNESULTOPERATIONB(ALU_OPERATION==3'B100)?A-B:(ALU_==3'001)?A&B:(ALU_OPERATIONB?A|B:==3'101)OPERATIONB(ALU_OPERATION==3'B010)?A^B:(ALU_==3'110)?{B[15:0],16'0}:OPERATIONBHZ=~|R32'HXXXXXXXX;ASSIGNERO;ESULTENDMODULE在ISE集成開發(fā)環(huán)境中,對模塊ALU進行綜合(Synthesize),綜合結果以下圖:在ISE集成開發(fā)環(huán)境中,對模塊ALU進行仿真(Simulation)。輸入以下測式代碼:MODULEALU_TB;INPUTSREG[31:0]A;REG[31:0]B;;REG[2:0]ALU_OPERATIONOUTPUTSWIRE[31:0]R;ESULTWIREEROZ;INSTANTIATETHEUNITUNDERTEST(UUT)ALUUUT(.A(A),.B(B),.ALU_OPERATION(ALU_OPERATION),.RESULT(RESULT),.ZERO(ZERO));INITIALBEGININITIALIZEINPUTSWAIT100NSFORGLOBALRESETTOFINISH#100;A=1;B=1;ALU_OPERATION=0;ADDSTIMULUSHERE#100A=2;B=2;ALU_OPERATION=4;#100A=1;B=1;ALU_OPERATION=1;#100A=1;B=1;ALU_OPERATION=5;#100A=1;B=1;ALU_OPERATION=2;ENDENDMODULE而后進行仿真,仿真結果以下圖:(5)控制器(Controller)的設計與實現(xiàn)為了簡化設計,控制器由控制單元Control和控制單元ALUop構成,控制器構造以下所示。a.Control的設計與實現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:Control,而后輸入其實現(xiàn)代碼:MODULECONTROL(INPUT[5:0]OP,OUTPUTREGDST,OUTPUTREGWRITE,OUTPUTALUSRC,OUTPUTMEMWRITE,OUTPUTMEMREAD,OUTPUTMEMTOREG,OUTPUTBRANCH,OUTPUT[1:0]ALUCTR);WIREI_RT=~|OP;WIREI_LW=OP[5]WIREI_SW=OP[5]WIREI_BEQ=OP[2]WIREI_LUI=OP[3]ASSIGNREGDST=IASSIGNREGWRITE=I

&~OP[3];&OP[3];~OP[1];OP[2];_RT;_RT|I_LW|I_LUI;ASSIGNALUSRC=I_LW|I_SW|I_LUI;ASSIGNMEMWRITE=I_SW;ASSIGNMEMREAD=I_LW;ASSIGNMEMTOREG=I_LW;ASSIGNBRANCH=I_BEQ;ASSIGNALUCTR[1]=I_RT|I_LUI;ASSIGNALUCTR[0]=I_BEQ|I_LUI;ENDMODULE在ISE集成開發(fā)環(huán)境中,對模塊Control進行綜合(Synthesize),綜合結果如圖:在ISE集成開發(fā)環(huán)境中,對模塊Control進行仿真(Simulation)。第一輸入以下測式代碼:MODULECONTROL_TB;INPUTSREG[5:0]OP;OUTPUTSWIREREGDST;WIREREGWRITE;WIRERCALUS;WIREMEMWRITE;WIREEMEADMR;WIREEMTOEGMR;WIRERANCHB;WIRE[1:0]ALU;CTRINSTANTIATETHEUNITUNDERTEST(UUT)CONTROLUUT(.OP(OP),.REGDST(REGDST),.REGWRITE(REGWRITE),.ALUSRC(ALUSRC),.MEMWRITE(MEMWRITE),.MEMREAD(MEMREAD),.MEMTOREG(MEMTOREG),.BRANCH(BRANCH),.ALUCTR(ALUCTR));INITIALBEGININITIALIZEINPUTSOP=0;WAIT100NSFORGLOBALRESETTOFINISH#100;OP=6'B000000;#100;100011;OP=6'B#100;OP=6'#100;OP=6'

B101011;B000100;#100;OP=6'

B001111;ENDENDMODULE而后進行仿真,仿真結果以下圖:b.ALUop的設計與實現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:ALUop,而后輸入其實現(xiàn)代碼:MODULEALUOP(INPUT[5:0]FUNC,,INPUT[1:0]ALUCTROUTPUT[2:0]ALU_OP);_R=ALU[1]&~ALU[0];WIREITCTRCTRASSIGNALU_OP[2]=(I_RT&((~FUNC[2]&FUNC[1])|(FUNC[2]&FUNC[0])))|ALUCTR[0];ASSIGNALU_[1]=(I_R&[2]&[1])|(ALU[1]&ALU[0]);OPTFUNCFUNCCTRCTRASSIGNALU_OP[0]=(I_RT&FUNC[2]&~FUNC[1]);ENDMODULE在ISE集成開發(fā)環(huán)境中,對模塊ALUop進行綜合(Synthesize),綜合結果如圖:在ISE集成開發(fā)環(huán)境中,對模塊ALUop進行仿真(Simulation)。第一輸入以下測式代碼:MODULEALU_TB;INPUTSREG[31:0]A;REG[31:0]B;;REG[2:0]ALU_OPERATIONOUTPUTSWIRE[31:0]R;ESULTWIREEROZ;INSTANTIATETHEUNITUNDERTEST(UUT)ALUUUT(.A(A),.B(B),.ALU_OPERATION(ALU_OPERATION),.RESULT(RESULT),.ZERO(ZERO));INITIALBEGININITIALIZEINPUTSA=0;B=0;ALU_OPERATION=0;ALU_OPWAIT100NSFORGLOBALRESETTOFINISH#100;A=1;B=1;ALU_OPERATION=0;ADDSTIMULUSHERE#100A=2;B=2;ALU_OPERATION=4;#100A=1;B=1;ALU_OPERATION=1;#100A=1;B=1;ALU_OPERATION=5;#100A=1;B=1;ALU_OPERATION=2;ENDENDMODULE而后進行仿真,仿真結果如圖所:c.將Control與ALUop封裝成Controller在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:Controller,而后輸入其實現(xiàn)代碼:MODULECONTROLLER(INPUTINPUT

[5:0]OP,[5:0]FUNC,OUTPUTREGDST,OUTPUTREGWRITE,OUTPUTALUSRC,OUTPUTMEMWRITE,OUTPUTMEMREAD,OUTPUTMEMTOREG,OUTPUTBRANCH,OUTPUT[2:0]);WIRE[1:0]ALUCTR;RW,ALUS,MW,MR,MR,B,CU0(,RD,ONTROLOPEGSTEGRITERCEMRITEEMEADEMTOEGRANCHALUCTR);ALUOPU1(FUNC,ALUCTR,ALU_OP);ENDMODULE在ISE在ISE

集成開發(fā)環(huán)境中,對模塊集成開發(fā)環(huán)境中,對模塊

ControllerController

進行綜合(Synthesize進行仿真(Simulation

),綜合結果如圖:)。第一輸入以下測式代碼:MODULECONTROLLER_TB;//INPUTSREG[5:0]

OP;REG[5:0]

FUNC;OUTPUTSWIREREGDST;WIREEGRITE;RWWIRERCALUS;WIREMEMWRITE;WIREEMEADMR;WIREMEMTOREG;WIRERANCHB;WIRE[2:0]ALU_;OPINSTANTIATETHEUNITUNDERTEST(UUT)CONTROLLERUUT(.OP(OP),.FUNC(FUNC),.REGDST(REGDST),.REGWRITE(REGWRITE),.ALUSRC(ALUSRC),.MEMWRITE(MEMWRITE),.MEMREAD(MEMREAD),.MEMTOREG(MEMTOREG),.BRANCH(BRANCH),.ALU_OP(ALU_OP));INITIALBEGININITIALIZEINPUTSOP=0;FUNC=0;WAIT100NSFORGLOBALRESETTOFINISH#100;OP=6'B100011;#100OP=6'B101011;#100OP=6'B000100;#100OP=6'B001111;ENDENDMODULE而后進行仿真,仿真結果以下圖:(6)取指電路的設計與實現(xiàn)取指電路需達成ADD32、PC存放器、多路選擇器和左移兩位模塊,進而實現(xiàn)該取指電路。a.ADD32的設計與實現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:ADD32,而后輸入其實現(xiàn)代碼:MODULEADD32(INPUT[31:0]OUTPUT[31:0]

A,C

B,);ASSIGNC=A+B;ENDMODULE在ISE

集成開發(fā)環(huán)境中,對模塊Controller

進行綜合(Synthesize

),綜合結果如圖:b.左移兩位模塊(Left_2_Shifter)的設計與實現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:Left_2_Shifter,而后輸入其實現(xiàn)代碼:MODULELEFT_2_SHIFTER(INPUT[31:0]D,OUTPUT[31:0]O);={[29:0],2'00};ASSIGNODBENDMODULE在ISE集成開發(fā)環(huán)境中,對模塊Controller進行綜合(Synthesize),綜合結果如圖:c.綜合取指電路(Fetch)的設計與實現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:Fetch,而后輸入其實現(xiàn)代碼:MODULEFETCH(INPUTRESET,INPUTCLOCK,INPUT[31:0]B_ADDR,INPUTZ,B,[31:0]ADDROUTPUT);REG[31:0]PC;WIRE[31:0]U0_;OWIRE[31:0]U1_C;WIRE[31:0]U2_C;WIRE[31:0]NEXT_PC;WIRESEL=Z&B;LEFT_2_SHIFTERU0(B_ADDR,U0_O);ADD32U1(PC,4,U1_C);ADD32U2(U1_C,U0_O,U2_C);MUX32_2_1M1(U1_C,U2_C,SEL,NEXT_PC);ASSIGNADDR=PC;ALWAYS@(POSEDGECLOCKORNEGEDGERESET)BEGINIF(RESET==0)PC=0;ELSEPC=NEXT_PC;ENDENDMODULE在ISE集成開發(fā)環(huán)境中,對模塊Fetch進行綜合(Synthesize),綜合結果如圖:在ISE集成開發(fā)環(huán)境中,對模塊Fetch進行仿真(Simulation)。第一輸入以下測式代碼:MODULEFETCH_T;INPUTSREGCLOCK;REGRESET;_;REG[31:0]BADDRREGB;REGZ;OUTPUTSWIRE[31:0]INST;WIRE[31:0]O_ADDR;WIRE[31:0]O_SUM;WIRE[31:0]O_SUM1;INSTANTIATETHEUNITUNDERTEST(UUT)FETCHUUT(.CLOCK(CLOCK),.RESET(RESET),.B_ADDR(B_ADDR),.B(B),.Z(Z),.INST(INST),.O_ADDR(O_ADDR),.O_SUM(O_SUM),.O_SUM1(O_SUM1));INITIALBEGIN//INITIALIZEINPUTSCLOCK=0;RESET=0;B_ADDR=0;B=0;Z=0;WAIT100NSFORGLOBALRESETTOFINISH#100;CLOCK=1;#100;CLOCK=0;#100;CLOCK=1;#100;CLOCK=0;#100;CLOCK=1;#100;CLOCK=0;#100;CLOCK=1;#100;Z=1;B=1;B_ADDR=32'H4;CLOCK=0;#100;CLOCK=1;#100;CLOCK=0;B=0;Z=0;#100;CLOCK=1;#100;CLOCK=0;#100;CLOCK=1;B_ADDR=32'B0;#100;CLOCK=0;#100;RESET=1;CLOCK=1;#100;CLOCK=0;#100;CLOCK=1;#100;CLOCK=0;ADDSTIMULUSHEREADDSTIMULUSHEREENDENDMODULE而后進行仿真,仿真結果以下圖:(7)數(shù)據(jù)通路Data_Flow的設計與實現(xiàn)除掉指令儲存器InstructionROM、數(shù)據(jù)儲存器DATAMEM,將節(jié)余的電路封裝成一個單周期的CPU數(shù)據(jù)通路(Data_Flow)模塊。在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:Data_Flow,而后輸入其實現(xiàn)代碼:MODULEDATA_FLOW(INPUTESETR,INPUTCLOCK,I,INPUT[31:0][31:0]NSTINPUTD,ATAOUTPUTMEMWRITE,OUTPUTMEMREAD,OUTPUT[31:0]RESULT,[31:0]B_,OUTPUTDATA[31:0]NPCOUTPUTEXT);[31:0]B_;WIREADDRWIREZ,B;;WIRERDEGST;WIRERWEGRITEWIREALUS;MRC;WIREREMTOEGWIRE[2:0]ALU_OP;WIRE[31:0]ALU_A,ALU_B;WIRE[4:0]W;NWIRE[31:0]WD;FETCHU0(R,C,B_,Z,B,NPC);ESETLOCKADDREXTCONTROLLERU1(INST[31:26],,INST[5:0],REGDST,REGWRITE,ALUSRC,MWMR,MR,B,ALU_);EMRITEEMEADEMTOEGOPALUU2(ALU_A,ALU_B,ALU_,R,Z);RFU3(I[25:21],IOPESULT,W,ALU_A,B_,C);[20:16],W,RWEGILENST[20:16],NSTNEGRITEDDATALOCKMUX5_2_1U4(II[15:11],RD,W);NSTNSTEGSTNMUX32_2_1U5(B_DATA,B_ADDR,ALUSRC,ALU_B);S_EU6(I[15:0],B_);IGNXTENDERNST,MADDRW);MUX32_2_1U7(NPC,DR,EXTATAEMTOEGDENDMODULE在ISE集成開發(fā)環(huán)境中,對模塊Controller進行綜合(Synthesize),綜合結果如圖:在ISE集成開發(fā)環(huán)境中,對模塊Data_Flow進行仿真(Simulation)。第一輸入以下測式代碼:MODULEDATA_FLOW_TB;INPUTSREGRESET;REGCLOCK;REG[31:0]INST;REG[31:0]D;ATAOUTPUTSWIREMEMWRITE;WIREMEMREAD;R;WIRE[31:0][31:0]ESULTWIREB_;DATAWIRE[31:0]NEXTPC;INSTANTIATETHEUNITUNDERTEST(UUT)DATA_FLOWUUT(.RESET(RESET),.CLOCK(CLOCK),.INST(INST),.DATA(DATA),.MEMWRITE(MEMWRITE),.MEMREAD(MEMREAD),.RESULT(RESULT),.B_DATA(B_DATA),.NEXTPC(NEXTPC));INITIALBEGININITIALIZEINPUTSRESET=0;CLOCK=0;INST=0;DATA=0;WAIT100NSFORGLOBALRESETTOFINISH#100;=1;RESET//#100;00002820;//R型,,0號0號存放器內(nèi)容相加保留到5號存放INST=32'H應為零ADD器,履行后MW,MR應為零,B_DATA#100;=1;CLOCK#100;=0;CLOCK#100;8CB10000;//I,,5號與立刻數(shù)符號擴展相加作為地址,將內(nèi)存INST=32'單元內(nèi)容HLW送到9號存放器,履行:DATA#100;LOCK=1;C#100;LOCK=0;C#100INST=32'HACA00000;//I,SW,5號與立刻數(shù)符號擴展相加作為地址,將0號存放器的內(nèi)容送到內(nèi)存單元,履行://MR應為0,MW應為1,B_DATA應為0號存放器內(nèi)容0#100;CLOCK=1;#100;RESET=0;ADDSTIMULUSHEREENDENDMODULE而后進行仿真,仿真結果以下圖:(8)InstructionROM的設計與實現(xiàn)假設一個只有32個32位單元的指令儲存器,因為只讀無需寫入,因此能夠設置為簡化的32個wire型變量,每個變量可被賦值為一條指令。在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:Inst_ROM,而后輸入其實現(xiàn)代碼:MODULEINST_ROM(INPUT[31:0]ADDRESS,OUTPUT[31:0]INST);WIRE[31:0]RAM[0:31];ASSIGNRAM[0]=32'000000_00001_00010_00011_00000100000;//AND[1]=32'BASSIGNRAM000000_00001_00010_00011_00000100000;//AND[2]=32'BASSIGNRAM100011_00101_10001_0000000000000000;//LWBASSIGNRAM[3]=32'B100011_00101_10010_0000000000000100;//LWASSIGNRAM[4]=32'000000_10001_10010_10001_00000100000;//AND[5]=32'BASSIGNRAM100011_00101_10010_0000000000001000;//LWBASSIGNRAM[6]=32'B000100_10001_10001_0000000000000001;//BEPASSIGNRAM[7]=32'101011_00101_00000_0000000000001100;//SWBASSIGNINST=RAM[ADDRESS[6:2]];ENDMODULE在ISE集成開發(fā)環(huán)境中,對模塊Inst_ROM進行綜合(Synthesize),綜合結果如圖:在ISE集成開發(fā)環(huán)境中,對模塊Inst_ROM進行仿真(Simulation)。第一輸入以下測式代碼:MODULEINST_ROM_TB;INPUTSREG[31:0];ADDRESSOUTPUTSWIRE[31:0]INST;INSTANTIATETHEUNITUNDERTEST(UUT)INST_ROMUUT(.ADDRESS(ADDRESS),.INST(INST));INITIALBEGININITIALIZEINPUTSADDRESS=0;WAIT100NSFORGLOBALRESETTOFINISH#100;ADDRESS=0;#100;ADDRESS=4;#100;ADDRESS=8;#100;ADDRESS=12;#100;ADDRESS=16;#100;ADDRESS=20;#100;ADDRESS=24;#100;ADDRESS=28;ADDSTIMULUSHEREENDENDMODULE而后進行仿真,仿真結果如圖:(9)DataMem模塊的設計與實現(xiàn)關于實驗而言,32個32位單元的數(shù)據(jù)儲存器已知足需求(實質(zhì)狀況應當是以字節(jié)編址)。因為需要保留并寫入數(shù)據(jù),因此應設置32個reg型變量,要求初始化0、1、2號單元的內(nèi)容為2、3、5。在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:data_mem,而后輸入其實現(xiàn)代碼:(A,R,W,DI,C,DO);MODULEDATAMEMDDREADRITEATANLOCKATAUTINPUT[31:0]A;R,WDDRINPUT;EADRITEI;INPUT[31:0]DATANINPUTCLOCK;DO;[31:0]OUTPUTATAUTREG[31:0]RAM[0:31];?[A[6:2]]:32';ASSIGNDO=RATAUTEAD)RAMDDRHXXXXXXXX@(CALWAYSPOSEDGELOCKBEGINRAM[ADDR[6:2]]=WRITE?DATAIN:32'HXXXXXXXX;ENDINTEGERI;INITIALBEGINFOR(I=0;I<32;I=I+1)RAM[I]=I;ENDENDMODULE在ISE集成開發(fā)環(huán)境中,對模塊data_mem進行綜合(Synthesize),綜合結果如圖:(10)MainBoard模塊的設計與實現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點單擊鼠標右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個VerilogModule模塊,名稱為:MainBoard,而后輸入其實現(xiàn)代碼:MODULEAINOARDMB(INPUTLOCKESETC,R,OUTPUT[31:0]INST,OUTPUTC[31:0]P,OUTPUT[31:0]ALUOUT,OUTPUTDATA[31:0]B_);WIRE[31:0]ADDR_FTI;WIRE[31:0]D_DF;ATATWIREMEMWRITE,MEMREAD;WIRE[31:0]R;[31:0]ESULTWIRENPC;EXTC,I,D_DF,MW,MR,R,B_,D_FU0(R,ATALOWESETLOCKNSTATATEMRITEEMEADESULTDATANEXTPC);INST_ROMU1(NEXTPC,INST);DATA_MEMU2(CLOCK,DATA_DTF,B_DATA,RESULT,MEMWRITE,MEMREAD);ASSIGNPC=NEXTPC;ASSIGNALUOUT=RESULT;ENDM

溫馨提示

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

評論

0/150

提交評論