计算机组成原理实验报告_第1页
计算机组成原理实验报告_第2页
计算机组成原理实验报告_第3页
计算机组成原理实验报告_第4页
计算机组成原理实验报告_第5页
已阅读5页,还剩34页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、电子科技大学计算机科学与工程学院标准实验报告(实验)课程名称:计算机组成原理综合实验课程电子科技大学教务处制表电子科技大学实验一报告学生姓名: ZYZ学 号: 2014060103026指导教师: CAG实验地点:主楼A2-411实验时间: 2016 年 11 月 20 日一、实验室名称:A2-411。二、实验项目名称:Verilog 设计简介。三、实验学时:实验学时是 3 学时。四、实验原理:Verilog 设计硬件电路需要创建工程,模块和约束文件。一位二选一多路器的实验原理图和真值表如下图1 所示:图 1 一位二选一多路器原理图及真值表二选一多路器的逻辑表达式为,根据逻辑表达式可得电路图如

2、图2 所示:图 2 二选一多路器电路图五、实验目的通过本实验,掌握用 Verilog HDL 硬件描述语言设计硬件电路的基本方法和 FPGA 开发板的基本使用。实现 32 位 2 选 1 多路选择器、5 位 2 选 1 多路选择器、 32 位寄存器堆、 ALU 等部件的设计,掌握其基本方法和技能,加深对所学知识的理解。六、实验内容基本器件的设计:32位 2选 1多路选择器5位 2选 1多路选择器32 位寄存器堆ALU七、实验器材(设备、元器件) :1. 安装了 Xilinx ISE Design Suite 13.4 的 PC 机一台2. FPGA 开发板: Anvyl Spartan6/XC

3、6SLX453. 计算机与 FPGA 开发板通过 JTAG(Joint Test Action Group)接口连接,其连接方式如图 3 所示。图3 PC 计算机与FPGA 开发板的连接八、实验步骤1. 新建工程( New Project)启动 ISE Design Suite 13.4软件,然后选择菜单FileNew Project,弹出 NewProject Wizard 对话框,选择 Verilog Module,并在对话框中输入工程名并指定工作路径D:ALU 。ALU ,2. 基本功能器件的设计与实现( 1) 32位 2选 1多路选择器在工程管理区任意位置单击鼠标右键,在弹出的菜单中选

4、择New Source命令,创建一个 Verilog Module 模块,名称为: MUX32_2_1 ,此时开发环境的工程管理区中将有一个 MUX32_2_1 ( MUX32_2_1.v )模块,双击该模块,然后在源代码编辑区编写实现该模块的代码:module MUX32_2_1(input 31:0 A,input 31:0 B,input Sel,output31:0 O);assign O = Sel? B : A;endmodule代码输入完成后, 在工程管理区选中要检查的模块,检查 Verilog HDL 语法( Synthesize XST Check Syntax)。检查通过后

5、,进行 Verilog HDL 代码综合。在工程管理区的 View 中选择 Implementation,并选中 MUX32_2_1 模块,进行综合( Synthesize)。综合通过后,查看 RTL 层电路(Synthesize XST View RTL Schematic),结果如图 4 所示。图 4 模块 MUX32_2_1 的综合( Synthesize )结果对模块 MUX32_2_1 进行仿真( Simulation),在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source命令,在 New Source Wizard 对话框中选择 Verilog Test Fix

