3 单周期MIPS处理器的设计

2022-11-30
33 分钟前

第三章 单周期MIPS处理器的设计

  1. add, sub, addi, subi, lw, sw, beq, j 每条指令在单周期处理器中的执行逻辑
  2. 上述指令的指令编码、代码、功能以及在单周期中的数据通路,条件分支指令的地址计算、单周期各功能部件的控制信号值判断
  3. 中断和异常的处理时机

3.1 一个基本MIPS的实现

MIPS指令集

要实现的MIPS的指令集

存储器访问指令

  • 取字:𝑙𝑤 𝑟𝑡 , 𝑎𝑑𝑑𝑟𝑒𝑠𝑠
  • 存字:s𝑤 𝑟𝑡 , 𝑎𝑑𝑑𝑟𝑒𝑠𝑠

算术逻辑指令:𝑎𝑑𝑑、𝑠𝑢𝑏、𝑎𝑛𝑑、𝑜𝑟、𝑠𝑙𝑡

分支指令:𝑏𝑒𝑞、𝑗

一条指令的执行步骤

  1. 取指令:根据PC寄存器的值取出要执行的指令,然后PC内容加4。
  2. 取操作数:根据指令中操作数字段,选择读取1或2寄存器、或立即数送ALU(运算器)。
  3. 分析指令:将指令中的操作码送控制器,分析指令的功能,产生相应的控制信号。
  4. 执行指令:ALU根据控制器产生的控制信号完成指令规定的操作。

分析指令

分析MIPS指令非常规整,分3类:

  1. 存储访问
    sw、lw
  2. 算术逻辑
    add、sub等:操作均为寄存器
    addi、subi等:有一个操作数为立即数
  3. 分支
    beq、j等

★MIPS指令格式

image-20221130121604725

MIPS硬件的设计

计算机5大组成部件:

  • 控制器
  • 数据通路
  • 输入
  • 输出
  • 存储器
image-20221130121257485

一个MIPS子集

image-20221130121512985

硬件的设计:

  • 从存储器中取出指令

  • 执行指令规定的操作

设计时需要考虑的因素:

  • 代价

  • 速度

  • 功耗

设计步骤

  1. 分析指令集;
  2. 数据路径的需求;
  3. 选择数据部件;
  4. 时钟建立方法;
  5. 按要求形成数据路径;
  6. 为每条指令确定控制信号;
  7. 形成产生控制信号的控制逻辑。

MIPS指令集需求

存储器

  • 取出指令
  • 读写操作数

寄存器(32位)

  • 读数据(根据指令中的rs或rd)
  • 写数据(根据指令中的rd或rt)

PC

符号扩展部件

ALU

加4运算器

数据路径部件

组合逻辑部件

  • 加法器
  • ALU
  • 多路选择器
  • 符号扩展器

存储部件

  • 寄存器
  • 寄存器堆
  • 存储器

3.2 逻辑设计惯例

时钟方法(Clocking Methodology)

什么时候可以从存储单元中读数据

什么时候可以将数据写入存储单元

典型时钟方法

  • 电平触发(高电平触发、低电平触发)
    image-20221130121902108
  • 边沿触发(上升沿、下降沿)
    image-20221130121908940

操作时序

image-20221130121850335

时序的安排对硬件逻辑设计非常重要

image-20221130121935925

数据通路中的组合部件

32位运算器—ALU

image-20221130135152035

32位2选1选择器—MUX

image-20221130135201171

16-32符号扩展器—EXTND

image-20221130135214106

数据通路中的存储部件—寄存器堆(Register file)

image-20221130135226153

2个输出(组合逻辑)

  • A输出由Ra给出地址
  • B输出由Rb给出地址

1个写端口(时序逻辑)

  • 写使能Wn=1时,当时钟边沿到来时,将Data端口送来的数据写入Rw指定的寄存器。

3.3 建立数据通路★

一条指令执行的过程

  1. 从存储器中取指令
  2. 分析指令
  3. 执行指令
  4. 写结果,形成下一条指令的地址

