指令系统与MIPS汇编语言

指令格式

指令系统概述

指令系统是计算机执行程序的基础,它定义了计算机的所有指令和操作方式,具体包括以下三个方面:

  • 操作类型:指令系统中应提供哪些操作?常见的基本操作有 LD(加载)、ST(存储)、INC(加一)、BRN(跳转),这些操作足以编写任何计算程序,但实际使用中,单独依赖这些指令会导致程序过长。
  • 操作对象:如何表示操作对象?可以表示多少个?操作对象通常包括寄存器和内存单元,大多数情况下为双操作数形式(如 A <- B + C),也可能有单操作数形式(如 A <- ~B)。
  • 指令格式:如何将这些操作类型和对象编码成统一的格式?这涉及到指令的长度、字段数量及其编码方式。

机器指令的要素

每条机器指令至少包含四个基本要素:

  1. 操作码(Opcode):用于指明执行的具体操作,如加法、存储等。
  2. 源操作数地址:指向执行操作的源操作数地址,可能包含一个或多个地址。
  3. 目的操作数地址:操作结果需要存储的地址。
  4. 下一条指令的地址:通常程序中的指令按顺序执行,因此在大多数情况下无需显式指定下一条指令地址,只有少数指令(如跳转指令)需要明确给出。

指令类型

指令根据其功能可以分为以下几类:

  • 数据传输指令:用于寄存器和存储器之间或寄存器之间的数据传递。
  • 算术/逻辑运算指令:用于整型数或浮点数的算术运算和逻辑运算。
  • 程序控制指令:用于改变程序的执行顺序,常见的有条件跳转、循环控制、子程序调用和返回指令。
  • 其他指令:特权指令(如多任务操作系统中的特权操作)、暂停指令和空操作指令。

操作数的类型

操作数可以表示以下类型的数据:

  • 数值类型:包括无符号数、定点数、浮点数等。
  • 逻辑型数据:如布尔值、字符等。
  • 地址类型:操作数或指令的内存地址。

操作数的位置

操作数可以存储在不同的位置:

  • 存储器地址:操作数存储在内存中的具体地址。
  • 寄存器地址:操作数存储在寄存器中。
  • 输入输出端口:用于与外部设备进行数据交换的端口地址。

MIPS指令系统

MIPS概述

MIPS是基于 RISC(精简指令集计算机) 的指令系统,最早由斯坦福大学的Patterson教授带领的团队在1980年代初开发。MIPS指令集的主要特点是:

  • 通过简化指令集设计,减少了硬件复杂度,提高了执行效率。
  • 典型的MIPS处理器包括R2000(32位)、R3000(32位)、R4000(64位)等。
  • MIPS指令集遵循 Load-Store架构 ,即内存只能通过加载(LOAD)和存储(STORE)指令访问。

MIPS的寄存器结构

  • 通用寄存器:MIPS有32个32位的通用寄存器(GPR),标号从 $0 到 $31。其中:
    • $zero:值恒为0。
    • $at:保留给汇编程序使用。
    • $v0 - $v1:用于存储函数返回值。
    • $a0 - $a3:用于传递函数参数。
    • $t0 - $t9:临时寄存器,用于存储中间运算结果。
    • $s0 - $s7:保存寄存器,函数调用过程中不会被覆盖。
    • $k0 - $k1:保留给操作系统使用。
    • $gp:全局指针。
    • $sp:栈指针,指向当前栈顶。
    • $ra:返回地址寄存器,保存子程序调用的返回地址。

MIPS指令格式

MIPS指令长度固定为32位,主要分为以下三种格式:

  • R格式(Register):适用于寄存器之间的运算操作。结构如下:

    • Opcode(6位):操作码。
    • Rs(5位):第一个源操作数寄存器。
    • Rt(5位):第二个源操作数寄存器。
    • Rd(5位):目标寄存器。
    • Shamt(5位):移位量(用于移位指令)。
    • Func(6位):功能字段,进一步指定具体操作。
  • I格式(Immediate):适用于使用立即数的指令,结构如下:

    • Opcode(6位):操作码。
    • Rs(5位):源操作数寄存器。
    • Rt(5位):目标寄存器。
    • Immediate(16位):立即数。
  • J格式(Jump):用于跳转指令,结构如下:

    • Opcode(6位):操作码。
    • Target(26位):跳转目标地址。

MIPS指令类型

