计算机设计与实践——MIPS基本指令

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

MIPS 基本指令和寻址方式:

MIPS 是典型的RISC 处理器,采用32位定长指令字,操作码字段也是固定长度,没有专门的寻址方式字段,由指令格式确定各操作数的寻址方式。

MIPS 指令格式一般有三种格式: R-型指令格式 I-型指令格式 J-型指令格式

R _Type 指指指指

26

21

16

11

6

31

OP : 操作码

rs : 第一个源操作数寄存器

rt : 第二个源操作数寄存器(单目原数据) rd : 结果寄存器 shamt :移位指令的位移量 func : 指令的具体操作类型

特点:R-型指令是RR 型指令,其操作码OP 字段是特定的“000000”,具体操作类型由

func 字段给定。例如:func=“100000”时,表示“加法”运算。

R[rd] ← R[rs] + R[rt]

I_Type 指指指指

OP immediate

rt

rs 0

262116

3115

特点:I-型指令是立即数型指令

双目运算:R[rt] R[rs](OP)SignExt(imm16)

Load指令:

Addr ←R[rs] + SignExt(imm16) 计算数据地址(立即数要进行符号扩

展)

R[rt] ←M[Addr] 从存储器中取出数据,装入到寄存器中

Store指令:

Addr ←R[rs] + SignExt(imm16)

M[Addr] ←R[rt]

J_Type 指令格式

OP target address 0

26

31

6bit26bit

25

特点:J-型指令主要是无条件跳转指令,将当前PC的高4位拼上26位立即数,后补两个“0”,作为跳转目标地址。

j L //goto L 指指指指指指指指指

jal L //$ra指PC+4;goto L 指指指指指指指指指

R型指令:

定点运算:add / addu,sub / subu,sra,mult/multu,div/divu

逻辑运算:and / or / nor,sll / srl

比较分支:beq / bne / slt / sltu

跳转指令:jr

I型指令:

定点运算:addi / addiu

逻辑运算:andi / ori

比较分支:slti / sltiu

数据传送:lw / sw/ lhu / sh / lbu / sb / lui

J型指令:j / jal

设计模块划分,教学安排

1、MIPS格式指令系统设计

2、指令存储器设计

3、寄存器堆设计

4、ALU设计——基本算术、逻辑单元的设计

32位超前进位加法器的设计

32位桶式移位寄存器的设计

5、取指令部件的设计

6、立即数处理单元设计

7、单周期处理器设计——R型指令的数据通路设计

I型指令的数据通路设计

Load/Store指令的数据通路设计

分支指令/转移指令的数据通路设计

综合12条指令的完整数据通路设计

8、ALU控制单元设计

9、主控制单元的设计

10、单周期处理器总体验证

11、异常和中断处理及其电路实现

12、带有异常和中断处理功能的处理器的设计

设计示例1:指令存储器设计

1、指令存储器模块定义:

指令存储器用于存放CPU运算的程序指令和数据等,采用单端口存储器设计,设计最大为64个存储单元,每个存储单元数据宽度为32bit。下图为指令存储器的模块框图。

module

ExtMem

图1 模块框图

表1:存储器接口信号说明表

ExtMem_CLK ExtMem_WR ExtMem_RD

ExtMem_Adr Valid

Valid

ExtMem_Din

ExtMem_CS

图2 存储器接口读时序框图

ExtMem_CLK ExtMem_WR ExtMem_RD ExtMem_Adr Valid Valid

ExtMem_Dout

ExtMem_CS

图3 存储器接口写时序框图

Valid ExtMem_Dout

ExtMem_CLK ExtMem_WR ExtMem_RD ExtMem_Adr Valid Valid

ExtMem_Din ExtMem_CS Valid

图4 存储器接口读写时序框图

2、 设计电路源代码

Module ExtMem ( input ExtMem_CLK,

input ExtMem_CS,

input [5:0] ExtMem_Adr,

input ExtMem_WR,

input ExtMem_RD,

input [31:0] ExtMem_Din,

output [31:0] ExtMem_Dout );

reg [31:0] Memory [0: 63] ;

//---存储器写操作

always @( posedge ExtMem )

begin

if (~ExtMem_CS & ~ExtMem_WR ) Memory[ExtMem_Adr]<= ExtMem_Din;

end

//---存储器读操作方式1

always @( posedge ExtMem )

begin

if (~ExtMem_CS & ~ExtMem_RD ) ExtMem_Dout<= Memory[ExtMem_Adr];

end

//---存储器读操作方式2

always @( * )

相关文档
最新文档