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

下載本文檔

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

文檔簡(jiǎn)介

電子科技大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院標(biāo)準(zhǔn)實(shí)驗(yàn)報(bào)告(實(shí)驗(yàn))課程名稱:計(jì)算機(jī)構(gòu)成原理實(shí)驗(yàn)電子科技大學(xué)教務(wù)處制表電子科技大學(xué)實(shí)驗(yàn)

報(bào)告學(xué)生姓名:郫縣尼克楊

學(xué)號(hào):

2014

指導(dǎo)教師:陳虹實(shí)驗(yàn)地址:主樓

A2-411

實(shí)驗(yàn)時(shí)間:

12周-15

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

R型指令、I

型指令和

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

)接口連結(jié),其連八、實(shí)驗(yàn)步驟一個(gè)CPU主要由ALU(運(yùn)算器)、控制器、存放器堆、取指零件及其余基本功能零件等構(gòu)成。?在本實(shí)驗(yàn)中基本功能零件主要有:32位2選1多路選擇器、5位2選1多路選擇器、32位存放器堆、ALU等。(一)新建工程(NewProject)啟動(dòng)ISEDesignSuite13.4軟件,而后選擇菜單File→NewProject,彈出NewProjectWizard對(duì)話框,在對(duì)話框中輸入工程名CPU,并指定工作路徑D:\Single_Cycle_CPU。(二)基本功能器件的設(shè)計(jì)與實(shí)現(xiàn)(1)多路選擇器的設(shè)計(jì)與實(shí)現(xiàn)a.5位2選1多路選擇器(MUX5_2_)1的設(shè)計(jì)與實(shí)現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:MUX5_2_,1而后輸入其實(shí)現(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)境中,對(duì)模塊MUX5_2_1進(jìn)行綜合(Synthesize),綜合結(jié)果以下圖:在ISE集成開發(fā)環(huán)境中,對(duì)模塊MUX5_2_1進(jìn)行仿真(Simulation)。輸入以下測(cè)式代碼: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而后進(jìn)行仿真,仿真結(jié)果以下圖:b.32位2選1多路選擇器的設(shè)計(jì)與實(shí)現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:MUX32_2_,1而后輸入其實(shí)現(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)境中,對(duì)模塊MUX32_2_1進(jìn)行綜合(Synthesize),綜合結(jié)果以下圖:在ISE集成開發(fā)環(huán)境中,對(duì)模塊MUX32_2_1進(jìn)行仿真(Simulation)。第一輸入以下測(cè)式代碼: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而后進(jìn)行仿真,仿真結(jié)果以下圖:(2)符號(hào)擴(kuò)展(Sign_Extender)的設(shè)計(jì)與實(shí)現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:Sign_Extender,而后輸入其實(shí)現(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)境中,對(duì)模塊Sign_Extender進(jìn)行綜合(Synthesize),綜合結(jié)果以下圖。在ISE集成開發(fā)環(huán)境中,對(duì)模塊MUX32_2_1進(jìn)行仿真(Simulation)。第一輸入以下測(cè)式代碼: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而后進(jìn)行仿真,仿真結(jié)果以下圖:(3)32位存放器堆(RegFile)的設(shè)計(jì)與實(shí)現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:RegFile,而后輸入其實(shí)現(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)境中,對(duì)模塊RegFile進(jìn)行綜合(Synthesize),綜合結(jié)果如圖所示。在ISE集成開發(fā)環(huán)境中,對(duì)模塊RegFile進(jìn)行仿真(Simulation)。輸入以下測(cè)式代碼: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而后進(jìn)行仿真,仿真結(jié)果以下圖:(4)運(yùn)算器(ALU)設(shè)計(jì)與實(shí)現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:ALU,而后輸入其實(shí)現(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)境中,對(duì)模塊ALU進(jìn)行綜合(Synthesize),綜合結(jié)果以下圖:在ISE集成開發(fā)環(huán)境中,對(duì)模塊ALU進(jìn)行仿真(Simulation)。輸入以下測(cè)式代碼: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而后進(jìn)行仿真,仿真結(jié)果以下圖:(5)控制器(Controller)的設(shè)計(jì)與實(shí)現(xiàn)為了簡(jiǎn)化設(shè)計(jì),控制器由控制單元Control和控制單元ALUop構(gòu)成,控制器構(gòu)造以下所示。a.Control的設(shè)計(jì)與實(shí)現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:Control,而后輸入其實(shí)現(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)境中,對(duì)模塊Control進(jìn)行綜合(Synthesize),綜合結(jié)果如圖:在ISE集成開發(fā)環(huán)境中,對(duì)模塊Control進(jìn)行仿真(Simulation)。第一輸入以下測(cè)式代碼: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而后進(jìn)行仿真,仿真結(jié)果以下圖:b.ALUop的設(shè)計(jì)與實(shí)現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:ALUop,而后輸入其實(shí)現(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)境中,對(duì)模塊ALUop進(jìn)行綜合(Synthesize),綜合結(jié)果如圖:在ISE集成開發(fā)環(huán)境中,對(duì)模塊ALUop進(jìn)行仿真(Simulation)。第一輸入以下測(cè)式代碼: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而后進(jìn)行仿真,仿真結(jié)果如圖所:c.將Control與ALUop封裝成Controller在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:Controller,而后輸入其實(shí)現(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)境中,對(duì)模塊集成開發(fā)環(huán)境中,對(duì)模塊

