Chapter4-2 多周期数据通路

Posted by LvKouKou on November 6, 2022

4-2 多周期数据通路

单周期数据通路的时钟周期取决于最长的一条指令(lw)

image-20221106101504713

多周期处理器的实现思想

image-20221106101556823

==多周期数据通路只有一个ALU==

image-20221106101714270

必须在每个主要功能单元之后添加寄存器以保存输出值, 在随后的时钟周期中使⽤它 IR指令寄存器和PC寄存器都要写使能,其他的不用

image-20221106101756328

指令各阶段分析

  1. Instruction Fetch
  2. Instruction Decode and Register Fetch
  3. Execution, Memory Address Computation, or Branch Completion
  4. Memory Access or R-type instruction completion
  5. Write-Back Step

第一个周期(取值周期)(算PC+4)

1.取指令阶段 • 执⾏⼀次存储器读操作 • 读出的内容(指令) 保存到寄存器IR(指令寄存器) 中 • IR的内容不是每个时钟都更新, 所以IR必须加⼀个“写使能”控制 • 在取指令阶段结束时, ALU的输出为PC+4, 并送到PC的输⼊端, 但不能在每个时钟到来时就更新PC, 所以PC也要有“写使能”控制

第二个周期(译码取数周期)(算分支地址,PC=PC+4+4*offset,offset是相对于PC+4而言的)

2.译码/读寄存器堆阶段 • 经过控制逻辑延迟后, 控制信号更新为新值 • 执⾏⼀次寄存器读操作, 并同时进⾏译码 • 期间ALU空闲, 可以考虑“投机计算”分支地址

第三、 四、 五个周期(各指令不同)

3.ALU运算阶段 • ALU运算, 输出结果⼀定要在下个时钟到达之前稳定(如lw指令,则要算imm(rs)的imm+rs) • 如果是分⽀branch指令, 该阶段需决定是否将分⽀地址写⼊PC 4.读存储器阶段 • 由ALU运算结果作为地址访问存储器, 读出数据 5.写结果到寄存器 • 把之前的运算结果或读存储器结果写到寄存器堆中

Multicycle Implementation Overview

  • 每条指令每⼀步⽤⼀个时钟周期,因此每条指令花费多个时钟周期

  • 不是每条指令都花费同样的时钟周期数

  • 多周期CPU

    • 更快的时钟频率
    • 不同的指令⽤不同的周期数
    • 单个ALU⽤于所有计算
    • 单个存储器⽤于指令和数据的存储(冯诺依曼结构,指令和数据在同一内存中)
    • 需要增加寄存器暂存数据⽤于跨时钟周期

Our Multicycle Approach

  • 状态器件的读写: 寄存器堆或PC每个时钟开始后进⾏读操作, 时钟结束进行写操作
  • 寄存器堆读花差不多~50% 的时钟周期时间, 控制器与其并⾏进⾏。
  • 在功能部件前⾯增加选择器, 因为不同的时钟周期共享同⼀个ALU部件。
  • 所有的操作在⼀个时钟周期内并⾏进⾏。(每个阶段要在同一周期内完成)
    • 与单周期不同的是PC+4, 条件跳转地址计算都在一个ALU上进⾏,指令存储器和数据存储器使⽤同⼀个存储器, 每个时钟周期都进⾏寄存器堆的读操作。

The Complete Multicycle Data with Control

image-20221106103831576

RTL Summary

前两阶段是所有指令都要做的

image-20221106104032206

Step 1:Instruction Fetch (计算PC+4)

image-20221106111003149

何时更新PC

image-20221106111021148

Datapath Activity During Instruction Fetch

image-20221106111356249

Step 2: Instruction Decode and Register Fetch (计算分支地址)

  • 指令未译码, 故只执⾏公共操作, ALU空闲, 可⽤ALU“投机计算”转移地址

  • ALUOut = PC+(sign-extend(IR[15-0])« 2);

  • 读出寄存器堆的两个寄存器内容 The RTL: •A = Reg[IR[25-21]]; •B = Reg[IR[20-16]];

    请注意, 我们没有根据指令设置任何控制线(因为控制逻辑正忙于“译码”操作码位) , 还不知道它是什么)

Datapath Activity During Instruction Decode

image-20221106111708165

注意这里有个易错点

image-20221106111726368

Step 3 Instruction Dependent Operations

  • ALU is performing one of four functions, based on instruction type
  • Memory reference (lwand sw): ALUOut = A + sign-extend(IR[15-0]);
  • R-type: ALUOut = A op B;
  • Branch: if (A==B) PC = ALUOut;
  • Jump: PC = PC[31-28] || (IR[25-0] « 2);
  • 如果指令译码输出为: Beq 下⾯第三个周期就是Beq指令 的第⼀个执⾏周期!

beq

image-20221106112032394

lw & sw

image-20221106112115056

R-type

image-20221106112313537

J型指令

image-20221106112333493

Step 4 (also instruction dependent)

  • LW指令, 从内存读出的数据存⼊内存数据寄存器MDR, sw指令把端⼝B读出的内容写⼊内存:
