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

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. jq的slideToggle效果

    slideToggle() 方法通过使用滑动效果(高度变化)来切换元素的可见状态. 如果被选元素是可见的,则隐藏这些元素,如果被选元素是隐藏的,则显示这些元素. 例子:一个简单的下拉菜单效果----& ...

  2. 史上最详细的信号使用说明(已被收藏和N次)

    Unix环境高级编程(第三版) 第10章 信号 文章目录 1. 引言 2. 信号的概念 2.1 信号操作之忽略信号 2.2 信号操作之捕捉信号 2.3 信号操作之执行系统默认操作 2.4 常见的信号 ...

  3. Servlet生命周期和方法

    一.五个生命周期方法,有三个很重要,初始化方法.提供服务方法和销毁方法 1.三个主要方法 2.另外两个重写的成员方法只做了解 二.生命周期详解 其中,每次刷新页面都是一次对servlet访问: 页面访 ...

  4. centos7修改服务器时区

    查看时区设置 timedatectl 列出所有时区,通过键盘上下键进行浏览 timedatectl list-timezones 修改服务器时区为Africa/Lagos # 拉各斯的时区,UTC+1 ...

  5. 解决国内npm安装太慢的方法,又不能FQ情况下,使用淘宝镜像教程

    安装npm及cnpm(Windows) [工具官网] 因为国内上网下载组件太慢,淘宝给我们提供了镜像源,,但是我不是建意FQ上网.条件有限的可以使用下面的方法安装CNPM,原文转自网络,正好自己需要也 ...

  6. Hello Wolrd

    这是一篇测试文章.....后续会更新一些文章.

  7. nuxt打包等注意事项

    打包步骤: 1.首先执行 npm run build 2.将打包好的 .nuxt static nuxt.config.js package.json 这四个文件丢到服务器的某个文件夹中,在服务器上安 ...

  8. 集合转数组:toArray()最优化方法探索

    优化背景 有些场景下(比如入参要求)需要将集合(比如List)转为数组类型,利用集合的toArray方法应该最为方便的,对于toArray()无参方法其返回的是Object[],强制转其他类型数组会C ...

  9. verifycode验证码模版

    # -*- coding:utf-8 -*- from django.shortcuts import HttpResponse def verifycode(request): # 引入绘图模块 f ...

  10. [转载]CentOS 7 创建本地YUM源

    本文中的"本地YUM源"包括三种类型:一是直接使用CentOS光盘作为本地yum源,优点是简单便捷,缺点是光盘软件包可能不完整(centos 7 Everything 总共才6.5 ...