ControllerController

進(jìn)行綜合(Synthesize進(jìn)行仿真(Simulation

),綜合結(jié)果如圖:)。第一輸入以下測(cè)式代碼: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而后進(jìn)行仿真,仿真結(jié)果以下圖:(6)取指電路的設(shè)計(jì)與實(shí)現(xiàn)取指電路需達(dá)成ADD32、PC存放器、多路選擇器和左移兩位模塊,進(jìn)而實(shí)現(xiàn)該取指電路。a.ADD32的設(shè)計(jì)與實(shí)現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:ADD32,而后輸入其實(shí)現(xiàn)代碼:MODULEADD32(INPUT[31:0]OUTPUT[31:0]

A,C

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

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

進(jìn)行綜合(Synthesize

),綜合結(jié)果如圖:b.左移兩位模塊(Left_2_Shifter)的設(shè)計(jì)與實(shí)現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:Left_2_Shifter,而后輸入其實(shí)現(xiàn)代碼:MODULELEFT_2_SHIFTER(INPUT[31:0]D,OUTPUT[31:0]O);={[29:0],2'00};ASSIGNODBENDMODULE在ISE集成開發(fā)環(huán)境中,對(duì)模塊Controller進(jìn)行綜合(Synthesize),綜合結(jié)果如圖:c.綜合取指電路(Fetch)的設(shè)計(jì)與實(shí)現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:Fetch,而后輸入其實(shí)現(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)境中,對(duì)模塊Fetch進(jìn)行綜合(Synthesize),綜合結(jié)果如圖:在ISE集成開發(fā)環(huán)境中,對(duì)模塊Fetch進(jìn)行仿真(Simulation)。第一輸入以下測(cè)式代碼: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而后進(jìn)行仿真,仿真結(jié)果以下圖:(7)數(shù)據(jù)通路Data_Flow的設(shè)計(jì)與實(shí)現(xiàn)除掉指令儲(chǔ)存器InstructionROM、數(shù)據(jù)儲(chǔ)存器DATAMEM,將節(jié)余的電路封裝成一個(gè)單周期的CPU數(shù)據(jù)通路(Data_Flow)模塊。在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:Data_Flow,而后輸入其實(shí)現(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)境中,對(duì)模塊Controller進(jìn)行綜合(Synthesize),綜合結(jié)果如圖:在ISE集成開發(fā)環(huán)境中,對(duì)模塊Data_Flow進(jìn)行仿真(Simulation)。第一輸入以下測(cè)式代碼: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號(hào)0號(hào)存放器內(nèi)容相加保留到5號(hào)存放INST=32'H應(yīng)為零ADD器,履行后MW,MR應(yīng)為零,B_DATA#100;=1;CLOCK#100;=0;CLOCK#100;8CB10000;//I,,5號(hào)與立刻數(shù)符號(hào)擴(kuò)展相加作為地址,將內(nèi)存INST=32'單元內(nèi)容HLW送到9號(hào)存放器,履行:DATA#100;LOCK=1;C#100;LOCK=0;C#100INST=32'HACA00000;//I,SW,5號(hào)與立刻數(shù)符號(hào)擴(kuò)展相加作為地址,將0號(hào)存放器的內(nèi)容送到內(nèi)存單元,履行://MR應(yīng)為0,MW應(yīng)為1,B_DATA應(yīng)為0號(hào)存放器內(nèi)容0#100;CLOCK=1;#100;RESET=0;ADDSTIMULUSHEREENDENDMODULE而后進(jìn)行仿真,仿真結(jié)果以下圖:(8)InstructionROM的設(shè)計(jì)與實(shí)現(xiàn)假設(shè)一個(gè)只有32個(gè)32位單元的指令儲(chǔ)存器,因?yàn)橹蛔x無需寫入,因此能夠設(shè)置為簡(jiǎn)化的32個(gè)wire型變量,每個(gè)變量可被賦值為一條指令。在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:Inst_ROM,而后輸入其實(shí)現(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)境中,對(duì)模塊Inst_ROM進(jìn)行綜合(Synthesize),綜合結(jié)果如圖:在ISE集成開發(fā)環(huán)境中,對(duì)模塊Inst_ROM進(jìn)行仿真(Simulation)。第一輸入以下測(cè)式代碼: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而后進(jìn)行仿真,仿真結(jié)果如圖:(9)DataMem模塊的設(shè)計(jì)與實(shí)現(xiàn)關(guān)于實(shí)驗(yàn)而言,32個(gè)32位單元的數(shù)據(jù)儲(chǔ)存器已知足需求(實(shí)質(zhì)狀況應(yīng)當(dāng)是以字節(jié)編址)。因?yàn)樾枰A舨懭霐?shù)據(jù),因此應(yīng)設(shè)置32個(gè)reg型變量,要求初始化0、1、2號(hào)單元的內(nèi)容為2、3、5。在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:data_mem,而后輸入其實(shí)現(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)境中,對(duì)模塊data_mem進(jìn)行綜合(Synthesize),綜合結(jié)果如圖:(10)MainBoard模塊的設(shè)計(jì)與實(shí)現(xiàn)在ISE集成開發(fā)環(huán)境中,在工程管理區(qū)隨意地點(diǎn)單擊鼠標(biāo)右鍵,在彈出的菜單中選擇NewSource命令,創(chuàng)立一個(gè)VerilogModule模塊,名稱為:MainBoard,而后輸入其實(shí)現(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論