华中科技大学 - 计算机组成原理
华中科技大学 - 计算机硬件系统设计

Microprocessor without Interlocked Pipleline Stages
无内部互锁流水级的微处理器

  • 属于RISC

MIPS指令格式

R型指令

6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
000000 Rs Rt Rd shamt funct
第一源操作数 第二源操作数 目标操作数,保存结果 在移位指令中使用 指定指令的具体功能

三寄存器R型指令

add

000000 Rs Rt Rd 00000 100000

sub

000000 Rs Rt Rd 00000 100010

and

000000 Rs Rt Rd 00000 100100

or

000000 Rs Rt Rd 00000 100101

xor

000000 Rs Rt Rd 00000 100110

两寄存器R型指令

sll(逻辑左移)

000000 00000 Rt Rd 偏移量 000000

srl(逻辑右移)

000000 00000 Rt Rd 偏移量 000010

sra(算术右移)

000000 00000 Rt Rd 偏移量 000011

单寄存器R型指令

jr(寄存器跳转)

000000 Rs 00000 00000 00000 001000

R型指令中的无条件分支指令:jr,jalr

I型指令

6 bits 5 bits 5 bits 16 bits
OP Rs Rt
标识操作功能 第1个源操作数 目的寄存器编号 第2个源操作数

双目运算、LOAD/STORE:Rs和立即数是源操作数,Rt为目标操作数
条件转移:Rs、Rt均为源操作数

面向运算的I型指令

addi

001000 Rs Rt imm

andi

001100 Rs Rt imm

ori

001101 Rs Rt imm

xori

001110 Rs Rt imm

addi的立即数扩展为符号扩展
(若为负数高16位补1)
其他三条进行0扩展
(高16位补0)

面向访存的I型指令

lw(从存储器读数据)

100011 Rs Rt imm

sw(把数据保存到存取器)

101011 Rs Rt imm

面向数位设置的I型指令

lui(把立即数加载到寄存器的高16位)

001111 00000 Rt imm

面向条件转移的I型指令

beq(寄存器相等则转移)

000100 Rs Rt imm

bne(寄存器不相等则转移)

000101 Rs Rt imm

I型指令中的有条件分支指令:beq, bne, bgtz( > 0 ), bgez( >= 0 ),bltz( < 0 ), blez( <= 0 )

J型指令

6 bits 26 bits
OP 立即数
跳转目标地址的部分地址

j(无条件跳转)

000010 address

jal(调用与联接)

001100 address

类似于X86架构的CALL。jal要保存返回地址

J型指令的无条件分支指令:j, jal

MIPS寄存器

在R和I型指令格式中,寄存器操作数字段均为5位,可编号32个寄存器

寄存器名 寄存器编号 说明
$s0 0 保存固定的常数0
$at 1 汇编器的临时变量
$v0 - $v1 2 - 3 字函数调用返回结果
$a0 - $a3 4 - 7 函数调用参数1-3
$t0 - $t7 8 - 15 临时变量,函数调用时不需要保存和恢复
$s0 - $s7 16 - 23 函数调用时需要保存和恢复的寄存器变量
$t8 - $t9 24 - 25 临时变量,函数调用时不需要保存和恢复
$k0 - $k1 26 -27 中断、异常处理程序使用
$gp 28 全局指针变量(Global Pointer)
$sp 29 堆栈指针变量(Stack Pointer)
$fp 30 帧指针变量(Frame Pointer)
$ra 31 返回地址(Return Address)

另外还有

  • 32个32位单精度浮点寄存器f0 - f31
  • 2个32位乘、商寄存器Hi和L0:运算乘法时分别存放64位乘积的高、低32位; 除法时分别存放余数和商

浮点寄存器和乘商寄存器没有编号,对程序员来说是透明的

MIPS寻址方式

MIPS32指令集中不单设寻址方式说明字段

  • R型指令:由OP和funct字段共同隐含说明(R型指令字段全为0,需要结合funct字段表示)
  • I、J型指令:由OP字段隐含

立即数寻址

immediate addressing

寄存器直接寻址

register addressing

add $t0,$s1,$s2 ;($t0 = $s1 + $s2)

基址寻址

basic addressing

使用通用寄存器作为基址寄存器,以立即数作为偏移量,立即数带符号扩展为32位,和基址寄存器的值一起得到主存地址

使用基址寻址的指令:lw, sw, lh, sh, lb, lbu等