6、ture,输入测试文件名: MUX_32_2_1_tb ,单击 Next 按钮,进入下一个对话框,选择要测试的模块MUX_32_2_1 ,点击 Next 按钮,再点击Finish 按钮, ISE 会在源代码编 辑区 自动生 成测试模块的代码 。 在模块MUX_32_2_1_tb 中添加如下测试代码:module MUX32_2_1_tb;reg 31:0 A;reg 31:0 B;reg Sel;wire 31:0 O;/ Instantiate the Unit Under Test (UUT) MUX32_2_1 uut (.A(A),.B(B),.Sel(Sel),.O(O);initi

7、al begin/ Initialize Inputs A=0;B=0; Sel = 0;/ Wait 100 ns for global reset to finish #100;/ Add stimulus hereA = 32'000000000;B = 32'h00000000;Sel = 1'b0;#100;A = 32'000000000;B = 32'h00000000;Sel = 1'b1;#100;A = 32'000000000;B = 32'h00000001;Sel = 1'b1;#100;ende

8、ndmodule然后进行仿真,将工程管理区中View 选项设置为Simulation,仿真参数设置完后,选中 MUX32_2_1_tb 模块,双击 Simulate Behavioral Model ,得到仿真结果,如图 5 所示:图 5 模块 MUX32_2_1 的仿真结果( 2) 5位 2选 1多路选择器在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source命令,创建一个 Verilog Module 模块,名称为: MUX5_2_1 ,此时开发环境的工程管理区中将有一个 MUX5_2_1 ( MUX5_2_1.v )模块,双击该模块,然后在源代码编辑区编写实现该模块的代

9、码:然后输入其实现代码:module MUX5_2_1(input 4:0 A,input 4:0 B,input Sel,output4:0 O);assign O = Sel? B : A;endmodule在 ISE 集成开发环境中,进行语法检查(Synthesize XST CheckSyntax),检查通过后,对模块 MUX5_2_1 进行综合(Synthesize XST View RTL Schematic),得到 RTL 视图,结果如图 6 所示。图 6 模块 MUX5_2_1 的综合( Synthesize )结果在 ISE 集成开发环境中,对模块 MUX5_2_1 进行仿真

10、( Simulation)。首先输入如下测式代码:module MUX5_2_1_tb;reg 4:0 A;reg 4:0 B;reg Sel;wire 4:0 O;/ Instantiate the Unit Under Test (UUT) MUX32_2_1 uut (.A(A),.B(B),.Sel(Sel),.O(O);initial begin/ Initialize Inputs A=0;B=0; Sel = 0;/ Wait 100 ns for global reset to finish #100;/ Add stimulus hereA = 5'00001;B =

11、 5'00000;Sel = 1'b0;#100;A = 5'00001;B = 5'00000;Sel = 1'b1;#100;A = 5'00000;B = 5'00001;Sel = 1'b1;#100;endendmodule然后进行仿真,仿真结果如图7 所示。图7 模块 MUX32_2_1 的仿真结果( 3)32 位寄存器堆在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source命令,创建一个 Verilog Module 模块,名称为: RegFile,输入其实现代码:module RegFile(in

12、put 4:0 Rn1, Rn2, Wn,input Write,input 31:0 Wd,output 31:0 A, B,input Clock);reg 31:0 Register1:31;assign A = ( Rn1 = 0 )? 0: RegisterRn1;assign B = ( Rn2 = 0 )? 0: RegisterRn2;always ( posedge Clock) beginif (Write) && ( Wn != 0) RegisterWn <= Wd;endendmodule语法通过后,对模块 RegFile 进行综合( Synth

13、esize XST View RTL Schematic),得到 RTL 视图,结果如图 8 所示。图 8 模块 RegFile 的综合( Synthesize )结果进行语法检查( Synthesize XST Check Syntax),检查通过后,对模块 RegFile 进行仿真( Simulation),输入如下测式代码:module RegFile_tb;/ Inputsreg 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;/ Instan

14、tiate the Unit Under Test (UUT) RegFiel uut (.Rn1(Rn1),.Rn2(Rn2),.Wn(Wn),.Write(Write),.Wd(Wd),.A(A),.B(B),.Clock(Clock);initial begin/ Initialize Inputs Rn1 = 0;Rn2 = 0; Wn = 0; Write = 0; Wd = 0; Clock = 0;/ Wait 100 ns for global reset to finish #100;/ Add stimulus hereRn1 = 0;Rn2 = 1;Wn = 1;Writ

15、e = 1;Wd = 2;Clock = 1;/ Wait 100 ns for global reset to finish #100;Rn1 = 0;Rn2 = 0;Wn = 2;Write = 1;Wd = 3;Clock = 1;/ Wait 100 ns for global reset to finish #100;Rn1 = 1;Rn2 = 0;Wn = 0;Write = 0;Wd = 1;Clock = 1;/ Wait 100 ns for global reset to finish #100;Rn1 = 1;Rn2 = 1;Wn = 1;Write = 1;Wd = 5

16、;Clock = 1;/ Wait 100 ns for global reset to finish #100;Rn1 = 0;Rn2 = 0;Wn = 0;Write = 1;Wd = 0;Clock = 0;/ Wait 100 ns for global reset to finish #100;endendmodule然后进行仿真,仿真结果如图9 所示。图 9 模块 RegFile 的仿真结果( 4) ALU在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source命令,创建一个 Verilog Module 模块,名称为: ALU ,输入其实现代码:module AL

17、U(input 31:0 A,B,input 2:0 ALU_operation,output 31:0 Result,output Zero);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 B: (ALU_operation = 3&

18、#39;b110) ? B15:0,16'h0:32'hxxxxxxxx;assign Zero = |Result;endmodule进行语法检查( Synthesize XST Check Syntax),检查通过后,对模块 ALU 进行仿真( Simulation ),输入如下测式代码:module ALU_tb;/ Inputsreg 31:0 A;reg 31:0 B;reg 2:0 ALU_operation;/ Outputswire 31:0 Result;wire Zero;/ Instantiate the Unit Under Test (UUT) ALU

19、 uut (.A(A),.B(B),.ALU_operation(ALU_operation),.Result(Result),.Zero(Zero);initial begin/ Initialize Inputs A=0;B=0;ALU_operation = 3'b000;/ Wait 100 ns for global reset to finish #100;/ Add stimulus hereA=1;B=2;ALU_operation = 3'b000;/ Wait 100 ns for global reset to finish #100;A=2; B=1;A

20、LU_operation = 4;/ Wait 100 ns for global reset to finish #100;A=1; B=0;ALU_operation = 3'b001;/ Wait 100 ns for global reset to finish #100;A=1; B=0;ALU_operation = 3'b101;/ Wait 100 ns for global reset to finish#100;A=0;B=0;ALU_operation = 3'b010;/ Wait 100 ns for global reset to finis

21、h #100;A=1;B=0;ALU_operation = 3'b110;/ Wait 100 ns for global reset to finish #100;endendmodule然后进行仿真,仿真结果如图10 所示。图 10 模块 ALU 的仿真结果九、实验数据及结果分析:实现了 32 位 2 选 1 多路选择器,5 位 2 选 1 多路选择器,32 位寄存器和 ALU ,测试结果与其实验结果是一致的。十、实验结论:多路选择器通过条件运算符(?:)即可实现其逻辑;通过设定寄存器地址及相应的控制信号,可实现32 位寄存器堆。之后给定不同的操作信号,根据仿真结果观察寄存器堆对

22、应的响应。ALU 的算术运算和逻辑运算得以实现。十一、总结及心得体会:通过本次实验,基本掌握了相关器件的设计与实现方法,进一步了解了多路选择器,寄存器堆和ALU 的工作流程。编程实现相应的功能,对Verilog 语言编程的掌握更上一层楼。十二、对本实验过程及方法、手段的改进建议:希望老师在软件的使用方面给予更多的指导。使用流程在指导书里给出了,但是编程方面的机制、 技巧等等, 能进一步了解会更好。 实验室大部分的电脑都有病毒,希望实验中心的老师处理处理。报告评分:指导教师签字:电子科技大学实验二报告学生姓名: ZYZ学 号: 2014060103026指导教师: CAG实验地点:主楼A2-41

23、1实验时间: 2016 年 12 月 4 日一、实验室名称:A2-411。二、实验项目名称:控制器与取指电路设计与实现。三、实验学时:实验学时是 3 学时。四、实验原理:1. 控制器为了简化设计, 控制器由控制单元 Control 和 ALU 控制单元组成, 控制器结构如图 11 所示。图 11 控制器的结构2. 取指电路取指电路如图 12 所示,利用 ADD 、PC 寄存器、多路选择器和左移两位模块,实现该取指电路,其中一个 ADD 的一端输入固定为 4。图 12 取指电路五、实验目的通过本实验设计并实现控制器和取指电路, 使其能够对相应的三类指令进行响应。并设计实现 32 位加法器,左移两

24、位部件等基本器件。六、实验内容控制单元 Control控制单元 Control 的输入与输出之间的关系如表1 所示。表 1 控制单元 Control 的输入与输出InputOutputtcgdrrhpeapcsrReWWnmDSoRoagUtmgmt指令op5:0rueLmeexBJRAeeRMEMMRT00000000100010Xlw100011000111101sw10101100X1XX011beq00010010X0XX00Xjump00001001XXXX00Xori001101000100100addiu001001000100101ALU 控制单元ALU 控制单元 ALUOp

25、的输入与输出关系如表2 所示。表 2 ALUop 的输入与输出指令func5:0功能ALU_op2:0100000add100010sub001011R-Type100011subu101101010slt110111101011sltulw取数000sw存数000beqXXXXXX分支100jump跳转XXXori按位或010addiu加000取指电路七、实验器材(设备、元器件) :安装了 Xilinx ISE Design Suite 13.4 的 PC 机一台。八、实验步骤1. ADD 部件的设计与实现新建 ADD32 ( ADD32.v )模块,然后在源代码编辑区编写实现该模块的代码:

26、module ADD32(A, B, C);input 31:0 A, B;output 31:0 C;assign C = A+B;endmodule2. 左移两位部件的设计与实现新建 Left_2_Shifter(Left_2_Shifter.v)模块,然后在源代码编辑区编写实现该模块的代码:module Left_2_Shifter(a, o);input 31:0 a;output 31:0 o;assign o = a<<2;endmodule3. 控制单元的设计和实现新建 Control 模块,然后在源代码编辑区编写实现该模块的代码:module Control(inp

27、ut 5:0 op,output RegWr,ALUSrc,RegDst,output MemWr, MemRead, MemtoReg,output Branch,Jump,output Extop,output 2:0 ALUop);wire Rt = |op;wire lw = op5 & op4 & op3 & op2 & op1 &op0;wire sw = op5 & op4 & op3 & op2 & op1 & op0; wire beq = op5 & op4 & op3 &

28、; op2 & op1& op0;wire ori = op5 & op4 & op3 & op2 & op1 &op0;wireaddiu= op5& op4& op3& op2& op1& op0;wire jump = op5 & op4 & op3 & op2 & op1& op0;assign RegDst = Rt;assign RegWr = Rt | lw | ori | addiu;assign ALUSrc = lw | sw | ori

29、| addiu;assign MemWr = sw;assign MemRead = lw;assign MemtoReg = lw;assign Branch = beq;assign Jump = jump;assign ALUop2 = beq;assign ALUop1 = ori;assign ALUop0 = Rt;endmodule4. 控制器的设计与实现新建 Control_Unit 模块,然后在源代码编辑区编写实现该模块的代码:module Control_Unit(U1(.func(func), .ALUctr(ALUctr), .ALU_op(ALU_op);input

30、5:0 op, func,output RegDst, RegWrite, ALUSrc,output MemWrite, MemRead, MemtoReg,output Branch,output 2:0 ALU_op);wire 1:0 ALUctr;Control U0( .op(op),.RegDst(RegDst),.RegWr(RegWr),.ALUSrc(ALUSrc),.MemWr(MemWr),.MemRead(MemRead),.MemtoReg(MemtoReg),.Branch(Branch),.Jump(Jump);U1(.func(func), .ALUctr(A

31、LUctr), .ALUop(ALUop); endmodule对模块 Control_Unit 进行综合,得到 RTL 视图,结果如图13 所示。图 13 模块 Control_Unit 的综合( Synthesize )结果语法检查通过后,对模块 Control_Unit 进行仿真( Simulation),输入如下测式代码:module Control_Unit_tb;/ Inputs reg 5:0 op; reg 5:0 func;/ Outputs wire RegDst; wire RegWrite; wire ALUSrc;wire MemWrite;wire MemRead;

32、wire MemtoReg;wire Branch;wire 2:0 ALU_op;/ Instantiate the Unit Under Test (UUT) Control_Unit uut (.op(op),.func(func),.RegDst(RegDst),.RegWrite(RegWrite),.ALUSrc(ALUSrc),.MemWrite(MemWrite),.MemRead(MemRead),.MemtoReg(MemtoReg),.Branch(Branch),.ALU_op(ALU_op);initial begin/ Initialize Inputs op =

33、6'b000000;func = 6'b100000;#100;op = 6'b000000;func = 6'b100010;#100;op = 6'b000000;func = 6'b100011;#100;op = 6'b000000;func = 6'b101010;#100;op = 6'b000000;func = 6'b101011;#100;op = 6'b001101;func = 6'b000000;#100;op = 6'b001001;func = 6'b00

34、0000;#100;op = 6'b100011;func = 6'b000000;#100;op = 6'b101011;func = 6'b000000;#100;op = 6'b000100;func = 6'b000000;#100;op = 6'b000010;func = 6'b000000;#100;/ Add stimulus hereendendmodule然后进行仿真,仿真结果如图14 所示。图 14Control_Unit 的仿真结果5. 取指电路的设计和实现新建 Fetch 模块,然后在源代码编辑区编写实现

35、该模块的代码:module Fetch(input B , Z, Reset, Clock,input 31:0 B_addr,output 31:0 addr);reg 31:0 PC;wire 31:0 sum0, B_addr1, sum1, next_pc;wire sel=Z & B;Left_2_Shifter U0(B_addr, B_addr1);ADD32 U1(PC, 4, sum0);ADD32 U2(sum0, B_addr1, sum1);MUX32_2_1 M1(sum0, sum1, sel, next_pc);assign addr = PC;alway

36、s (posedge Clock or negedge Reset ) begin if(Reset = 0)PC=0;elsePC = next_pc;endendmodule对模块 Fetch 进行综合,得到RTL 视图,结果如图15 所示。图 15 模块 Fetch 的综合( Synthesize )结果对模块 Fetch 进行仿真( Simulation),输入如下测式代码:module Fetch_tb;/ Inputs reg B; reg Z; reg Reset; reg Clock;reg 31:0 B_addr;/ Outputswire 31:0 addr;/ Insta

37、ntiate the Unit Under Test (UUT) Fetch uut (.B(B),.Z(Z),.Reset(Reset),.Clock(Clock),.B_addr(B_addr),.addr(addr);initial begin/ Initialize Inputs B=0;Z=1; Reset = 0; Clock = 1;B_addr = 32'h00000110;/ Wait 100 ns for global reset to finish #100;B=0;Z=0;Reset = 1;Clock = 0;B_addr = 32'h00000110

38、;/ Wait 100 ns for global reset to finish #100;B=0;Z=1;Reset = 1;Clock = 1;B_addr = 32'h00000110;/ Wait 100 ns for global reset to finish #100;B=1;Z=0;Reset = 1;Clock = 0;B_addr = 32'h00000110;/ Wait 100 ns for global reset to finish #100;B=1;Z=1;Reset = 1;Clock = 1;B_addr = 32'h00000110

39、;/ Wait 100 ns for global reset to finish #100;B=1;Z=1;Reset = 1;Clock = 0;B_addr = 32'h00000110;/ Wait 100 ns for global reset to finish #100;/ Add stimulus hereendendmodule然后进行仿真,仿真结果如图16 所示。图 16 模块 Fetch 的仿真结果九、实验数据及结果分析:实现了控制器和取指电路,测试结果与理论分析是一致的。十、实验结论:通过设定输入信号, 观察相关操作的仿真结果, 实现了控制器和取指电路对不同的操

40、作信号的响应。控制器和取指电路的功能得以实现。十一、总结及心得体会:各个小部件的实现相对而言简单一些,组合到一起,总是免不了出现奇奇怪怪的 Error,如将多路选择器和 ALU 或寄存器堆进行组合时。山重水复疑无路,柳暗花明又一村。通过本次实验深入理解了控制器和取指电路的原理, 并在设计实现控制器和取指电路的过程中设计完成了 32 位加法器,左移两位部件等基本器件。观察实验结果,进一步了解了控制器和取指电路的工作原理以及相互之间的联系, 理清了思路。十二、对本实验过程及方法、手段的改进建议:将多路选择器和 ALU 或寄存器堆进行组合时,总是免不了出现奇奇怪怪的Error,各个小部件的实现相对而

41、言简单一些,组合到一起就有问题了。希望老师能给出一些注意事项。可以在现有取指电路的基础上多设计一些基本器件,可以在规定功能的基础上自行选择设计相应的基本器件实现功能,从而避免将整个电路局限在 CPU 的内部电路上,可以更好的理解各器件的原理及联系,和取指电路的封装等。报告评分:指导教师签字:电子科技大学实验三报告学生姓名: ZYZ学 号: 2014060103026指导教师: CAG实验地点:主楼A2-411实验时间: 2016 年 12 月 11 日一、实验室名称:A2-411。二、实验项目名称:MIPS_CPU 的设计与实现。三、实验学时:实验学时是 3 学时。四、实验原理:单周期计算机的

42、结构图原理如图17 如示。图17 单周期计算机的结构五、实验目的通过本实验,让学生掌握单周期 CPU 的工作原理,控制器、运算器等部件设计的基本方法和技能,加深对所学知识的理解和掌握。六、实验内容从图1 中除去指令存储器Instruction ROM 、数据存储器DATA MEM以及最右边的32 位2 路选择器MUX,将剩余的电路封装成一个单周期的CPU( MIPS_CPU)模块。七、实验器材(设备、元器件) :安装了 Xilinx ISE Design Suite 13.4 的 PC 机一台。八、实验步骤1. 拟定 MIPS_CPU的输入输出信息输入信号:1. Reset复位信号2. Clo

43、ck时钟信号3. Inst从指令存储器读出的指令码( 32 位)4. Data寄存器堆的写入数据( 32 位)输出信号:1. MemWrite数据存储器 DATA MEM 的写信号2. MemRead数据存储器 DATA MEM 的读信号3. MemtoReg 32 位 2 路选择器的控制信号4. Result运算器 ALU 的输出结果( 32 位)5. Addr取指电路形成的下条指令的地址6. b_data寄存器堆的 B 口输出到数据存储器的写入端口2. Verilog HDL 语言编程module MIPS_CPU(input Reset, Clock,input 31:0 Inst, D

44、ata,output 31:0 Result, addr,output 31:0 b_data,output MemWrite, MemRead, MemtoReg);wire RegDst, RegWrite, ALUSrc, Branch, Zero;wire 2:0 ALU_op;wire 4:0 Wn;wire 31:0 A, B, Ext_Imm, ALU_B;reg 31:0 addr1;Fetch U0(Branch, Zero, Reset, Clock, Ext_Imm, addr);Control_Unit U1(.op(Inst31:26), .func(Inst5:0),.RegDst(RegDst), .RegWrite(RegWrite), .ALUSrc(ALUSrc),.MemWrite(

温馨提示

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

评论

0/150

提交评论