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

下载本文档

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

文档简介

1、电子科技大学计算机科学与工程学院标准实验报告(实验)课程名称:计算机组成原理实验电子科技大学教务处制表电子科技大学实验报告学生姓名: 郫县尼克杨 学号:2014指导教师:陈虹实验地点: 主楼A2-411实验时间:12周-15周一、实验室名称:主楼A2-411二、实验项目名称:单周期CPU勺设计与实现。三、实验学时:8学时四、实验原理:概述1个时钟单周期(Single Cycle ) CPU是指CPU从取出1条指令到执行完该指令只需”1个时钟周期Clock指令0指令1指令2指令 4指令5周期一条指令的执行过程包括:取指令T分析指令T取操作数T执行指令T保存结果。对于单周期CPU来说,这些执行步骤

2、均在一个时钟周期内完成。(二)单周期cpu总体电路本实验所设计的单周期CPU的总体电路结构如下。(三)MIPS指令格式化MIPS指令系统结构有 MIPS-32和MIPS-64两种。本实验的MIPS指令选用MIPS-32。以下所说的MIPS指令均指MIPS-32。MIPS的指令格式为32位。下图给出MIPS指令的3种格式。3126r216t156t5R型指令oprsrtrdsafunc31I型指令31260opaddressOpFSWj!5rt0 immediateJ型指令本实验只选取了 9条典型的MIPS指令来描述CPC逻辑电路的设计方法。下图列出了本 实验的所涉及到的9条MIPS指令。五、实

3、验目的1、掌握单周期CPU勺工作原理、实现方法及其组成部件的原理和设计方法,如控制器、运算器等。 ?2、认识和掌握指令与CPU勺关系、指令的执行过程。?3、熟练使用硬件描述语言 Verilog、EDA工具软件进行软件设计与仿真,以培养学生 的分析和设计CPU的能力。六、实验内容(一)拟定本实验的指令系统,指令应包含 R型指令、I型指令和J型指令,指令数 为 9 条。(二)CPU各功能模块的设计与实现。(三)对设计的各个模块的仿真测试。(四)整个CPU勺封装与测试。七、实验器材(设备、元器件) :(一)安装了 Xilinx ISE Design Suite 13.4的 PC机一台(二)FPGAT

4、发板:Anvyl Spartan6/XC6SLX45(三)计算机与FPGA开发板通过JTAG( Joi nt Test Actio n Group)接口连接,其连接方式如图所示。八、实验步骤一个CPU主要由ALU(运算器)、控制器、寄存器堆、取指部件及其它基本功能部件 等构成。 ?在本实验中基本功能部件主要有: 32 位 2 选 1 多路选择器、 5 位 2 选 1 多路选择器、32位寄存器堆、ALU等。(一)新建工程( New Project )启动 ISE Design Suite 13.4 软件,然后选择菜单 File NewProject,弹出 NewProject Wizard对话框