相对寻址


PC的值和偏移量相加得到主存地址,以立即数为偏移量。立即数带符号扩展为32位并左移2位再和PC的内容相加
PC的值会被修改为相加结果

使用相对寻址的指令:beq, bne

页面寻址


26位的地址码左移2位变为28位,作为地址的低28位,PC的值会被修改
高4位是PC改变后的值(取出指令后PC自动增加)

单周期MIPS架构

取指Dp


由于需要在一个周期内完成取指译码执行的过程,不设置AR,DR,IR。
取指令和取操作数要同时完成,为了避免访存冲突将程序和数据分开存放(哈佛结构):

  • 指令Cache
  • 数据Cache

ALU和PC累加器分开

R型指令数据通路

以add $s0, $s1, $s2为例

  1. 以PC的内容访问IM,解析指令字段,分出3个寄存器编号
  2. 以寄存器编号访问寄存器堆
  3. 输出两路寄存器值,根据AluOP信号运算
  4. 当时钟到来,给出RegWrite,将结果写入寄存器堆

寄存器堆要支持两路读和一路写

I型指令数据通路

以lw $s0, 32($31)为例(从存储器读数据)

  1. 以PC的内容访问IM,解析指令字段,分出2个寄存器编号和立即数字段
  2. 以寄存器编号访问寄存器堆
  3. 立即数字段进行符号扩展单元,扩展为32位
  4. 输出一路寄存器值,和立即数相加得到DM地址
  5. 经过一个存储器延迟,数据到达WD端
  6. 时钟到来写入寄存器堆

sw $s0, 32($31)(从存储器读数据)

单周期MIPS数据通路


对于有多输入源的引脚,加上多路选择器和信号选择信号

beq数据通路的建立

J型指令的数据通路建立

需要增加JUMP控制信号,PC输入增加一个跳转地址

单周期MIPS控制器

单周期架构下,无时序逻辑

输入 输出
OP + funct 多路选择器选择信号
寄存器写使能信号
内存访问控制信号
运算器控制信号
指令译码信号

单周期MIPS关键路径

lw的最长路径

时钟周期 = Tclk_to_Q + Tmem + Tregfile_read + Talu + Tmem + Tmux + Tsetup

多周期MIPS架构

不区分指令和数据存储器(冯诺依曼结构),功能部件分时使用
时钟周期变小,传输通路变短
功能部件输出端增加寄存器锁存数据

多周期MIPS CPU数据通路

取指令T1


PC += 4

  1. PC的内容传输到ALU的输入端和
  2. ALUSrcB信号选择4传输到ALU的输入端
  3. AluOP信号选择运算方式
  4. 时钟到来,在PCWrite信号的配合下结果送回PC

根据PC的内容从主存取指令

  1. 给出IRWrite信号,时钟到来时PC值写入IR锁存,同时PC原有的值更新为PC+4

取指令T2

  1. 将IR的内容送入控制器产生控制信号
  2. 计算条件分支转移的地址(图紫色部分)

时钟到来,取出的数据锁存在AB

R型指令执行T3-T4

  1. 给出AluOP和ALUSrcA、ALUSrcB信号,完成信号
  2. 时钟到来C更新
  3. C的内容输出,在RegDst和RegWrite信号配合下,写回寄存器堆

lw执行T3-T5


4. A和立即数相加计算操作数地址,时钟到来结果锁存在C
5. 将C的内容传输到主存,时钟到来数据锁存在DR
6. DR的内容写入寄存器堆(IR给出目标寄存器编号)

beq执行T3

  1. AB内容传输到ALU的输入端,进行比较,相等在给出equal信号,与branch信号与后输入到PC作为写使能

多周期状态转换图


多周期MIPS CPU控制器

输入 输出
OP + funct 多路选择器选择信号
时钟信号 寄存器写使能信号
复位信号 内存访问控制信号
运算器控制信号
指令译码信号

