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

付费下载

下载本文档

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

文档简介

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

2、操作数f执行指令f保存结果 对于单周期CPU来说,这些执行步骤均在一个时钟周期内完成。 (二)单周期cpu总体电路 本实验所设计的单周期CPU的总体电路结构如下。 (三)MIPS指令格式化 MIPS指令系统结构有 MIPS-32和MIPS-64两种。本实验的MIPS指令选用MIPS-32。 以下所说的MIPS指令均指MIPS-32。 MIPS的指令格式为32位。下图给出MIPS指令的3种格式。 R型指令 I型指令 J型指令 op rs rt rd sa func 3126 2521 2016 1511 106 50 op rs rt immediate 3126 2521 2016 150 o

3、p address 3126 250 本实验只选取了 9条典型的MIPS指令来描述CPC逻辑电路的设计方法。下图列出了 本实验的所涉及到的9条MIPS指令。 五、实验目的 1、掌握单周期CPU勺工作原理、实现方法及其组成部件的原理和设计方法,如控制 器、运算器等。? 2、认识和掌握指令与CPU勺关系、指令的执行过程。? 3、熟练使用硬件描述语言 Verilog、EDA工具软件进行软件设计与仿真,以培养学 生的分析和设计CPU勺能力。 六、实验内容 (一)拟定本实验的指令系统,指令应包含 R型指令、丨型指令和J型指令,指令数 为9条。 (二)CPU各功能模块的设计与实现。 (三)对设计的各个模块

4、的仿真测试。 (四)整个CPU勺封装与测试。 七、实验器材(设备、元器件): (一)安装了 Xilinx ISE Design Suite 13.4的 PC机一台 (二)FPGAT发板:Anvyl Spartan6/XC6SLX45 (三)计算机与FPGA开发板通过JTAG( Joi nt Test Actio n Group)接口连接,其 连接方式如图所示。 八、实验步骤 一个CPU主要由ALU(运算器)、控制器、寄存器堆、取指部件及其它基本功能部件 等构成。? 在本实验中基本功能部件主要有:32位2选1多路选择器、5位2选1多路选择器、 32位寄存器堆、ALU等。 (一)新建工程(New

5、Project ) 启动 ISE Design Suite 13.4软件,然后选择菜单 File New Project,弹出 New Project Wizard 对 话 框 , 在 对 话 框 中 输 入 工 程 名 CPU, 并 指 定 工 作 路 径 D:Single_Cycle_CPU 。 (二)基本功能器件的设计与实现 (1) 多路选择器的设计与实现 a.5 位 2 选 1多路选择器( MUX5_2_)1 的设计与实现 在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选 择 New Source 命令,创建一个 Verilog Module 模块,名称为

6、: 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 在ISE集成开发环境中,对模块 MUX5_2_进行综合(Synthesize ),综合结果如图 所示: 在ISE集成开发环境中,对模块 MUX5_2_进行仿真(Simulation )。输入如下测式 代码: MODULEMUX5_2_1_T; / I NPUTS REG 4:0 A; REG 4:0 B; REG SEL; / OUTPUTS W

7、IRE 4:0 C; / I NSTANTIATE THE UNIT UNDER TEST (UUT) MUX5_2_1UUT ( .A(A), .B(B), . SEL( SEL), .C(C) ); INITIAL BEGIN / I NITIALIZE I NPUTS A = 0; B = 0; SEL = 0; / WAIT 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 B1

8、0000; SEL = 0; / WAIT 100 NS FOR GLOBAL RESET TO FINISH #100; A = 5 B00000; B = 5 B11000; SEL = 1; / Add stimulus here END ENDMODULE 然后进行仿真,仿真结果如图所示: b.32位2选1多路选择器的设计与实现 在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选 择New Source命令,创建一个 Verilog Module 模块,名称为:MUX32_2_1然后输入其 实现代码: modulEMUX32_2_1( input 31:0A,