MDR = Memory[ALUOut]; – lw
Or  
Memory[ALUOut] = B; – sw
  • R-type 计算结果写⼊⽬标寄存器 Reg[IR[15-11]] = ALUOut;
  • 请记住, 寄存器写⼊实际上发⽣在时钟周期结束时的边沿

R-type

image-20221106112527173

lw

image-20221106112540525

sw

image-20221106112606506

Memory Access Control Signals Settings

image-20221106112637044

Step 5: Memory Read Completion (Write Back)

lw

image-20221106113026873

image-20221106113118336

控制信号

多周期控制器的实现

image-20221106113228438

Multicycle Datapath Finite State Machine

image-20221106113317741

Finite State Machine Implementation

image-20221106113331622

Datapath Control Outputs Truth Table

image-20221106113417124

Next State Truth Table

image-20221106113434687

实现技术: PLA(Programmed Logic Arrays)

image-20221106113506237

⽤PLA电路实现的组合逻辑控制单元(硬布线⽅式)

image-20221106113526161

image-20221106113537258

硬连线路设计和微程序设计

  • 硬连线路设计的特点: 优点: 速度快, 适合于简单或规整的指令系统, 例如, MIPS指令集。 缺点: 它是⼀个多输⼊/多输出的巨⼤逻辑⽹络。 对于复杂指令系统来说, 结构庞杂, 实现困难; 修改、 维护不易; 灵活性差。 甚⾄⽆法⽤有限状态机描述!

  • 简化控制器设计的⼀个⽅法: 微程序设计

  • 微程序控制器的基本思想: • 仿照程序设计的⽅法, 编制每个指令对应的微程序
  • 微程序设计的特点: 具有规整性、 可维性和灵活性, 但速度慢

微程序设计

  • 控制是处理器设计的⼀个难点, 早期计算机设计⼈员⾯临的最⼤挑战是正确地控制电路
  • 数据通路具有较好的规整性和很好的组织
  • 存储器具有很⾼的规整性
  • 控制不规整, 并且涉及全局
  • 微程序设计:⼀种特殊的实现处理器控制部件的策略, 它在寄存器传输操作的级别进⾏“编程”
  • 微体系结构(Microarchitecture) :微程序编程⼈员所看到的硬件的逻辑结构和功能特性

控制存储器(Control Memory)

image-20221106113849158


image-20221106113907970

微程序设计思想

image-20221106113948357

微程序控制器的基本结构

image-20221106114303707

Microcode Implementation

image-20221106114339414

微程序\微指令\微命令\微操作的关系

image-20221106114419270

image-20221106114439102

微指令地址选择逻辑

image-20221106114527230

image-20221106114549605

微指令的格式

image-20221106115801747

微程序控制器设计的⼀般步骤 (了解)

  • 根据指令系统, 列出微操作序列
  • 微指令编码
  • 控制微程序流
  • 确定指令格式
  • 微程序写⼊控制存储器

写⼊存储器示意图

image-20221106120120987

意外和中断(Exceptions and Interrupts)

image-20221106120143410

异常和中断的处理

image-20221106120203131

image-20221106120222945

处理器中的异常处理机制

image-20221106120246888

image-20221106120258392

举例-8086/8088中断系统(采⽤向量中断⽅式)

image-20221106120820711

8086/8088的中断向量表

image-20221106120849566

MIPS带异常处理的数据通路设计

image-20221106120906551

Interrupt Modified Multicycle Datapath

image-20221106121256020

带异常处理的控制器设计

image-20221106121316827

Interrupt Modified FSM

image-20221106121610143

Trap Modified Multicycle Datapath

image-20221106121911288

How Control Detects Two Traps

  • 未定义指令(RI) – 状态1检测到下⼀个状态没有定义,既没有相应的操作码 • 所有未定义指令的下⼀个状态为新状态 10
  • 算数运算溢出(Ov) – ALU溢出信号在状态6出现 (即不再有结果写⼊寄存器操作)
  • 需要修正状态图 • 挑战在于处理指令和引发异常的事件之间的交互, 以使控制逻辑保持⼩⽽快 • 复杂的交互使控制单元成为硬件设计中最具挑战性的事情, 尤其是在流⽔线处理器中

Trap Modified FSM

image-20221106123556239

例子:多周期和单周期性能分析

多周期性能分析

  • 与单周期CPU对⽐, 分成了多个阶段 + 时钟周期减少 – High CPI每个指令所需周期数增加了
  • CPI 取决于指令 • Branches / Jumps: 3 cycles • ALU: 4 cycles • Stores: 4 cycles • Loads: 5 cycles •CPI 算平均CPI, 取决于权重
  • ⽐如: • 20% loads, 15% stores, 20% branches, 45% ALU CPI= 0.20 * 5 + 0.15 * 4 + 0.20 * 3 + 0.45 * 4 = 4.0

image-20221106123637704

单周期

image-20221106123701056

单周期CPU性能分析举例

image-20221106123731237

Example: ⼀个程序有 100 billion 条指令, 在单周期CPU上执⾏:

Execution Time = number of instructions x CPI x Tc = (100 × 10^9)(1)(925 × 10^-12 s)= 92.5 seconds

多周期

image-20221106123859355

image-20221106123951356

image-20221106124048068

image-20221106124104129