计算机组成原理实验报告单周期CPU的设计与实现_第1页
计算机组成原理实验报告单周期CPU的设计与实现_第2页
计算机组成原理实验报告单周期CPU的设计与实现_第3页
计算机组成原理实验报告单周期CPU的设计与实现_第4页
计算机组成原理实验报告单周期CPU的设计与实现_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子科技大学计算机科学与工程学院标准实验报告(实验)课程名称:计算机构成原理实验电子科技大学教务处制表电子科技大学实验

报告学生姓名:郫县尼克杨

学号:

2014

指导教师:陈虹实验地址:主楼

A2-411

实验时间:

12周-15

周一、实验室名称:主楼A2-411二、实验项目名称:单周期CPU的设计与实现。三、实验学时:8学时四、实验原理:(一)概括单周期(SingleCycle)CPU是指CPU从拿出1条指令到履行完该指令只要1个时钟周期。1个时钟周期Clock指令0指令1指令2指令4指令5一条指令的履行过程包含:取指令→剖析指令→取操作数→履行指令→保留结果。关于单周期CPU来说,这些履行步骤均在一个时钟周期内达成。(二)单周期cpu整体电路本实验所设计的单周期CPU的整体电路构造以下。(三)MIPS指令格式化MIPS指令系统构造有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的工作原理、实现方法及其构成零件的原理和设计方法,如控制器、运算器等。?2、认识和掌握指令与CPU的关系、指令的履行过程。?3、娴熟使用硬件描绘语言Verilog、EDA工具软件进行软件设计与仿真,以培育学生的剖析和设计CPU的能力。六、实验内容(一)制定本实验的指令系统,指令应包含

R型指令、I

型指令和

J型指令,指令数为9条。(二)CPU各功能模块的设计与实现。(三)对设计的各个模块的仿真测试。(四)整个CPU的封装与测试。七、实验器械(设施、元器件):(一)安装了XilinxISEDesignSuite13.4的PC机一台(二)FPGA开发板:AnvylSpartan6/XC6SLX45(三)计算机与FPGA开发板经过JTAG(JointTestActionGroup接方式以下图。

)接口连结,其连八、实验步骤一个CPU主要由ALU(运算器)、控制器、存放器堆、取指零件及其余基本功能零件等构成。?在本实验中基本功能零件主要有:32位2选1多路选择器、5位2选1多路选择器、32位存放器堆、ALU等。(一)新建工程(NewProject)启动ISEDesignSuite13.4软件,而后选择菜单File→NewProject,弹出NewProjectWizard对话框,在对话框中输入工程名CPU,并指定工作路径D:\Single_Cycle_CPU。(二)基本功能器件的设计与实现(1)多路选择器的设计与实现a.5位2选1多路选择器(MUX5_2_)1的设计与实现在ISE集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:MUX5_2_,1而后输入其实现代码:MODULEMUX5_2_1(INPUT[4:0]A,INPUT[4:0]B,INPUTSEL,OUTPUT[4:0]O);ASSIGNO=SEL?B:A;ENDMODULE在ISE集成开发环境中,对模块MUX5_2_1进行综合(Synthesize),综合结果以下图:在ISE集成开发环境中,对模块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多路选择器的设计与实现在ISE集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:MUX32_2_,1而后输入其实现代码:MODULEMUX32_2_1(INPUT[31:0]A,INPUT[31:0]B,INPUTSEL,OUTPUT[31:0]O);ASSIGNO=SEL?B:A;ENDMODULE在ISE集成开发环境中,对模块MUX32_2_1进行综合(Synthesize),综合结果以下图:在ISE集成开发环境中,对模块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)的设计与实现在ISE集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:Sign_Extender,而后输入其实现代码: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集成开发环境中,对模块Sign_Extender进行综合(Synthesize),综合结果以下图。在ISE集成开发环境中,对模块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)的设计与实现在ISE集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:RegFile,而后输入其实现代码: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集成开发环境中,对模块RegFile进行综合(Synthesize),综合结果如图所示。在ISE集成开发环境中,对模块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)设计与实现在ISE集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:ALU,而后输入其实现代码: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集成开发环境中,对模块ALU进行综合(Synthesize),综合结果以下图:在ISE集成开发环境中,对模块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)的设计与实现为了简化设计,控制器由控制单元Control和控制单元ALUop构成,控制器构造以下所示。a.Control的设计与实现在ISE集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:Control,而后输入其实现代码: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集成开发环境中,对模块Control进行综合(Synthesize),综合结果如图:在ISE集成开发环境中,对模块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的设计与实现在ISE集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:ALUop,而后输入其实现代码: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集成开发环境中,对模块ALUop进行综合(Synthesize),综合结果如图:在ISE集成开发环境中,对模块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集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:Controller,而后输入其实现代码: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