3.3.1 数据通路

取指令(Instruction Fetch)

数据通路:

  1. 从PC寄存器中读出地址 PC
  2. 在指令存储器中读出指令 MEM[PC]
  3. PC指向下一条指令:PC = PC + 4

image-20221130141022770

R型指令

汇编指令:𝑎𝑑𝑑 𝑟𝑑 , 𝑟𝑠 , 𝑟𝑡

功能:𝑅[𝑟𝑑]←𝑅[𝑟𝑠]+𝑅[𝑟𝑡](把 rs 寄存器的数据 R[rs] 和 rt 寄存器的数据 R[rt] 相加,存入 rd 寄存器)

数据通路:

image-20221130141135276

数据传输指令:Load指令(I型指令)

汇编指令:𝑙𝑤 𝑟𝑡 ,𝑜𝑓𝑓𝑠𝑒𝑡(𝑟𝑠)

功能:𝑅[𝑟𝑡]←𝑀[𝑅[𝑟𝑠]+𝑜𝑓𝑓𝑠𝑒𝑡]

数据通路:

image-20221130141258029

数据传输指令:Store指令(I型指令)

汇编指令:𝑠𝑤 𝑟𝑡 ,𝑜𝑓𝑓𝑠𝑒𝑡(𝑟𝑠)

功能:𝑀[𝑅[𝑟𝑠]+𝑜𝑓𝑓𝑠𝑒𝑡]←𝑅[𝑟𝑡]

数据通路:

image-20221130141439172

分支指令(I型指令)

分支指令:beq、bne

汇编指令:𝑏𝑒𝑞 𝑟𝑠 ,𝑟𝑡 ,𝑜𝑓𝑓𝑠𝑒𝑡

功能:𝑖𝑓 𝑅[𝑟𝑠]==𝑅[𝑟𝑡] 𝑡ℎ𝑒𝑛 𝑃𝐶=𝑃𝐶+4+𝑠𝑖𝑔𝑛_𝑒𝑥𝑡𝑒𝑛𝑑(𝑜𝑓𝑓𝑠𝑒𝑡)≪2

数据通路:

image-20221130141548053

3.3.2 数据路径合并

目标:把各种功能的数据路径合并

  • 取指令
  • R型指令
  • Load/Store指令
  • 分支指令

基本方法:使用多路选择器。

image-20221130141655211

ALUSrc:选择ALU(下方)的输入

  • R型指令:寄存器堆的B输出
  • Load/Store型指令:符号扩展输出(立即数)

M2Reg:选择寄存器堆Data的输入

  • R型指令:ALU的输出
  • Load指令:存储器的输出
  • Store指令:不需要(因为不需要写回寄存器堆)

RegDst:选择寄存器堆Rw的输入

  • R型指令:指令的rd字段
  • Load指令:指令的rt字段
  • Store指令:不需要(因为不需要写回寄存器堆)

image-20221130143321008

R型指令与Load/Store指令在ALU控制码上的区别

image-20221130143601304

If Op = 000000 then
	Operation = (接着分析func)
Else if Op = 100011 then
	Operation = Load
Else
	Operation = Store
End if 

R型指令与Load/Store指令合并结果

image-20221130143717690

3.3.3 单周期执行

数据路径

image-20221130142058504

RegDst(寄存器B) ALUSrc M2reg(写回寄存器堆的值) PCSrc Memory We 存储器写使能 Memory Re 存储器读使能 RegWR 寄存器堆写使能
执行R型指令 右(rd) 上(寄存器B值) 下(ALU输出) 上(不跳转) 0 0 1
执行Load(lw)指令 左(rt) 下(符号扩展后的立即数) 上(读存储器内容) 上(不跳转) 1 0 1
执行Store(sw)指令 任意(值同Load,但是用不上) 下(符号扩展后的立即数) 任意(值同Load,但是用不上) 上(不跳转) 0 1 0
执行分支指令 任意 上(寄存器B值) 任意 上(跳转条件不成立)
下(跳转条件成立)
0 0 0