5、,在对话框中输入工程名 CPU并指定工作路径 D:Single_Cycle_CPU。(二)基本功能器件的设计与实现(1)多路选择器的设计与实现a.5位2选1多路选择器(MUX5_2_1的设计与实现在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source命令,创建一个 Verilog Module 模块,名称为:MUX5_2_1然后输入其实现 代码:MODULEMUX5_2_1(INPUT 4:0 A,INPUT 4:0 B,INPUT SEL,OUTPUT4:0 O);ASSIGN O= SEL ? B : A;ENDMODULE,综合结果如图所输入

6、如下测式代在ISE集成开发环境中,对模块 MUX5_2_进行综合(Synthesize )示:在ISE集成开发环境中,对模块 MUX5_2_进行仿真(Simulation )码:modulEMUX5_2_1_T;/ I NPUTSREG 4:0A;REG 4:0B;REG SEL;/ oUTPUTSWIRE 4:0 C;/ I NSTANTIATE THE UNIT UNDERTEST (UUT)MUX5_2_1UUT (.A(A),.B(B), . SEL(SEL),.C(C);INITIAL BEGIN/ I NITIALIZE I NPUTSA= 0;B= 0;SEL = 0;/ WAI

7、T 100 NS FOR GLOBAL RESET TO FINISH#100;A= 5' B10100;B= 0;SEL = 1;/ WAIT 100 NS FOR GLOBAL RESET TO FINISH#100;A= 1;B= 5' B10000;SEL = 0;/ WAIT 100 NS FOR GLOBAL RESET TO FINISH#100;A= 5' B00000;B= 5' B11000;SEL = 1;/ ADD STIMULUS HEREENDENDMODULE然后进行仿真,仿真结果如图所示:b.32 位 2选 1 多路选择器的设计与

8、实现在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source命令,创建一个 Verilog Module 模块,名称为:MUX32_2_1然后输入其实现代码:MODULEMUX32_2_1(INPUT 31:0A ,INPUT 31:0B,INPUT SEL,OUTPUT31:0 O);ASSIGN O=SEL?B:A;ENDMODULE在ISE集成开发环境中,对模块 MUX32_2_进行综合(Synthesize )MUX32,_2_1F:0431-0181.0)SetkJMUX32B2 1所示:在ISE集成开发环境中,对模块 MUX32_2_进行

9、仿真(Simulation )测式代码:,综合结果如图首先输入如下modulEMUX32_2_1_T;/ I NPUTSREG 31:0 A;REG 31:0 B;REG SEL;/ OUTPUTSWIRE 31:0 O;/ I NSTANTIATE THE UNIT UNDERTEST (UUT)MUX32_2_1UUT (.A(A),.B(B),. SEL( SEL),.O(O);INITIAL BEGINA=0;B=0;SEL=0;/ WAIT 100 NS FOR GLOBAL RESET TO FINISH#100;A=32' H00000001;B=32' H000

10、00000;SEL=1;#100;A=32' H00000101;B=32' H00000010;SEL =0;/ ADD STIMULUS HEREENDENDMODULE然后进行仿真,仿真结果如图所示 :(2)符号扩展( Sign_Extender )的设计与实现在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source命令,创建一个 Verilog Module 模块,名称为:Sign_Extender,然后输入其实现代码:MODULESIGN_EXTENDER(INPUT 15:0 D,OUTPUT31:0 O);ASSIGN

11、O = ( D15:15 = 1' B0) ? 16' B0, D 15:0 : 16' B1, D15:0;ENDMODULE在 ISE 集成开发环境中,对模块 Sign_Extender 进行综合( Synthesize ),综合结果 如图所示。在ISE集成开发环境中,对模块 MUX32_2_进行仿真(Simulation )。首先输入如下 测式代码:MODULESIGN_EXTENDER_T;/ I NPUTSREG 15:0 D;/ OUTPUTSWIRE 31:0 O;/ I NSTANTIATE THE UNIT UNDERTEST (UUT)SIGN_EX

12、TENDER UUT(. D( D),. O( O);INITIAL BEGIN/ I NITIALIZE I NPUTSD = 0;/ WAIT 100 NS FOR GLOBAL RESET TO FINISH#100;/ ADD STIMULUS HERED = 16' H0011;#100;D = 16' H1011;ENDENDMODULE然后进行仿真,仿真结果如图所示 :(3)32位寄存器堆( RegFile )的设计与实现在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source命令,创建一个 Verilog Module

13、 模块,名称为:RegFile,然后输入其实现代 码:MODULEREGFILE (INPUT 4:0 RN1, RN2, WN,INPUT WRITE,INPUT 31:0 WD,OUTPUT31:0 A, B,INPUT CLOCK);REG 31:0 REGISTER1:31;REGISTERR N1;REGISTERR N2;ASSIGN A = (RN1 = 0) ? 0 :ASSIGN B = (RN2 = 0) ? 0 :ALWAYS( POSEDGECLOCK) BEGINIF (WRITE && WN != 0)REGISTERWN <= WD;ENDE

14、NDMODULE在 ISE 集成开发环境中,对模块 RegFile 进行综合( Synthesize ),综合结果如图所示。在 ISE 集成开发环境中,对模块 RegFile 进行仿真( Simulation )。输入如下测式代码:MODULEREGFILE_T;/ I NPUTSREG 4:0 RN1;REG 4:0 RN2;REG 4:0 WN;REG WRITE;REG 31:0 WD;REG CLOCK;/ OUTPUTSWIRE 31:0 A;WIRE 31:0 B;/ I NSTANTIATE THE UNIT UNDERTEST (UUT)REGFILE UUT (.R N1(R

15、N1),.R N2(RN2),.WN(WN), .WRITE(WRITE),.WD(WD),.A(A),.B(B),.C LOCK(CLOCK);INITIAL BEGIN/ I NITIALIZE I NPUTSRN1 = 0;RN2 = 0;WN = 0;WRITE = 0;WD = 0;CLOCK = 0;/ WAIT 100 NS FOR GLOBAL RESET TO FINISH#100;RN1 = 5' B00001;RN2 = 5' B00001;WN = 5' B00001;WRITE = 1;WD = 0;CLOCK = 0;#100;CLOCK =

16、 1;#50;WD = 32' HBBBBBBBB;#50;CLOCK = 0;#100;CLOCK = 1;#100CLOCK = 0;/ ADD STIMULUS HEREENDENDMODULE然后进行仿真,仿真结果如图所示 :(4)运算器(ALU设计与实现在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source命令,创建一个 Verilog Module 模块,名称为:ALU,然后输入其实现代码:MODULEALU(INPUT 31:0 A, B,INPUT 2:0 ALU_OPERATION,OUTPUT31:0 RESULT,OU

17、TPUTZERO);ASSIGN RESULT = (ALU_OPERATION= 3' B000) ? A + B :(ALU_OPERATION= 3' B100) ? A - B :(ALU_OPERATION= 3' B001) ? A & B :(ALU_OPERATION= 3' B101) ? A | B :(ALU_operation= 3' B010) ? A A B :(ALU_OPERATION= 3'B110) ? B15:0,16' H0 :32' HXXXXXXX;XASSiGN ZERo =

18、|R ESULT;ENDMoDULE在ISE集成开发环境中,对模块 ALU®行综合(Synthesize ),综合结果如图所示 在ISE集成开发环境中,对模块 ALU进行仿真(Simulation )。输入如下测式代码:MoDULEALU_TB;/ INpUTSREG 31:0 A;REG 31:0B;REG 2:0 ALU_opERATIoN;/ oUTpUTSWIRE 31:0 RESULT;WIRE ZERo;/ I NSTANTIATE THE UNIT UNDERTEST (UUT)ALUUUT (.A(A),.B(B),.ALU_OPERATION(ALU_OPERATI

19、ON),.R ESULT(R ESULT),.Z ERO(Z ERO);INITIAL BEGIN/ I NITIALIZE I NPUTSA= 0;B= 0;ALU_OPERATION= 0;/ WAIT 100 NS FOR GLOBAL RESET TO FINISHA= 1;#100;B= 1;ALU_OPERATION= 0;/ ADD STIMULUS HERE#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_O

20、PERATION= 2;ENDENDMODULE然后进行仿真,仿真结果如图所示 :( 5)控制器( Controller )的设计与实现为了简化设计,控制器由控制单元 Control和控制单元ALUop组成,控制器结构如下 所示。a Control 的设计与实现在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source命令,创建一个 Verilog Module 模块,名称为:Control,然后输入其实现代 码:MODULECONTRO(LINPUT 5:0 OP,OUTPUTREGDST,OUTPUTREGWRITE,OUTPUTALUSRC,OU

21、TPUTMEMWRITE,OUTPUTMEMREAD,OUTPUTMEMTOREG,OUTPUTBRANCH,OUTPUT1:0 ALUCTR);WIRE I _RT=| OP;WIRE I _LW=OP5 & OP3;WIRE I _SW=OP5 & OP3;WIRE I_BEQ =OP2 & OP1;WIRE I _LUI =OP3 & OP2;ASSIGN REGDST = I _RT;ASSIGN REGWRITE=I _RT| I _LW| I _LUI;ASSIGN ALUSRC =I _LW| I _SW | I _LUI;ASSIGN MEMWR

22、ITE =I _SW;ASSIGN MEMREAD=I _LW;ASSIGN MEMTOREG= I _LW;ASSIGN BRANCH=I _BEQ;ASSIGN ALUCTR1= I _RT| I _LUI;ASSIGN ALUCTR0= I _BEQ| I _LUI;ENDMODULE综合结果如首先输入如下测在 ISE 集成开发环境中,对模块 Control 进行综合( Synthesize ) 图:在 ISE 集成开发环境中,对模块 Control 进行仿真( Simulation ) 式代码:MODULECONTRO_LTB;/ I NPUTSREG 5:0 OP;/ OUTPUTS

23、WIRE REGDST;WIRE REGWRITE;WIRE ALUSRC;WIRE MEMWRITE;WIRE MEMREAD;WIRE MEMTOREG;WIRE BRANCH;WIRE 1:0 ALUCTR;/ I NSTANTIATE THE UNIT UNDERTEST (UUT)CONTROL UUT(. OP( OP),.R EGDST(R EGDST),.R EGWRITE(REGWRITE),.ALUSRC(ALUSRC),.MEMWRITE(MEMWRITE),.MEMREAD(MEMREAD),.MEMTOREG(MEMTOREG),.B RANC(HB RANCH),.

24、ALUCTR(ALUCTR);INITIAL BEGIN/ I NITIALIZE I NPUTSOP = 0;/ WAIT 100 NS FOR GLOBAL RESET TO FINISH#100;OP = 6' B000000;#100;OP = 6' B100011;#100;OP = 6' B101011;#100;OP = 6' B000100;#100;OP = 6' B001111;ENDENDMODULE然后进行仿真,仿真结果如图所示:b. ALUop的设计与实现在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单

25、中选择NewSource命令,创建一个 Verilog Module模块,名称为:ALUop然后输入其实现代码:MODULEALUOP(INPUT 5:0 FUNC,INPUT 1:0 ALUCTR,OUTPUT2:0 ALU_OP);WIRE I _RT = ALUCTR1 & ALUCTR0;ASSIGN ALU_OP2=( I _RT&( FUNC2& FUNC1)|( FUNC2 &FUNC0) | ALUCTR0;ASSIGN ALU_OP1=( I_RT &FUNC2 &FUNC1)| (ALUCTR1& ALUCTR0);A

26、SSIGN ALU_OP0=( I _RT &FUNC2 &FUNC1);ENDMODULE在ISE集成开发环境中,对模块 ALUop进行综合(Synthesize), 综合结果如图:在ISE集成开发环境中,对模块 ALUop进行仿真(Simulation )。首先输入如下测式代码:MODULEALU_TB;/ I NPUTSREG 31:0 A;REG 31:0 B;REG 2:0 ALU_OPERATION;/ OUTPUTSWIRE 31:0 RESULT;WIRE ZERO;/ I NSTANTIATE THE UNIT UNDERTEST (UUT)ALUUUT (.

27、A(A),.B(B),.ALU_OPERATION(ALU_OPERATION),.R ESULT(R ESULT),.Z ERO(Z ERO);INITIAL BEGIN/ I NITIALIZE I NPUTSA = 0;B = 0;ALU_OPERATION= 0;/ WAIT 100 NS FOR GLOBAL RESET TO FINISH#100;A = 1;B = 1;ALU_OPERATION= 0;/ ADD STIMULUS HERE#100A = 2;B = 2;ALU_OPERATION= 4;#100A= 1;B= 1;ALU_OPERATION= 1;#100A=

28、1;B= 1;ALU_OPERATION= 5;#100A= 1;B= 1;ALU_OPERATION= 2;ENDENDMODULE然后进行仿真,仿真结果如图所:c.将 Control 与 ALUop圭寸装成 Controller在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择 New Source 命令,创建一个 Verilog Module 模块,名称为: Controller ,然后输入其实 现代码:MODULECONTROLLE(RINPUT 5:0 OP,INPUT 5:0 FUNC,OUTPUTREGDST,OUTPUTREGWRITE,OUTPU

29、TALUSRC,OUTPUTMEMWRITE,OUTPUTMEMREAD,OUTPUTMEMTOREG,OUTPUTBRANCH,OUTPUT2:0 ALU_OP);WIRE 1:0 ALUCTR;CONTROLU0 ( OP, REGDST, REGWRITE, ALUSRC, MEMWRITE, MEMREAD, MEMTOREG, BRANCH,ALUCTR);ALUOP U1 ( FUNC, ALUCTR, ALU_OP);ENDMODULE在 ISE 集成开发环境中, 对模块 Controller 进行综合 ( Synthesize ),综合结果如图:在 ISE 集成开发环境中,对模

30、块 Controller 进行仿真( Simulation )。首先输入如下 测式代码:MODULECONTROLLE_RTB;/ I NPUTSREG 5:0 OP;REG 5:0 FUNC;/ OUTPUTSWIRE REGDST;WIRE REGWRITE;WIRE ALUSRC;WIRE MEMWRITE;WIRE MEMREAD;WIRE MEMTOREG;WIRE BRANCH;WIRE 2:0 ALU_OP;/ I NSTANTIATE THE UNIT UNDERTEST (UUT)CONTROLLER UUT(. OP( OP),. FUNC( FUNC),.R EGDST(

31、R EGDST),.R EGWRITE(REGWRITE),.ALUSRC(ALUSRC),.MEMWRITE(MEMWRITE),.MEMREAD(MEMREAD),.MEMTOREG(MEMTOREG),.B RANC(HB RANCH),.ALU_OP(ALU_OP);INITIAL BEGIN/ I NITIALIZE I NPUTSOP = 0;FUNC= 0;/ WAIT 100 NS FOR GLOBAL RESET TO FINISH#100;OP =6' B100011;#100OP=6' B101011;#100OP=6' B000100;#100O

32、P=6' B001111;ENDENDMODULE然后进行仿真,仿真结果如图所示 :6)取指电路的设计与实现取指电路需完成ADD32 PC寄存器、多路选择器和 左移两位模块,从而实现该取指电 路。a. ADD32勺设计与实现在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,创建一个 Verilog Module模块,名称为:ADD32然后输入其实现代码:MODULEADD32(INPUT 31:0 A, B,OUTPUT31:0 C);ASSIGN C = A + B;ENDMODULE在 ISE 集成开发环境中, 对模块 Cont

33、roller 进行综合 (Synthesize ),综合结果如图:b. 左移两位模块(Left_2_Shifter )的设计与实现在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出勺菜单中选择New Source 命令,创建一个 Verilog Module 模块,名称为: Left_2_Shifter ,然后输入其实现代码:MODULELEFT_2_SHIFTER(INPUT 31:0 D,OUTPUT31:0 O);ASSIGN O = D29:0, 2' B00;ENDMODULE在 ISE 集成开发环境中, 对模块 Controller 进行综合 ( Synt

34、hesize ),综合结果如图:c.综合取指电路(Fetch)的设计与实现在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource 命令,创建一个 Verilog Module 模块,名称为: Fetch ,然后输入其实现代码:MODULEFETCH(INPUT RESET,INPUT CLOCK,INPUT 31:0 B_ADDR,INPUT Z, B,OUTPUT31:0 ADDR);REG 31:0 PC;WIRE 31:0 U0_O;WIRE 31:0 U1_C;WIRE 31:0 U2_C;WIRE 31:0 NEXT_PC;WIRE SEL

35、 = Z & B;LEFT_2_SHIFTER U0 (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);ASSIGN ADDR= PC;ALWAYS( POSEDGECLOCK OR NEGEDGERESET) BEGINIF (RESET = 0)PC= 0;ELSEPC= NEXT_PC;ENDENDMODULE在 ISE 集成开发环境中,对模块 Fetch 进行综合( Synthesize ),综合结果如图:在 ISE 集成

36、开发环境中,对模块Fetch 进行仿真( Simulation )首先输入如下测式代码:MODULEFETCH_T;/ I NPUTSREG CLOC;KREG RESET;REG 31:0 B _ADDR;REG B;REG Z;/ OUTPUTSWIRE 31:0 INST ;WIRE 31:0 O_ADDR;WIRE 31:0 O_SUM;WIRE 31:0 O_SUM1;/ I NSTANTIATE THE UNIT UNDERTEST (UUT)FETCHUUT (. CLOCK( CLOCK),. RESET( RESET),. B_ADDR( B_ADDR),.B(B),.Z(Z

37、),. INST( INST),. O_ADDR( O_ADDR),. O_SUM( O_SUM),. O_SUM1( O_SUM1);INITIAL BEGIN/ I NITIALIZE I NPUTSCLOCK= 0;RESET = 0;B_ADDR= 0;B = 0;Z = 0;/ WAIT 100 NS FOR GLOBAL RESET TO FINISH#100;CLOCK=1;#100;CLOCK=0;#100;CLOCK=1;#100;CLOCK=0;#100;CLOCK=1;#100;CLOCK=0;CLOCK=1;#100;#100;Z=1;B=1;B_ADDR=32'

38、; 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;/ ADD STIMULUS HERE/ ADD STIMULUS HEREENDENDMODULE然后进行仿真,仿真结果如图所示 :(7)数据通路 Data_Flow 的设计与实现除去指令存储器Instruction ROM、数据存储器DATA

39、 MEM将剩余的电路封装成一个 单周期的CPL数据通路(Data_Flow)模块。在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source命令,创建一个 Verilog Module 模块,名称为:Data_Flow,然后输入其实现 代码:MODULEDATA_FLOW(INPUT RESET,INPUT CLOCK,INPUT 31:0 I NST,INPUT 31:0DATA,OUTPUTMEMWRITE,OUTPUTMEMREAD,OUTPUT31:0 RESULT,OUTPUT31:0 B_DATA,OUTPUT31:0 NEXTPC);WI

40、RE 31:0 B_ADDR;WIRE Z, B;WIRE REGDST;WIRE REGWRITE;WIRE ALUSRC;WIRE MEMTOREG;WIRE 2:0 ALU_OP;WIRE 31:0 ALU_A, ALU_B;WIRE 4:0 WN;WIRE 31:0 WD;FETCH U0 (R ESET, CLOCK, B_ADDR, Z, B, NEXTPC);CONTROLLERU1 (I NST31:26, I NST5:0, REGDST, REGWRITE, ALUSRC,MEMWRITE, MEMREAD, MEMTOREG, B, ALU_OP);ALUU2 (ALU_

41、A, ALU_B, ALU_OP, RESULT, Z);REGFILE U3(I NST25:21, I NST20:16, WN, REGWRITE, WD, ALU_A, B_DATA, CLOCK);MUX5_2_1U4 (I NST20:16, I NST15:11, REGDST, WN);MUX32_2_1U5 (B_ DATA, B_ADDR, ALUSRC, ALU_B);SIGN_EXTENDERU6 (I NST15:0, B_ADDR);MUX32_2_1U7 (NEXTPC, DATA, MEMTOREG, WD);ENDMODULE,综合结果如图:。首先输入如下在

42、ISE 集成开发环境中, 对模块 Controller 进行综合 ( Synthesize )在 ISE 集成开发环境中,对模块 Data_Flow 进行仿真( Simulation ) 测式代码:MODULEDATA_FLOW_TB;/ I NPUTSREG RESET;REG CLOCK;REG 31:0 INST;REG 31:0 DATA;/ OUTPUTSWIRE MEMWRITE;WIRE MEMREAD;WIRE 31:0 RESULT;WIRE 31:0 B_DATA;WIRE 31:0 NEXTPC;/ I NSTANTIATE THE UNIT UNDERTEST (UUT

43、)DATA_FLOW UUT(.R ESET(RESET),.C LOCK(CLOCK),.I NST(I NST),.D ATA(D ATA),.MEMWRITE(MEMWRITE),.MEMREAD(MEMREAD),.R ESULT(R ESULT),.B_ DATA(B_ DATA),.N EXTPC(NEXTPC);INITIAL BEGIN/ I NITIALIZE I NPUTSRESET = 0;CLOCK = 0;I NST = 0;DATA = 0;/ WAIT 100 NS FOR GLOBAL RESET TO FINISH#100;RESET = 1;/#100;IN

44、ST =32' H00002820;/R 型, ADD,0 号 0号寄存器内容相加保存到5号寄存器,执行后 MW,M应为零,B_data应为零#100;CLOCK = 1;#100;CLOCK = 0;I NST = 32' H8CB10000;/I, LW,5 号与立即数符号扩展相加作为地址,将内存单元内容DATA送到9号寄存器,执行:#100;CLOCK = 1;#100;CLOCK = 0;#100I NST = 32' HACA00000;/I, SW,5 号与立即数符号扩展相加作为地址,将0 号寄存器的内容送到内存单元,执行 :/MR应为0, MW应为1, B

45、_data应为0号寄存器内容 0 #100;CLOCK = 1;#100;RESET = 0;/ ADD STIMULUS HEREENDENDMODULE然后进行仿真,仿真结果如图所示 (8) Instruction ROM 的设计与实现假定一个只有 32个 32位单元的指令存储器,由于只读无需写入,所以可以设置为简 化的 32 个 wire 型变量,每个变量可被赋值为一条指令。在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source 命令,创建一个Verilog Module 模块,名称为:Inst ROM,然后输入其实现代码:MODULEI N

46、ST_ROM(INPUT 31:0 ADDRESS,OUTPUT31:0 INST);WIRE 31:0 RAM 0:31;ASSIGN RAM0 =32' B000000_00001_00010_00011_00000100000;/ ANDASSIGN RAM1 =32' B000000_00001_00010_00011_00000100000;/ ANDASSIGN RAM2 =32' B100011_00101_10001_0000000000000000;/ LWASSIGN RAM3 =32' B100011_00101_10010_0000000

47、000000100;/ LWASSIGN RAM4 = 32' B000000_10001_10010_10001_00000100000;/ ANDASSIGN RAM5 = 32' B100011_00101_10010_0000000000001000;/ LWASSIGN RAM6 = 32' B000100_10001_10001_0000000000000001;/ BEPASSIGN RAM7 = 32' B101011_00101_00000_0000000000001100;/ SWASSIGN INST = RAM ADDRESS6:2;EN

48、DMODULE在 ISE 集成开发环境中,对模块 Inst_ROM 进行综合( Synthesize ),综合结果如图在 ISE 集成开发环境中,对模块 Inst_ROM 进行仿真( Simulation )。首先输入如下测 式代码:MODULEI NST_ROMT_B;/ I NPUTSREG 31:0 ADDRESS;/ OUTPUTSWIRE 31:0 INST;/ I NSTANTIATE THE UNIT UNDERTEST (UUT)I NST_ROMUUT (. ADDRES(SADDRES)S,. INST( INST);INITIAL BEGIN/ I NITIALIZE I

49、 NPUTSADDRESS= 0;/ WAIT 100 NS FOR GLOBAL RESET TO FINISH#100;ADDRESS = 0;#100;ADDRESS = 4;#100;ADDRESS = 8;#100;ADDRESS = 12;#100;ADDRESS = 16;#100;ADDRESS = 20;#100;ADDRESS = 24;#100;ADDRESS = 28;/ ADD STIMULUS HEREENDENDMODULE然后进行仿真,仿真结果如图 :(9) Data Mem模块的设计与实现对于实验而言,32个 32位单元的数据存储器已满足需求 (实际情况应该是

50、以字节编址) 。 由于需要保存并写入数据,所以应设置 32个reg型变量,要求初始化0、1、2号单元的内 容为 2、 3、 5。在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出 的 菜 单 中 选 择New Source命令,创建一个 Verilog Module 模块,名称为:data_mem 然后输入其实 现代码:MODULE DAT_AMEM(ADDR, READ, WRITE, DATAI N, CLOCK, DATAOUT);INPUT 31:0ADDR;INPUT READ, WRITE;INPUT 31:0 DATAI N;INPUT CLOCK;OUTPUT

51、31:0 DATAOUT;REG 31:0 RAM 0:31;32' HXXXXXXX;X32' HXXXXXXX;XASSIGN DATAOUT = READ ? RAMA DDR6:2ALWAYS( POSEDGECLOCK) BEGINRAM A DDR6:2= WRITE ? DATAI N :ENDINTEGER I;INITIAL BEGINFOR( I = 0; I <32; I = I + 1)RAM I = I ;ENDENDMODULE在ISE集成开发环境中,对模块data_mem进行综合(Synthesize ), 综合结果如 图:( 10)Main

52、Board 模块的设计与实现在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出 的菜单中选 择NewSource命令,创建一个 Verilog Module模块,名称为:MainBoard,然后输入其实 现代码:MODULEMAIN BOARD(INPUT CLOCK,R ESET,OUTPUT31:0I NST,OUTPUT31:0PC,OUTPUT31:0ALUOUT,OUTPUT31:0);B_DATA/ JWIRE 31:0 ADDR_FT I ;WIRE 31:0 DATA_DTF;WIRE MEMWRITE,MEMREAD;WIRE 31:0 RESULT;WIRE 31:0 NEXTPC;DATA_FLOWU0(RESET, CLOCK, I NST, DATA_DTF, MEMWRITE, MEMREAD, RESULT, B_DATA, NEXTPC);I NST_ROMU1(NEXTPC, I NST);DATA_MEMU2(CLOCK, DATA_DTF, B_DATA, RESULT, MEM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论