MIPS的指令大致可分为以下几类:

  • Load/Store指令:如 LW(加载字)和 SW(存储字),用于在寄存器和存储器之间传输数据。
  • 算术指令:如 ADD、SUB,可以对寄存器中的数值进行加法和减法运算。
  • 逻辑指令:如 AND、OR,用于逻辑运算。
  • 移位指令:如 SLL(逻辑左移)、SRL(逻辑右移),用于位移操作。
  • 条件分支指令:如 BEQ(相等时分支),用于控制程序流的执行。
  • 跳转指令:如 J(无条件跳转),用于在程序中跳转到指定地址。

MIPS汇编语言

MIPS汇编语言概述

MIPS汇编语言的语法简单,指令集中每条指令都对应具体的硬件操作。MIPS汇编程序由数据段、代码段和全局符号组成:

  • 数据段(.DATA):用于定义全局变量和初始化数据。
  • 代码段(.TEXT):包含程序的指令代码。
  • 全局符号(.GLOBL):用于声明全局可访问的标签,常用于定义入口函数 main。

MIPS伪指令

MIPS汇编语言中提供了多种伪指令,用于简化编程过程:

  • LA(Load Address):加载地址。
  • LI(Load Immediate):加载立即数。
  • MOVE:将一个寄存器的值复制到另一个寄存器。
  • MUL 和 DIV:执行乘法和除法运算。

函数调用与寄存器约定

MIPS函数调用的约定非常严格:

  • 参数传递:通过 $a0 - $a3 传递函数参数。
  • 返回值:函数返回值存储在 $v0 和 $v1 中。
  • 返回地址:使用 $ra 寄存器保存函数返回地址。
  • 栈的使用:调用函数时,需要在栈中保存临时数据和返回地址。栈指针 $sp 始终指向栈顶,函数调用前减小栈指针,函数返回后恢复栈指针。

寻址方式

常见寻址方式

MIPS指令支持多种寻址方式,用于计算操作数的有效地址:

  • 立即寻址:操作数直接包含在指令中。

  • 寄存器直接寻址:操作数存储在寄存器中,指令指定寄存器地址。

  • 寄存器间接寻址:寄存器中存储的是操作数的内存地址。

  • 基址寻址:通过基址寄存器和偏移量计算操作数的内存地址。

  • 变址寻址:类似于基址寻址,但基址寄存器的值会根据索引或步长自动调整。

MIPS的Load/Store架构

MIPS采用Load-Store架构,即内存只能通过加载(LOAD)和存储(STORE)指令访问,而其他运算指令只能操作寄存器中的数据。这种架构设计简化了硬件实现,同时提升了程序执行效率。

MIPS编程示例

简单的MIPS程序示例

以下是一个简单的MIPS程序,打印字符串并退出:

1
2
3
4
5
6
7
8
9
10
11
12
.data
str1: .asciiz "Hello, MIPS!"

.text
.globl main
main:
li $v0, 4 # 指定系统调用号4(打印字符串)
la $a0, str1 # 加载字符串地址到$a0
syscall # 系统调用

li $v0, 10 # 指定系统调用号10(退出)
syscall # 系统调用

算术运算

在MIPS中,算术运算只能在寄存器之间进行,以下是加法和减法运算的示例:

1
2
3
4
add $t0, $t1, $t2  # $t0 = $t1 + $t2
sub $t0, $t1, $t2 # $t0 = $t1 - $t2
mul $t0, $t1, $t2 # $t0 = $t1 * $t2
div $t0, $t1, $t2 # $t0 = $t1 / $t2

总结

  • MIPS架构是一种经典的RISC(精简指令集计算机)架构,因其简洁、高效而广泛应用于教学和嵌入式系统。
  • MIPS的指令集和汇编语言具备结构清晰、便于学习和掌握的特点,同时提供了足够的灵活性和高效性,适合编写性能要求较高的程序。

MIPS处理器设计

处理器设计概述

1. 处理器的功能与组成

  1. CPU的功能:控制指令执行。包括:

    • 取指令:从指令存储器中读取并分析指令。
    • 取数:从数据存储器读取操作数。
    • 执行:完成指令指定的动作(例如运算)。
  2. 指令周期:指CPU从指令存储器中读取并执行指令的整个时间,分为:

    • 取指周期:读取指令并分析指令所需的时间。
    • 取数周期:从数据存储器读取操作数的时间。
    • 执行周期:完成指令动作的时间(因指令而异)。
  3. CPU组成:

    • 控制单元(Control Unit,CU):负责生成指令执行所需的控制信号。
    • 执行单元(Datapath):完成算术逻辑运算,包含ALU和寄存器。
  4. 数据通路:指令执行时数据流经过的部件和路径,用于数据传送、处理和存储。

  5. 控制器:根据指令生成控制信号,用于控制数据通路中各部件的功能。