执行指令:𝑎𝑑𝑑 𝑟𝑑 , 𝑟𝑠 , 𝑟𝑡

image-20221130144700118

执行指令:lw rt, offset(rs)

image-20221130152917927

执行指令:𝑏𝑒𝑞 𝑟1 , 𝑟2 , 𝑜𝑓𝑓𝑠𝑒𝑡(𝑟1=𝑟2)

image-20221130144721811

执行指令:𝑏𝑒𝑞 𝑟1 , 𝑟2 , 𝑜𝑓𝑓𝑠𝑒𝑡(𝑟1≠𝑟2)

image-20221130144736448

需要产生的控制信号

读写信号

  • Regwrite:寄存器堆写信号
  • MemRead:存储器读信号
  • MemWrite:存储器写信号

选择信号

  • RegDst:目的寄存器选择信号
  • M2reg:存储器内容输出到寄存器堆
  • ALUSrc:ALU源操作数选择
  • PCSrc:PC源的选择

操作码

  • Operation:ALU操作码
控制信号的真值表
  • 确定每条指令的控制信号
    • 0
    • 1
    • X(与该指令无关)
  • 构建控制信号的真值表

控制器单元结构

image-20221130144925103

ALU的功能

ALUOp:

  • R型:10
  • 数据传输指令:00(加)
  • 分支指令:01(减)

image-20221201010915082

3.3.4 时钟周期的长度

最长的延迟决定了时钟周期的长度

关键路径:load指令
Instruction memory → register file → ALU → data memory → register file

(为什么不加寄存器堆读取PC的延迟??)

如果还要包括浮点或更复杂指令的指令集,单周期无法胜任

违背了设计原则:加快最常见情况的速度

可通过流水线技术改进性能

延迟时间计算??

不同单元有不同的延迟时间,对一条指令而言,关键路径上各单元的延迟时间决定了该指令的最小延迟。假设各单元的延迟时间如下表所示:

指令存储器 加 多选器 ALU 寄存器堆 数据存储器 控制
a 400ps 100ps 30ps 120ps 200ps 350ps 100ps

对MIPS的AND指令、LD指令、BEQ指令的关键路径分别是什么?

如果仅需支持ALU指令(add,and等),处理器的时钟周期是多少?

如果仅需支持lw指令,时钟周期多少?

PC(寄存器堆,读取) 指令存储器Memory 寄存器堆(读取) 多选器RegDst 多选器ALUSrc(凡是用立即数的指令都不需要加选择器的延迟) ALU 多选器M2Reg 控制(只有跳转指令需要) 多选器PCSrc 数据存储器 Memory(只有访存指令需要) 寄存器堆(写回) 合计
200 400 200 / 30 120 30 100 / 350 200
AND √ √ √ √ √ √ √ 1180ps
LD √ √ √ √ √ √ √ 1500ps
BEQ √ √ √ √ √ √ √ √ 1280ps

image-20230227231705717

因为各个老师各个PPT说的不一样,所以无法很好地总结,暂且记为:

  • 立即数指令算1个多选器,其他指令算2个多选器的时间

    • 立即数+ALUSrc到ALU的延迟 比 寄存器堆到ALU的延迟小,所以ALUSrc不是关键路径,不用算
  • 只有分支指令算控制的时间

  • 只有访存指令算数据存储器的时间

  • 写回寄存器堆都要算(可能是因为都要修改PC)???

    • 但是有的题和答案没有算beq这种不需要写回的指令的写回寄存器堆延迟??
  • 读PC和写PC要不要算???

    • 要算的话是不是一开始要加上一个寄存器堆的延迟
    • 不算的话beq这种不需要写回的指令的写回寄存器堆延迟就不要加上了
  • 多选器RegDst不用算,因为要写回才需要,多选器不会造成延迟等待,不是关键路径

  • 分支指令上面一整条(包括2个加法器、多选器PCSrc等)的时间都没有下面这条路径长,不是关键路径

例题