集成开发环境中,对模块集成开发环境中,对模块

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)取指电路的设计与实现取指电路需达成ADD32、PC存放器、多路选择器和左移两位模块,进而实现该取指电路。a.ADD32的设计与实现在ISE集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:ADD32,而后输入其实现代码:MODULEADD32(INPUT[31:0]OUTPUT[31:0]

A,C

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

集成开发环境中,对模块Controller

进行综合(Synthesize

),综合结果如图:b.左移两位模块(Left_2_Shifter)的设计与实现在ISE集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:Left_2_Shifter,而后输入其实现代码:MODULELEFT_2_SHIFTER(INPUT[31:0]D,OUTPUT[31:0]O);={[29:0],2'00};ASSIGNODBENDMODULE在ISE集成开发环境中,对模块Controller进行综合(Synthesize),综合结果如图:c.综合取指电路(Fetch)的设计与实现在ISE集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:Fetch,而后输入其实现代码: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集成开发环境中,对模块Fetch进行综合(Synthesize),综合结果如图:在ISE集成开发环境中,对模块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)数据通路Data_Flow的设计与实现除掉指令储存器InstructionROM、数据储存器DATAMEM,将节余的电路封装成一个单周期的CPU数据通路(Data_Flow)模块。在ISE集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:Data_Flow,而后输入其实现代码: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集成开发环境中,对模块Controller进行综合(Synthesize),综合结果如图:在ISE集成开发环境中,对模块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号存放器内容相加保留到5号存放INST=32'H应为零ADD器,履行后MW,MR应为零,B_DATA#100;=1;CLOCK#100;=0;CLOCK#100;8CB10000;//I,,5号与立刻数符号扩展相加作为地址,将内存INST=32'单元内容HLW送到9号存放器,履行:DATA#100;LOCK=1;C#100;LOCK=0;C#100INST=32'HACA00000;//I,SW,5号与立刻数符号扩展相加作为地址,将0号存放器的内容送到内存单元,履行://MR应为0,MW应为1,B_DATA应为0号存放器内容0#100;CLOCK=1;#100;RESET=0;ADDSTIMULUSHEREENDENDMODULE而后进行仿真,仿真结果以下图:(8)InstructionROM的设计与实现假设一个只有32个32位单元的指令储存器,因为只读无需写入,因此能够设置为简化的32个wire型变量,每个变量可被赋值为一条指令。在ISE集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:Inst_ROM,而后输入其实现代码: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集成开发环境中,对模块Inst_ROM进行综合(Synthesize),综合结果如图:在ISE集成开发环境中,对模块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模块的设计与实现关于实验而言,32个32位单元的数据储存器已知足需求(实质状况应当是以字节编址)。因为需要保留并写入数据,因此应设置32个reg型变量,要求初始化0、1、2号单元的内容为2、3、5。在ISE集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:data_mem,而后输入其实现代码:(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集成开发环境中,对模块data_mem进行综合(Synthesize),综合结果如图:(10)MainBoard模块的设计与实现在ISE集成开发环境中,在工程管理区随意地点单击鼠标右键,在弹出的菜单中选择NewSource命令,创立一个VerilogModule模块,名称为:MainBoard,而后输入其实现代码: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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论