9、input 31:0B, INPUT SEL, output31:0 O ); ASSIGN O=SEL?B:A; ENDMODULE 在ISE集成开发环境中,对模块 MUX32_2_进行综合(Synthesize ),综合结果如 图所示: 在ISE集成开发环境中,对模块 MUX32_2_进行仿真(Simulation )。首先输入如 MUX32_2_ 1 A31-0) F1 0(31 0) S(31_0| Sei kJ MUX32_2_ 1 下测式代码: moduleMUX32_2_1_T; / I nputs REG 31:0 A; REG 31:0 B; REG SEL; / OUTPU

10、TS WIRE 31:0 O; / I NSTANTIATE THE UNIT UNDERTEST (UUT) MUX32_2_1UUT ( .A(A), .B(B), . SEL( SEL), .O(O) ); INITIAL BEGIN A=0; B=0; SEL=0; / WAIT 100 NS FOR GLOBAL RESET TO FINISH #100; A=32 H00000001; B=32 H00000000; SEL=1; #100; A=32 H00000101; B=32 H00000010; SEL =0; / ADD STIMULUS HERE END ENDMOD

11、ULE 然后进行仿真,仿真结果如图所示 : (2) 符号扩展( Sign_Extender )的设计与实现 在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选 择 New Source 命令,创建一个 Verilog Module 模块,名称为: Sign_Extender ,然后输 入其实现代码: MODULESIGN_EXTENDER( INPUT 15:0 D, OUTPUT31:0 O ); ASSIGN O = ( D15:15 = 1 B0) ? 16 B0, D15:0: 16 B1, D15:0; ENDMODULE 在 ISE 集成开发环境中,对模

12、块 Sign_Extender 进行综合( Synthesize ),综合结 果如图所示。 在ISE集成开发环境中,对模块 MUX32_2_进行仿真(Simulation )。首先输入如 下测式代码: MODULESIGN_EXTENDER_T; / I NPUTS REG 15:0 D; / OUTPUTS WIRE 31:0 O; / I NSTANTIATE THE UNIT UNDERTEST (UUT) SIGN_EXTENDER UUT( . D(D), . O(O) ); INITIAL BEGIN / I NITIALIZE I NPUTS D = 0; / WAIT 100

13、NS FOR GLOBAL RESET TO FINISH #100; / ADD STIMULUS HERE D = 16 H0011; #100; D = 16 H1011; END ENDMODULE 然后进行仿真,仿真结果如图所示 : (3) 32位寄存器堆( RegFile )的设计与实现 在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选 择 New Source 命令,创建一个 Verilog Module 模块,名称为: RegFile ,然后输入其实 现代码: MODULEREGFILE ( INPUT 4:0 RN1, RN2, WN, INPU

14、T WRITE, INPUT 31:0 WD, OUTPUT31:0 A, B, INPUT CLOCK ); REG 31:0 REGISTER1:31; ASSIGN A = (RN1 = 0) ? 0 : REGISTERR N1; ASSIGN B = (RN2 = 0) ? 0 : REGISTERR N2; ALWAYS( POSEDGECLOCK) BEGIN IF (WRITE END ENDMODULE ,综合结果如图 输入如下测式代 在 ISE 集成开发环境中,对模块 RegFile 进行综合( Synthesize 所示。 在 ISE 集成开发环境中,对模块 RegFil

15、e 进行仿真( Simulation ) 码: MODULEREGFILE_T; / I NPUTS REG 4:0 RN1; REG 4:0 RN2; REG 4:0 WN; REG WRITE; REG 31:0 WD; REG CLOCK; / OUTPUTS WIRE 31:0 A; WIRE 31:0 B; / I NSTANTIATE THE UNIT UNDERTEST (UUT) REGFILE UUT ( .R N1(R N1), .R N2(R N2), .WN(WN), .WRITE(WRITE), .WD(WD), .A(A), .B(B), .C LOCK(C LOC

16、K) ); INITIAL BEGIN / I NITIALIZE I NPUTS RN1 = 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 = 1; #50; WD = 32 HBBBBBBBB; #50; CLOCK = 0; #100; CLOCK = 1; #100

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

18、? A + B : (ALU_OPERATION= 3 B100) ? A - B : (ALU_OPERATION= 3 B001) ? A X ASSiGN ZERo = |R ESULT; ENDMoDULE 在ISE集成开发环境中,对模块 ALU行综合(Synthesize ),综合结果如图所示 在ISE集成开发环境中,对模块 ALU进行仿真(Simulation )。输入如下测式代码: MoDULE ALU_TB; / I NpUTS REG 31:0 A; REG 31:0 B; REG 2:0 ALU_opERATIoN; / oUTpUTS WIRE 31:0 RESULT;

19、WIRE ZERo; / I NSTANTIATE THE UNIT UNDERTEST (UUT) ALUUUT ( .A(A), .B(B), .ALU_opERATIoN(ALU_opERATIoN), .R ESULT(R ESULT), .Z ERO(Z ERO) ); INITIAL BEGIN / I NITIALIZE I NPUTS A = 0; B = 0; ALU_OPERATION= 0; / WAIT 100 NS FOR GLOBAL RESET TO FINISH #100; A = 1; B = 1; ALU_OPERATION= 0; / ADD STIMUL

20、US HERE #100 A = 2; B = 2; ALU_OPERATION= 4; #100 A = 1; B = 1; ALU_OPERATION= 1; #100 A= 1; B= 1; ALU_OPERATION= 5; #100 A= 1; B= 1; ALU_OPERATION= 2; END ENDMODULE 然后进行仿真,仿真结果如图所示 : ( 5)控制器( Controller )的设计与实现 为了简化设计,控制器由控制单元 Control和控制单元ALUop组成,控制器结构如 下所示。 a Control 的设计与实现 在 ISE 集成开发环境中, 在工程管理区任意

21、位置单击鼠标右键, 在弹出的菜单中选择 New Source 命令,创建一个 Verilog Module 模块,名称为: Control ,然后输入其实现 代码: MODULECONTRO(L INPUT 5:0 OP, OUTPUTREGDST, OUTPUTREGWRITE, OUTPUTALUSRC, OUTPUTMEMWRITE, OUTPUTMEMREAD, OUTPUTMEMTOREG, OUTPUTBRANCH, OUTPUT1:0 ALUCTR ); WIRE I _RT=| OP; WIRE I _LW=OP5 WIRE I _SW=OP5 WIRE I _BEQ =OP2

22、 WIRE I _LUI =OP3 ASSIGN REGDST = I _RT; ASSIGN REGWRITE=I _RT| I _LW| I_LUI; ASSIGN ALUSRC =I _LW| I_SW | I _LUI; ASSIGN MEMWRITE =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 集

23、成开发环境中,对模块 Control 进行综合( Synthesize ) 图: 在 ISE 集成开发环境中,对模块 Control 进行仿真( Simulation ) 测式代码: MODULECONTRO_LTB; / I NPUTS REG 5:0 OP; / OUTPUTS WIRE REGDST; WIRE REGWRITE; WIRE ALUSRC; WIRE MEMWRITE; WIRE MEMREAD; WIRE MEMTOREG; WIRE BRANCH; WIRE 1:0 ALUCTR; / I NSTANTIATE THE UNIT UNDER TEST (UUT) CO

24、NTROL UUT( . OP( OP), .R EGDST(R EGDST), .REGWRITE(REGWRITE), .ALUSRC(ALUSRC), .MEMWRITE(MEMWRITE), .MEMREAD(MEMREAD), .MEMTOREG(MEMTOREG), .B RANCH(B RANCH), .ALUCTR(ALUCTR) ); INITIAL BEGIN / I NITIALIZE I NPUTS OP = 0; / WAIT 100 NS FOR GLOBAL RESET TO FINISH #100; OP = 6 B000000; #100; OP = 6 B1

25、00011; #100; OP = 6 B101011; #100; OP = 6 B000100; #100; OP = 6 B001111; END ENDMODULE 然后进行仿真,仿真结果如图所示: b. ALUop的设计与实现 在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选 择New Source命令,创建一个 Verilog Module 模块,名称为:ALUop然后输入其实现 代码: MODULEALUOP( INPUT 5:0 FUNC, INPUT 1:0 ALUCTR, OUTPUT2:0 ALU_OP ); WIRE I _RT = ALU

26、CTR1 ASSIGN ALU_OP2=( I _RT ASSIGN ALU_OP1=( I_RT ASSIGN ALU_OP0=( I _RT ENDMODULE 在ISE集成开发环境中,对模块 ALUop进行综合(Synthesize ), 综合结果如图: 在ISE集成开发环境中,对模块ALUop进行仿真(Simulation )。首先输入如下测式 代码: MODULEALU_TB; / I NPUTS REG 31:0 A; REG 31:0 B; REG 2:0 ALU_OPERATION; / OUTPUTS WIRE 31:0 RESULT; WIRE ZERO; / I NSTA

27、NTIATE THE UNIT UNDERTEST (UUT) ALUUUT ( .A(A), .B(B), .ALU_OPERATION(ALU_OPERATION), .R ESULT(R ESULT), #100 .Z ERO(Z ERO) ); INITIAL BEGIN / I NITIALIZE I NPUTS A = 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 #100 A

28、 = 2; B = 2; ALU_OPERATION= 4; #100 A = 1; B = 1; ALU_OPERATION= 1; A = 1; B = 1; ALU_OPERATION= 5; #100 A = 1; B = 1; ALU_OPERATION= 2; END ENDMODULE 然后进行仿真,仿真结果如图所: c.将 Control 与 ALUop圭寸装成 Controller 在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选 择 New Source 命令,创建一个 Verilog Module 模块,名称为: Controller ,然后

29、输入 其实现代码: MODULECONTROLLE(R INPUT 5:0 OP, INPUT 5:0 FUNC, OUTPUTREGDST, OUTPUTREGWRITE, OUTPUTALUSRC, OUTPUTMEMWRITE, OUTPUTMEMREAD, OUTPUTMEMTOREG, OUTPUTBRANCH, OUTPUT2:0 ALU_OP ); WIRE 1:0 ALUCTR; CONTROL U0 ( OP, REGDST, REGWRITE, ALUSRC, MEMWRITE, MEMREAD, MEMTOREG, BRANCH, ALUCTR); ALUOP U1 (

30、FUNC, ALUCTR, ALU_OP); ENDMODULE 在 ISE 集成开发环境中,对模块 Controller 进行综合( Synthesize ),综合结果如 图: 在 ISE 集成开发环境中,对模块 Controller 进行仿真( Simulation )。首先输入如 下测式代码: MODULECONTROLLE_RTB; / I NPUTS REG 5:0 OP; REG 5:0 FUNC; / OUTPUTS WIRE REGDST; WIRE REGWRITE; WIRE ALUSRC; WIRE MEMWRITE; WIRE MEMREAD; WIRE MEMTORE

31、G; WIRE BRANCH; WIRE 2:0 ALU_OP; / I NSTANTIATE THE UNIT UNDERTEST (UUT) CONTROLLER UUT( . OP( OP), . FUNC( FUNC), .R EGDST(R EGDST), .R EGWRITE(R EGWRITE), .ALUSRC(ALUSRC), .MEMWRITE(MEMWRITE), .MEMREAD(MEMREAD), .MEMTOREG(MEMTOREG), .B RANCH(B RANCH), .ALU_OP(ALU_OP) ); INITIAL BEGIN / I NITIALIZE

32、 I NPUTS OP = 0; FUNC = 0; / WAIT 100 NS FOR GLOBAL RESET TO FINISH #100; OP =6 B100011; #100 OP=6 B101011; #100 OP=6 B000100; #100 OP=6 B001111; END ENDMODULE 然后进行仿真,仿真结果如图所示 : (6)取指电路的设计与实现 取指电路需完成ADD32 PC寄存器、多路选择器和 左移两位模块,从而实现该取指 电路。 a. ADD32勺设计与实现 在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选 择NewSour

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

34、t_2_Shifter ,然后 输入其实现代码: MODULELEFT_2_SHIFTER( INPUT 31:0 D, OUTPUT31:0 O ); ASSIGN O = D29:0, 2 B00; ENDMODULE 在 ISE 集成开发环境中,对模块 Controller 进行综合( Synthesize ),综合结果如 图: c. 综合取指电路(Fetch)的设计与实现 在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选 择 NewSource 命令,创建一个 Verilog Module 模块,名称为: Fetch ,然后输入其实现 代码: MODULE

35、FETCH( 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 = Z 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)

36、; ASSIGN ADDR= PC; ALWAYS( POSEDGECLOCK OR NEGEDGERESET) BEGIN IF (RESET = 0) PC= 0; ELSE PC= NEXT_PC; END ENDMODULE ,综合结果如图: 首先输入如下测式 在 ISE 集成开发环境中,对模块 Fetch 进行综合( Synthesize ) 在 ISE 集成开发环境中,对模块 Fetch 进行仿真( Simulation ) 代码: MODULEFETCH_T; / I NPUTS REG CLOCK; REG RESET; REG 31:0 B _ADDR; REG B; REG

37、 Z; / OUTPUTS WIRE 31:0 INST ; WIRE 31:0 O_ADDR; WIRE 31:0 O_SUM; WIRE 31:0 O_SUM1; / I NSTANTIATE THE UNIT UNDER TEST (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) ); INITIAL BEGIN / I NITIALIZ

38、E I NPUTS CLOCK= 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; #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

39、; 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 HERE END ENDMODULE 然后进行仿真,仿真结果如图所示 (7) 数据通路 Data_Flow 的设计与实现 除去指令存储器Instruction ROM、数据存储器DATA MEM将剩余的电路封装成一 个单周期的CPL数据通路(Data_Flow)模块。 在 ISE

40、集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选 择NewSource命令,创建一个 Verilog Module模块,名称为:Data_Flow,然后输入其 实现代码: MODULEDATA_FLOW( INPUT RESET, INPUT CLOCK, INPUT 31:0 I NST, INPUT 31:0 DATA, OUTPUTMEMWRITE, OUTPUTMEMREAD, OUTPUT31:0 RESULT, OUTPUT31:0 B_DATA, OUTPUT31:0 ); NEXTPC WIRE 31:0 B_ADDR; WIRE Z, B; WIRE REG

41、DST; 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 (RESET, CLOCK, B_ADDR, Z, B, NEXTPC); CONTROLLERU1 (I NST31:26, I NST5:0, REGDST, REGWRITE, ALUSRC, MEMWRITE, MEMREAD, MEMTOREG, B, ALU_OP); ALU U2 (ALU_A, ALU_B, ALU_OP, RESU

42、LT, 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 在 ISE 集成开发环境中,对模块 Controller 进行综

43、合( Synthesize ),综合结果如 图: 在 ISE 集成开发环境中,对模块 Data_Flow 进行仿真( Simulation )。首先输入如下 测式代码: MODULEDATA_FLOW_TB; / I NPUTS REG RESET; REG CLOCK; REG 31:0 I NST; REG 31:0 DATA; / OUTPUTS WIRE MEMWRITE; WIRE MEMREAD; WIRE 31:0 RESULT; WIRE 31:0 B_DATA; WIRE 31:0 NEXTPC; / I NSTANTIATE THE UNIT UNDERTEST (UUT)

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

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

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

47、ilog Module 模块,名称为:Inst_ROM,然后输入其 实现代码: MODULEI NST_ROM( INPUT 31:0 ADDRESS, OUTPUT31:0 INST ); WIRE 31:0 RAM 0:31; ASSIGNRAM0 32 B000000_00001_00010_00011_00000100000;/ AND ASSIGNRAM1 32 B000000_00001_00010_00011_00000100000;/ AND ASSIGN RAM 2 32 B100011_00101_10001_0000000000000000;/ LW ASSIGN RAM

48、 3 = 32 B100011_00101_10010_0000000000000100;/ LW ASSIGNRAM4= 32 B000000_10001_10010_10001_00000100000;/ AND ASSIGNRAM5= 32 B100011_00101_10010_0000000000001000;/ LW ASSIGNRAM6= 32 B000100_10001_10001_0000000000000001;/ BEP ASSIGNRAM7= 32 B101011_00101_00000_0000000000001100;/ SW ASSIGN INST = RAM A

49、DDRESS6:2; ENDMODULE 在 ISE 集成开发环境中, 对模块 Inst_ROM 进行综合 (Synthesize ),综合结果如图 : 在 ISE 集成开发环境中,对模块 Inst_ROM 进行仿真( Simulation )。首先输入如下 测式代码: MODULEI NST_ROMT_B; / I NPUTS REG 31:0 ADDRESS; / OUTPUTS WIRE 31:0 INST ; / I NSTANTIATE THE UNIT UNDERTEST (UUT) I NST_ROMUUT ( . ADDRES(SADDRES)S, . INST( INST)

50、); INITIAL BEGIN / I NITIALIZE I NPUTS ADDRESS= 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 HERE END ENDMODULE 然后进行仿真,仿真结果如图 : (

51、9) Data Mem模块的设计与实现 对于实验而言, 32个 32 位单元的数据存储器已满足需求(实际情况应该是以字节编 址)。由于需要保存并写入数据,所以应设置 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:0 AD

52、DR; INPUT READ, WRITE; INPUT 31:0 DATAI N; INPUT CLOCK; OUTPUT31:0 DATAOUT; REG 31:0 RAM 0:31; ASSIGN DATAOUT = READ ? RAMA DDR6:2: 32 HXXXXXXX;X ALWAYS( POSEDGECLOCK) BEGIN RAM A DDR6:2 = WRITE ? DATAI N : 32 HXXXXXXX;X END INTEGER I; INITIAL BEGIN FOR( I = 0; I 32; I = I + 1) RAM I = I ; END ENDMO

53、DULE 在ISE集成开发环境中,对模块data_mem进行综合(Synthesize ),综合结果如 图: ( 10)MainBoard 模块的设计与实现 在 ISE 集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出 的菜单中选 择New Source命令,创建一个 Verilog Module 模块,名称为:MainBoard,然后输入其 实现代码: MODULEMAINBOARD( INPUT CLOCK,R ESET, OUTPUT31:0 I NST, OUTPUT31:0 PC, OUTPUT31:0 ALUOUT, OUTPUT31:0 B_DATA ); WIRE 31

54、:0 ADDR_FTI; 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, MEMWRITE, MEMREAD); ASSIGN PC = NEXTPC; ASSIGN ALUOUT = RESULT; ENDMODULE 综合结果如 首先输入如下

温馨提示

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

评论

0/150

提交评论