假设指令存储器延迟是300ps,加法器延迟是80ps,ALU延迟是100ps,寄存器堆延迟200ps,数据存储器延迟300ps,忽略多路选择器、符号扩展器等模块的延迟。试计算“LW R2,20(R1)” 指令的关键路径延迟是多少?(1分)

答案:200 + 300 + 200 + 100 + 300 =1100ps(1分)

指令存储器 300 + 寄存器堆 200 + ALU 100 + 数据存储器 300 + 寄存器堆 200

(为什么不加寄存器堆读取PC的延迟??)


image-20230227224513901

(为什么不加寄存器堆读取PC的延迟??)

(为什么LW算了两个多选器??)


image-20230227224532891

(为什么不加寄存器堆读取PC的延迟??)


image-20230227224547004

(为什么不加寄存器堆读取PC的延迟??)

(为什么不加写回寄存器堆的延迟??)

3.4 中断机制

3.4.1 中断基本概念

中断:在运行过程中,如果发生某种随机事态,CPU暂停执行现行程序,转去执行为某个随机事态服务的中断处理程序,处理完毕后再自动恢复原程序的执行。

中断的实质:程序切换

方法:保存断点,保护现场;恢复现场,返回断点。

时间:一条指令结束时切换。保证程序的完整性。

中断的特点:随机性

  • 随机发生的事态(按键、故障)
  • 有意调用,随机请求与处理的事态(调用打印机)
  • 随机插入的事态(软中断指令插入程序任何位置)

中断与转子的区别

两者有本质上的区别:

  • 子程序的执行由程序员事先安排,而中断服务程序的执行则是由随机中断事件触发。
  • 子程序的执行受主程序或上层程序控制,而中断服务程序一般与被中断的现行程序无关。
  • 一般不存在同时调用多个子程序的情况,但可能发生多个外设同时向CPU发出中断服务请求的情况。

中断与异常的区别

区别一:

  • 中断:系统停止当前正在运行的程序而转向其他服务,可能是因为优先级高的请求服务了,或者是因为人为安排中断。中断是属于正常现象。
  • 异常:是由于软件错误而引起的。

区别二:

  • 中断是CPU所具备的功能——硬件
  • 异常是软件运行过程中的一种开发过程中没有考虑到的程序错误——软件

中断的典型应用

(1)管理中、低速I/O操作,实现主-外并行工作

(2)以软中断方式来处理系统调用,如磁盘存取

(3)故障处理

(4)实时处理,Real-Time Processing:对各事件以足够快的速度进行处理,并在允许的时间尺度内作出反应。

(5)人机对话

(6)多机通信

中断系统的软硬件组织

(1)软件:中断服务程序、中断向量表

image-20221130135927968

(2)硬件

  • 接口方面:请求、屏蔽、传递、判优等逻辑
  • CPU方面:对中断请求的响应逻辑

3.4.2 中断优先级的判断

(1)响应条件

  • 有未被屏蔽中断请求到达;
  • CPU处于开中断模式;
  • 中断源优先级比当前程序的优先级更高。

(2)硬件判优

[例] 通过中断控制器判优

中断控制器 (如8259) 集中解决请求信号的接收、屏蔽、判优、编码等问题。

中断请求→8259(对未屏蔽的请求判优,生成相应中断号)→硬件产生向量地址→转入相应服务程序执行

单周期处理机

单周期处理机是在一条指令执行的过程中检测异常事件,当异常事件发生时处理机在该指令结束时转向异常事件处理程序,处理完毕后再返回到用户程序。

image-20221130140123480

当发生异常时:

  1. 处理机保存当前处理机状态,如当前PC值,处理机状态寄存器的内容,等等。
  2. 由硬件向PC写入异常事件处理程序的入口地址,以实现程序的转移。

文章目录

版权

本文遵循署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0) 标准。

部分内容源自互联网、书本和课堂,仅供交流学习,未用于任何商业用途。如果它们侵犯了您的权益,请与我们联系,我们将立即删除它们。

版权所有 © 2020-2026 Kloudy 保留所有权利.