MIPS指令 MIPS架构的更多相关文章

  1. MIPS指令学习二

    1.MIPS寻址方式 MIPS架构的寻址模式有寄存器寻址.立即数寻址.寄存器相对寻址和PC相对寻址4种,其中寄存器相对寻址.PC相对寻址介绍如下: 1.1.寄存器相对寻址 这种寻址模式主要被加载/存储 ...

  2. QtSpim实现MIPS指令的编写

    QtSpim实现MIPS指令的编写 由于各种对齐问题,cnblogs的格式难以控制,故贴图片,谅解.

  3. 3.6 MIPS指令简介

    计算机组成 3 指令系统体系结构 3.6 MIPS指令简介 MIPS秉承着指令数量少,指令功能简单的设计理念.那这样的设计理念是如何实现的呢?在这一节,我们就将来分析MIPS指令的特点. 相比于X86 ...

  4. 自己动手写CPU之第五阶段(3)——MIPS指令集中的逻辑、移位与空指令

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第17篇.我尽量每周四篇 5.4 逻辑.移位操作与空指令说明 MIPS32指令集架构中定义的逻辑操作指令有8条:and.and ...

  5. [zt]系统中常用MIPS指令

    指令 功能 应用实例 LB 从存储器中读取一个字节的数据到寄存器中 LB R1, 0(R2) LH 从存储器中读取半个字的数据到寄存器中 LH R1, 0(R2) LW 从存储器中读取一个字的数据到寄 ...

  6. 计算机组成原理作业一 熟悉MIPS指令

    第一题 .data outputd: .asciiz "Alpha","November","First","alpha" ...

  7. MIPS指令的CPU实现:ALU设计

    设计CPU的第一步,设计一个简单的逻辑运算单元ALU.同时对Verilog语言也有一定要求. 一.实验内容 如图,ALU接受两个N位的输入,得到N位的输出,通过控制信号F决定运算功能. 将ALU的输出 ...

  8. 自己动手写处理器之第一阶段(2)——MIPS指令集架构的演变

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第三篇.我尽量每周四篇 MIPS指令集架构自上世纪80年代出现后.一直在进行着更新换代,从最初的MIPS I到MIPS V,发 ...

  9. MIPS 汇编指令学习

    MIPS 寄存器 MIPS comes with 32 general purpose registers named $0. . . $31Registers also have symbolic ...

随机推荐

  1. 【数据库上】 第四讲 E-R模型基础知识

    第四讲 E-R模型基础知识 一.数据库设计过程 数据库设计的关键阶段? 各个阶段设计的主要任务? 基础条件:清楚一个应用系统的功能需求与数据需求(直接与用户交互.数据流程图示例/UML类图等) 核心阶 ...

  2. Spring Cloud Zuul 学习+实践

    首先有必要了解一下什么是Zuul,它和Spring Cloud有什么关系. Zuul在Spring Cloud中承担着网关的职责,可以理解为客户端和服务端交互中的唯一通道.所有的客户端请求都会首先发送 ...

  3. 用Java写了一个程序,将一个Mysql库中的表,迁移到另外一个server上的Mysql库中

    用Navicat做数据迁移,因为数据量比较大,迁移过过程中一个是进展不直观,另外就是cpu占用率高的时候,屏幕跟死机了一样点不动按钮,不好中断. 想了想,干脆自己写一个. 在网上找了一个sqllite ...

  4. Spring Cloud Eureka 之常用配置解析

    [原创内容,转载.引用请注明出处] 1. 配置项解析 1.1 通用配置 # 应用名称,将会显示在Eureka界面的应用名称列 spring.application.name=config-servic ...

  5. Django学习day14BBS项目开发1.0

    每日测验 """ 1.简述auth模块功能 2.简述项目开发流程 3.简述bbs表设计 """ 内容回顾 auth模块 "&quo ...

  6. TP5路由的位置导致错误

    // 测试 '[js]' => [ ':id' => ['test/test/js', ['method' => 'get'], ['id' => '\d+']], ':id/ ...

  7. azkaban3.90.0部署

    1.下载这个网友提供的编译包,自己编的老出错,没弄了 https://blog.csdn.net/logincheck/article/details/110119987 2.将 解压到 /opt/m ...

  8. springboot pom.xml

    Demo project for Spring Boot <?xml version="1.0" encoding="UTF-8"?> <pr ...

  9. Appium 自动化测试改造思路

    流水账脚本 从头到尾编写测试脚本 PO封装 业务行为与操作具体页面元素分离 basepage封装 如封装find方法,目的时增强稳定性 数据驱动封装 将常用的数据改为配置文件 为构建测试平台打基础

  10. php备份mysql 数据库

    1.新建php文件 <?phpheader('Content-Type:text/html;charset=utf8'); ini_set("max_execution_time&qu ...