处理器设计的一般方法

  1. 分析指令系统需求:包括指令格式、类型、功能等。
  2. 数据通路设计:选择数据通路部件,构建各类指令的数据通路。
  3. 控制器设计:确定控制信号和逻辑实现。

MIPS模型机

MIPS模型机指令集

  1. 寄存器结构:
    • 32个32位通用寄存器(GPRs),包括HI、LO、PC寄存器。
  2. 指令格式:
    • R类型、I类型、J类型三种指令格式,分别对应算术运算、数据存取、跳转等操作。

数据通路部件

  1. ALU(算术逻辑单元):执行逻辑和算术操作,如加法、减法等。
  2. 多路选择器(MUX):选择数据传输的路径。
  3. 符号扩展器(Signext):扩展立即数至32位。
  4. 寄存器堆:支持两个32位读端口和一个32位写端口。
  5. 数据存储器(DM)和指令存储器(IM):分别用于存储数据和指令。

时钟同步方法

  1. 时钟周期:数据通路由状态元件和操作元件组成,时钟周期为状态元件存储的信息传递到下一状态元件的时间。
  2. 边沿触发:所有状态元件的数据写入发生在时钟的上跳沿时刻。

MIPS单周期处理器设计

单周期处理器概述

单周期处理器中,每一条指令都在一个时钟周期内完成,因此每条指令的CPI(每指令周期数)固定为1。为了实现这一目标,单周期处理器必须为每条指令设计一个完整的数据通路,并确保所有操作在一个时钟周期内完成。

单周期处理器的架构设计基于以下关键部分:

  • 数据通路设计:通过硬件模块(如ALU、寄存器堆、数据存储器等)处理指令。
  • 控制器设计:生成相应的控制信号,协调数据通路中各个模块的操作。

单周期数据通路设计

数据通路设计的总体思路

单周期数据通路采用哈佛体系结构,即指令存储器(Instruction Memory, IM)和数据存储器(Data Memory, DM)是独立的,分别用于存储指令和操作数据。数据通路包括以下步骤:

  • 取指令:从IM读取指令。
  • 译码:根据指令类型读取寄存器中的操作数。
  • 执行:在ALU中进行算术或逻辑运算。
  • 数据存取:对于内存操作指令,访问DM。
  • 写回:将运算结果写回寄存器堆。
关键指令的通路设计

根据MIPS指令集中的典型指令,如R型指令、LW/SW指令和分支指令,设计它们的专用数据通路。

  1. R型指令数据通路设计(如add, sub, and, or)
  • 指令格式:add rd, rs, rt,指令类型为R型。

  • 执行流程:

    • 读取寄存器rs和rt的值。
    • 在ALU中执行指定的算术或逻辑运算(例如add)。
    • 将运算结果写入目的寄存器rd。

    R型指令数据通路
    所需硬件:寄存器堆、ALU。

  • 数据流:R[rd] ← R[rs] op R[rt]

  1. LW指令数据通路设计(如lw rt, offset(rs))
  • 指令格式:lw rt, offset(rs),从内存中加载数据到寄存器。

  • 执行流程:

    • 读取寄存器rs的值,并使用立即数offset计算内存地址。
    • 访问数据存储器(DM),读取数据。
    • 将数据存储到目的寄存器rt。

    LW指令数据通路
    所需硬件:寄存器堆、ALU、符号扩展器、数据存储器。

  • 数据流:R[rt] ← M[R[rs] + SignExt(imm)]

  1. SW指令数据通路设计(如sw rt, offset(rs))
  • 指令格式:sw rt, offset(rs),将寄存器数据存入内存。

  • 执行流程:

    • 读取寄存器rs和rt的值。
    • 计算存储地址。
    • 将寄存器rt的数据存入计算出的内存地址。

    SW指令数据通路
    所需硬件:寄存器堆、ALU、符号扩展器、数据存储器。

  • 数据流:M[R[rs] + SignExt(imm)] ← R[rt]

  1. **分支指令(BEQ)**数据通路设计
  • 指令格式:beq rs, rt, offset,如果rs == rt,跳转到PC + offset。

  • 执行流程:

    • 读取寄存器rs和rt的值。
    • 在ALU中执行比较操作(rs - rt),判断是否相等。
    • 如果相等,更新PC为PC + SignExt(offset) << 2。

    BEQ指令数据通路
    所需硬件:寄存器堆、ALU、符号扩展器、移位器、加法器。

  • 数据流:if (R[rs] == R[rt]) then PC ← PC + SignExt(offset) << 2

