华科微机原理实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机原理实验报告

课程:微机原理

指导老师

姓名:

学号:

实验名称:Lab 02: MIPS处理器部件实现A

微机原理实验报告

一、实验目的

本实验旨在实现MIPS处理器的部件—控制器和ALU,理解CPU控制器,理解ALU的原理,使用Verilog语言设计CPU控制器和ALU ,使用ISim进行行为仿真。

二、实验原理及说明

MIPS的基本架构如图1所示,包括Control,ALU这样的组合逻辑单元,也包括如instruction memory,Data memory和Registers file存储单元。本实验主要实现CPU Control和ALU两个部分。

(一)CPU控制器的实现

CPU Control单元输入为指令的opCode字段,即操作码;以及R指令的funct编码。操作码和Funct编码经过主控制单元的译码,给ALU,Data Memory,Registers ,Muxs等部件输出正确的控制信号。

图2. MIPS基本指令格式

图: 控制模块的IO定义

注:Jump指令编码是000010,Jump输出信号为1,其他输出信号都为0

图3. OpCode与控制输出的编码关系

图4. Funct,ALUOp与ALU Control编码关系

(二) ALU的实现

ALU是CPU核心的计算单元,实现诸如加,减,或,与等操作。

算术操作的编码

三、实验verilog代码

(一)CPU控制器的实现

module Ctr(

input [5:0] OpCode,

input [5:0] Funct,

output regRegDst,

output regALUSrc,

output regRegWrite,

output regMemWrite,

output regMemRead,

output regMemtoReg,

output reg Branch,

output reg Jump,

output reg [3:0] ALUControl

);

reg [1:0] ALUOp;

always @(OpCode)

begin

case(OpCode)

//R type

6'b000000:

begin

RegDst=1; ALUSrc=0; RegWrite=1; MemWrite=0; MemRead=0; MemtoReg=0;

Branch=0;

ALUOp=2'b10; Jump=0;

end

//beq

6'b000100:

begin

RegDst=1'bx; ALUSrc=0; RegWrite=0; MemWrite=0; MemRead=0; MemtoReg=1'bx; Branch=1;

ALUOp=2'b01; Jump=0;

end

//lw

6'b100011:

begin

RegDst=0; ALUSrc=1; RegWrite=1; MemWrite=0; MemRead=1; MemtoReg=1;

Branch=0;

ALUOp=2'b00; Jump=0;

end

//sw

6'b101011:

begin

RegDst=1'bx;

ALUSrc=1;

RegWrite=0;

MemWrite=1;

MemRead=0;

MemtoReg=1'bx;

Branch=0;

ALUOp=2'b00;

Jump=0;

end

//Jump

6'b000010:

begin

RegDst=0;

ALUSrc=0;

MemtoReg=0;

RegWrite=0;

MemRead=0;

MemWrite=0;

Branch=0;

ALUOp=2'b00;

Jump=1;

end

endcase

end

always @(ALUOp or Funct)

begin

casex({ALUOp,Funct})

8'b00xxxxxx: ALUControl=4'b0010;

8'b01xxxxxx: ALUControl=4'b0110;

8'b1xxx0000: ALUControl=4'b0010;

8'b1xxx0010: ALUControl=4'b0110;

8'b1xxx0100: ALUControl=4'b0000;

8'b1xxx0101: ALUControl=4'b0001;

8'b1xxx1010: ALUControl=4'b0111;

default: ALUControl=4'b0000;

endcase

end

endmodule

(二) ALU的实现

module ALU(

input [31:0] SrcA,

input [31:0] SrcB,

input [3:0] ALUCtr,

output Zero,

output reg [31:0] ALURes

);

assign Zero=(ALURes==1'b0);

always @(SrcA or SrcB or ALUCtr)

begin

case(ALUCtr)

4'b0000: ALURes=SrcA&SrcB; //AND

4'b0001: ALURes=SrcA | SrcB; //OR

4'b0010: ALURes=SrcA + SrcB; //add

4'b0110: ALURes=SrcA - SrcB; //substract

4'b0111: ALURes=SrcA

default ALURes=32'h0;

endcase

end

endmodule

四、仿真测试

1.代码

(一)CPU控制器的实现

module Ctr_tb;

// Inputs

reg [5:0] OpCode;

reg [5:0] Funct;

// Outputs

wire RegDst;

wire ALUSrc;

wire RegWrite;

wire MemWrite;

wire MemRead;

wire MemtoReg;

wire Branch;

wire Jump;

wire [3:0] ALUControl;

// Instantiate the Unit Under Test (UUT)

Ctruut (

相关文档
最新文档