数据通路的合并

为了实现单周期处理器,必须将所有指令的独立数据通路合并为一个统一的数据通路。关键在于:

  • 多路选择器(MUX)的使用:由于各条指令的操作路径不同,需要使用多路选择器在不同的操作路径之间切换。例如:
    • RegDst:控制写入寄存器的地址是否是rt(LW指令)或rd(R型指令)。
    • MemtoReg:控制写入寄存器的数据是来自ALU的运算结果(R型指令)还是数据存储器(LW指令)。
完整的单周期数据通路

整合R型、LW、SW和分支指令的数据通路,形成最终的单周期数据通路:

  • 通过引入多个MUX控制信号(如RegDst、ALUSrc、PCSrc),动态选择不同的数据通路。

    完整数据通路

单周期控制器设计

控制信号的生成

控制器的核心任务是生成正确的控制信号,以控制数据通路中各个模块的工作。这些控制信号包括:

  • 寄存器写入控制:RegWrite。
  • 内存读取/写入控制:MemRead、MemWrite。
  • ALU操作控制:ALUOp。
  • 分支跳转控制:Branch。
主控单元与ALU控制单元

控制器分为主控单元和ALU控制单元:

  • 主控单元:根据指令操作码生成大部分控制信号,并为ALU控制单元提供操作类型ALUOp。
  • ALU控制单元:根据主控单元提供的ALUOp和指令的功能码Func,生成ALU的操作信号(如加法、减法、逻辑与等)。
控制信号分析
  • RegDst:

    • R型指令:RegDst = 1,写入目的寄存器rd。
    • LW指令:RegDst = 0,写入寄存器rt。
  • ALUSrc:

    • R型指令:ALUSrc = 0,ALU的输入来自寄存器rt。
    • LW/SW指令:ALUSrc = 1,ALU的输入来自符号扩展的立即数。
  • MemtoReg:

    • R型指令:MemtoReg = 0,寄存器的写入数据来自ALU。
    • LW指令:MemtoReg = 1,寄存器的写入数据来自数据存储器。
  • Branch:仅对分支指令有效。如果分支条件满足(如rs == rt),Branch = 1,否则Branch = 0。

完整的控制信号表

每条指令都有一套特定的控制信号,以下为部分指令的控制信号示例:

指令类型 RegDst ALUSrc MemtoReg RegWrite MemRead MemWrite Branch ALUOp
R型指令 1 0 0 1 0 0 0 10
LW指令 0 1 1 1 1 0 0 00
SW指令 X 1 X 0
BEQ指令 X 0 X 0 0 0 1 01
ALU控制单元的设计

ALU控制单元通过ALUOp和指令的Func字段(R型指令)来生成具体的ALU操作信号。ALU执行的操作类型由指令功能码(Func)决定,如下表所示:

指令 ALUOp 功能码(Func) ALU操作类型 ALU控制信号
LW/SW 00 XXXXXXXXXX 加法 0010
BEQ 01 XXXXXXXXXX 减法 0110
ADD 10 100000 加法 0010
SUB 10 100010 减法 0110
AND 10 100100 与 0000
OR 10 100101 或 0001
SLT 10 101010 小于比较 0111

ALU控制逻辑分析

  • 当ALUOp为00时,表示是LW或SW指令,ALU执行加法操作,用于地址计算。
  • 当ALUOp为01时,表示BEQ指令,ALU执行减法操作,比较寄存器rs和rt的值。
  • 当ALUOp为10时,表示R型指令,ALU的操作类型由Func字段决定,具体实现相应的算术或逻辑操作。
主控单元和ALU控制单元结合

主控单元生成的ALUOp会根据不同指令类型传递给ALU控制单元,然后结合Func字段,ALU控制单元生成具体的ALU控制信号。整个控制信号设计形成一个完整的控制路径,如下图:

ALU控制单元

MIPS单周期处理器的性能分析

指令周期分析

由于单周期处理器的所有指令都在一个时钟周期内完成,时钟周期长度由最长指令决定。在MIPS中,LW指令是执行时间最长的指令,因此处理器的时钟周期长度由LW指令的执行时间决定。

不同指令的执行时间

假设处理器的主要硬件单元具有如下延迟:

  • 指令存储器读取(IM Access Time):200ps
  • 寄存器堆访问时间(Register File Access Time):50ps
  • ALU运算延迟:100ps
  • 数据存储器访问时间(DM Access Time):200ps

以此计算不同指令的执行时间:

  1. R型指令:

    • 取指令:200ps
    • 读寄存器:50ps
    • ALU运算:100ps
    • 写寄存器:50ps
    • 总计:400ps
  2. LW指令:

    • 取指令:200ps
    • 读寄存器:50ps
    • ALU计算地址:100ps
    • 访问数据存储器:200ps
    • 写寄存器:50ps
    • 总计:600ps
  3. SW指令:

    • 取指令:200ps
    • 读寄存器:50ps
    • ALU计算地址:100ps
    • 写数据到存储器:200ps
    • 总计:550ps
  4. BEQ指令:

    • 取指令:200ps
    • 读寄存器:50ps
    • ALU比较:100ps
    • PC更新:50ps
    • 总计:400ps
单周期处理器的缺点
  • 效率低下:由于所有指令的执行时间固定为最长的指令(LW指令)的时钟周期(600ps),即使较短指令(如R型指令)也必须在相同的时间内执行,导致时钟周期利用效率低。
  • 改进建议:采用多周期处理器设计,不同指令类型可以使用不同的时钟周期,从而优化性能。

以下是MIPS多周期处理器设计的详细内容,包含数据通路设计和控制器设计的详细解释与分析。

MIPS 多周期处理器设计

多周期处理器概述

在多周期处理器设计中,每条指令被分解为多个步骤,每个步骤在一个时钟周期内完成。因此,不同指令类型可以占用不同数量的时钟周期。这种设计的优势在于它允许更高的时钟频率和更灵活的指令执行时间,从而提高了性能和资源利用效率。

优点:

  • 更短的时钟周期:时钟周期不再由最长指令决定。
  • 指令执行时间优化:不同指令根据需要占用不同的时钟周期。
  • 硬件资源共享:功能单元(如ALU、寄存器堆等)可以在不同时钟周期内复用,减少硬件成本。

MIPS多周期数据通路设计

多周期设计的基本原理

MIPS多周期处理器的数据通路设计基于以下几个关键步骤,每个步骤在一个时钟周期内完成:

  1. 取指令:从指令存储器读取指令。
  2. 译码和读取寄存器:对指令进行译码并从寄存器堆中读取操作数。
  3. 执行运算/计算地址:在ALU中进行算术或逻辑运算,或者计算内存地址。
  4. 访问存储器:对于LW/SW指令,访问数据存储器。
  5. 写回:将运算结果或从内存读取的数据写回寄存器堆。
多周期数据通路的设计步骤
  1. 取指令阶段(Instruction Fetch, IF)
  • 操作描述:根据PC值从指令存储器中读取指令,并将PC加4以准备下一条指令。
  • 所需硬件:PC(程序计数器)、指令存储器(IM)、加法器(用于PC + 4的计算)。
  • RTL描述:
    • IR ← M[PC] (指令寄存器IR中保存指令)
    • PC ← PC + 4
  1. 译码和读寄存器阶段(Instruction Decode, ID)
  • 操作描述:对指令进行译码,并从寄存器堆中读取两个操作数rs和rt。
  • 所需硬件:指令寄存器IR、寄存器堆Register File。
  • RTL描述:
    • A ← R[IR[25:21]](A保存rs的值)
    • B ← R[IR[20:16]](B保存rt的值)
  1. 执行/地址计算阶段(Execution, EX)
  • 操作描述:
    • 对于R型指令:在ALU中进行算术或逻辑运算。
    • 对于LW/SW指令:计算内存地址。
    • 对于BEQ指令:在ALU中进行比较以决定是否分支。
  • 所需硬件:ALU、符号扩展器(SignExt,用于扩展立即数)。
  • RTL描述:
    • R型指令:ALUOut ← A op B
    • LW/SW指令:ALUOut ← A + SignExt(IR[15:0])(计算内存地址)
    • BEQ指令:ALUOut ← A - B
  1. 访问存储器阶段(Memory Access, MEM)
  • 操作描述:
    • 对于LW指令:从数据存储器读取数据。
    • 对于SW指令:将寄存器数据写入数据存储器。
  • 所需硬件:数据存储器(DM)。
  • RTL描述:
    • LW指令:MDR ← M[ALUOut](从内存中读取数据)
    • SW指令:M[ALUOut] ← B(将rt的数据存入内存)
  1. 写回阶段(Write Back, WB)
  • 操作描述:
    • 对于R型指令:将ALU的结果写入寄存器堆。
    • 对于LW指令:将从内存中读取的数据写入寄存器堆。
  • 所需硬件:寄存器堆。
  • RTL描述:
    • R型指令:R[IR[15:11]] ← ALUOut
    • LW指令:R[IR[20:16]] ← MDR
各类指令的多周期执行过程
  1. R型指令的多周期执行
  • 步骤:
    • T1:取指令 → IR ← M[PC],PC ← PC + 4
    • T2:读取寄存器 → A ← R[IR[25:21]],B ← R[IR[20:16]]
    • T3:ALU运算 → ALUOut ← A op B
    • T4:写寄存器 → R[IR[15:11]] ← ALUOut
  1. LW指令的多周期执行
  • 步骤:
    • T1:取指令 → IR ← M[PC],PC ← PC + 4
    • T2:读取寄存器 → A ← R[IR[25:21]]
    • T3:地址计算 → ALUOut ← A + SignExt(IR[15:0])
    • T4:读数据存储器 → MDR ← M[ALUOut]
    • T5:写寄存器 → R[IR[20:16]] ← MDR
  1. SW指令的多周期执行
  • 步骤:
    • T1:取指令 → IR ← M[PC],PC ← PC + 4
    • T2:读取寄存器 → A ← R[IR[25:21]],B ← R[IR[20:16]]
    • T3:地址计算 → ALUOut ← A + SignExt(IR[15:0])
    • T4:写数据存储器 → M[ALUOut] ← B
  1. BEQ指令的多周期执行
  • 步骤:
    • T1:取指令 → IR ← M[PC],PC ← PC + 4
    • T2:读取寄存器 → A ← R[IR[25:21]],B ← R[IR[20:16]]
    • T3:ALU比较 → ALUOut ← A - B
    • T4:更新PC → if (ALUOut == 0) then PC ← PC + SignExt(IR[15:0]) << 2

多周期控制器设计

控制器的两部分

多周期处理器的控制器分为两部分:

  1. 主控单元:根据当前指令的操作码(Opcode),控制指令执行的各个阶段。
  2. ALU控制单元:负责生成ALU的控制信号。
控制信号的生成

多周期控制器的任务是通过不同的状态机步骤,生成每个时钟周期所需的控制信号。关键的控制信号包括:

  • PCWrite:用于更新PC。
  • MemRead、MemWrite:控制数据存储器的读取和写入。
  • IRWrite:控制指令寄存器的写入。
  • RegWrite:控制寄存器堆的写入。
  • ALUSrcA、ALUSrcB:选择ALU输入的来源。
  • ALUOp:确定ALU的运算类型。
状态机的设计

多周期处理器的控制器通过状态机来控制每个指令执行的不同阶段。每个状态对应指令执行的一个步骤,状态机的设计如下:

  1. T1:取指令阶段,生成PCWrite和IRWrite信号。
  2. T2:译码阶段,生成ALUSrcA = 0,ALUSrcB = 1,控制ALU计算PC + 4。
  3. T3:根据指令类型生成不同的控制信号,例如:
    • R型指令:ALUSrcA = 1,ALUSrcB = 0,ALUOp = R类型。
    • LW/SW指令:ALUSrcA = 1,`ALUSrc

B = 2,ALUOp = 加法`。
4. T4-T5:存储器访问或写寄存器阶段,生成相应的控制信号。

完整的多周期控制信号表
状态 ALUSrcA ALUSrcB ALUOp MemRead MemWrite RegWrite PCWrite IRWrite
T1 0 1 加法 1 0 0 1 1
T2 1 0 加法 0 0 0 0 0
T3 1 2 加法 0 0 0 0 0
T4 X X X 1(LW) 1(SW) 1(R型) 0 0
T5 X X X 0 0 1(LW) 0 0

MIPS多周期处理器的性能分析

指令周期数

在多周期处理器中,不同类型的指令需要不同的时钟周期数:

  • R型指令:4个时钟周期
  • LW指令:5个时钟周期
  • SW指令:4个时钟周期
  • BEQ指令:3个时钟周期
时钟周期与CPI

多周期处理器的时钟周期时间取决于最慢的操作(如访问存储器),但CPI会根据指令类型的不同而变化。通过这种设计,多周期处理器可以有效地减少CPI,提高执行效率。