# 中央处理器概述

# 中央处理器的功能

CPUCPU 的主要功能是执行程序

运算器

  • 数据加工:对数据进行算数、逻辑运算,或将数据在相关部件种传送

控制器

  • 程序控制:CPUCPU 必须能够正确地确定 下条指令地地址
  • 操作控制:将机器指令翻译成执行部件所需地操作控制信号
  • 时序控制:控制操作信号的产生信号、持续信号
  • 异常控制:异常处理,外设交互

# CPU 基本组成

# CPU 中的主要寄存器

# 程序计数器 PC

PCPC 位宽与主存地址总线位宽相同

  • CPUCPU 取指令时,利用 PCPC 的内容作为地址访问主存,并修改 PCPC 值形成下一条指令地址

在一条无条件跳转指令的执行周期内,PC 的值被修改了几次?

两次:

  • PCPC 自增 11
  • PCPC 被跳转地址显式覆盖

# 存储器地址寄存器 AR

  • ARAR 常用来保存 CPUCPU 访问主存的单元地址
  • 无论 CPUCPU 是取指令还是存数据都必须先将要访问的地址送入 ARAR,直到读写操作完成
  • ARAR 位宽和主存地址总线位宽相同
  • ARAR 并不是必须的,部分计算机中可直接将访存地址加载在地址总线上实现访存

# 存储器数据寄存器 DR

  • 存放从主存中读出的数据或准备写入主存的数据
  • 数据位宽与存储字长相同

# 指令寄存器 IR

  • 位宽与指令字相同

# 通用寄存器组 GR

  • 在 Intel X86 中这些寄存器为 EAX、EBX……EDX;在 MIPS 32 中这些寄存器为 $0 ~ $31
  • 这些寄存器对程序员可见

# 程序状态字寄存器 PSW/PSR

  • 用户可见寄存器

# 习题

习题 1

习题 2

PCPC 位数为 3030

  • 主存储器空间为 4GB=232B4GB=2^{32}B

  • 因为指令按边界对齐存放,所以是按寻址

    • 每一个字要有单独的地址,4B=14B=1

    • 可寻址字数为

      232/4=2302^{32}/4=2^{30}

所以位数为 3030

IRIR 位数为 3232

  • 因为指令字长为 3232

# 控制器

指挥计算机各部件按指令要求进行操作的部件

  • 控制取出、解释和执行指令
  • 指挥并控制 CPUCPU,内存和 I/OI/O 设备之间的数据传送
  • 中断控制–对异常情况和外部请求的处理

基本组成:PC、IR、ID、OC、TG

# 指令译码器 ID

  • 对指令进行分段译码(分成操作码和地址码),指出指令的操作方式、寻址方式
  • 为操作控制器提供输入信号

# 操作控制器 OC

根据指令操作码和地址码、时序信号,产生各种控制信号序列,建立正确的数据通路,从而完成取指令和执行指令的控制

数据通路:执行部件间(寄存器)传送信息的通路

  • 指令执行过程中,数据所经过的路径,包括路径中部件
  • 时序逻辑型–硬布线控制器
    • 又称组合逻辑控制器,直接由各种类型的逻辑门电路和触发器等构成
    • 速度快,但是时序控制信号形成部件的结构不规整,设计、调试、维修困难,难以实现设计自动化
  • 存储程序型–微程序控制器
    • 采用存储逻辑实现,把微操作信号代码话
    • 易于实现自动化

# 时序产生器 TG

  • 产生各种时序信号
  • 对各种操作实施时间上的控制

# 运算器

  • 即执行部件,数据加工处理部件,执行所有的算术运算和逻辑运算
  • ALUALU
  • 通用寄存器
  • 暂存器
  • 状态条件寄存器 PSWPSW
  • 运算器接受控制器的命令而进行动作

# 指令周期

# 指令执行的一般流程

# 指令周期的基本概念

CPUCPU 将一条指令从主存取出到执行完成所需要的时间称为指令周期

# 一个完整的指令周期

  1. 取值周期

    取指周期中,CPUCPUPCPC 的内容为地址,从主存取出指令,并计算后续指令的地址

    对于变长指令,需要经过指令译码得到指令实际字节长度后才能计算并修改 PCPC 的值

  2. 译码 / 取操作数周期

    译码 / 取操作数周期中,对指令寄存器中的指令字进行指令译码,识别指令类型

    根据指令地址码生成操作数有效地址,然后访问相应的寄存器或主存单元

  3. 执行周期

    控制器向运算器 ALUALU 及数据通路中的其他相关部件发送操作控制命令,对已取出的操作数进行加工处理,并将处理的状态信息记录到程序状态寄存器 PSWPSW

    当程序出现分支时,在执行周期内还要计算分支的目标地址

  4. 写回周期

    将运算结果写回到目的寄存器或存储器中

  5. 中断周期

    当指令执行完毕后如果出现异常或外部中断请求,CPUCPU 将进入中断响应周期

    利用硬件逻辑保存断点,将中断处理程序入口地址送入 PCPC,实现当前程序与中断处理程序的切换

  6. 总线周期

    用于完成总线操作及总线控制权的转移

  7. I/OI/O 周期用于完成输入输出操作

# 指令周期的划分

将指令周期划分成若干个机器周期(又称为 CPUCPU 周期)

机器周期:从主存取出一个存储字所需的最短时间定义为机器周期。而每个机器周期又可包含若干个时钟周期

定长指令周期

  • 所有指令的指令周期相同
  • 机器周期数固定
  • 机器周期所包含的节拍数固定

变长指令周期

  • 不同指令的机器周期数可变,按时钟周期同步
  • 一条指令的执行需要多少个时钟周期就安排多少个时钟周期

# 寄存器传送语言

每条指令的执行过程都可以分解为一组操作序列,进而可分解为一组微操作序列

  • “操作” 是指功能部件级动作
  • “微操作” 是指令序列中最基本的、不可再分割的动作

寄存器传送语言 RTL 描述规则如下:

  1. M[addr] 表示主存 addr 单元或内容
    • 作为源操作数使用时表示内容
    • 作为目的操作数使用时表示内存单元
  2. R[i] 表示通用寄存器组中第 ii 号寄存器或其内容
    • 作为源操作数使用时表示寄存器内容
    • 作为目的操作数使用时表示寄存器
  3. B ← AA → B 表示数据传送,其中 AA 为源操作数, BB 为目的操作数
  4. Xy:zX_{y:z} 表示寄存器 XX 的第 yy 位到第 zz 位的数据字段
  5. Signext(X) 表示将 XX 符号扩展到 3232
  6. {X, Y} 表示将 XXYY 的比特位连接在一起

# 数据通路及指令操作流程

数据在各功能部件之间传送的路径称为数据通路

不同功能的指令及同一指令在不同指令周期中均可能使用不同的数据通路

数据通路可用总线或专用通路两种方法来构建

# 数据通路模型与定时

# D 触发器定时模型

# 数据通路与时钟周期

# 数据通路的保持时间违例

当时钟周期到来时,AABB 同时锁存,为了确保寄存器 BB 的正确锁存,前一个寄存器的寄存器时延加上最短路径延迟需要大于 BBHoldHold 时间

# 数据通路的分类

对于 ADD R0, R1(R0) + (R1) -> R0

# 单总线结构的数据通路

# 双总线结构的数据通路

# 三总线结构的数据通路

# 数据通路实例

# 单总线结构 CPU

CPUCPU 中的运算器、控制器、寄存器堆等核心部件均由一条内部的公共总线连接起来,这条内部的公共总线称为 CPUCPU 内总线

连接 CPUCPU、内存及输入输出设备等部件构成计算机系统的总线称为系统总线外总线

lwlw 指令的执行流程

功能:从主存读取一个 3232 位的存储器字

汇编代码lw rt, imm(rs)

RTL 功能说明R[rt] <- M[R[rs] + SignExt(imm)]

M[AR] -> DR 的操作可以放在 T2T_2 也可以放在 T3T_3

3 个周期用了不同的数据通路

  1. 取指周期 Mif{M_{if}}

    PC -> AR -> MEM -> DR -> IR

    PC -> X -> ALU -> Z -> PC

  2. 计算周期 Mcal{M_{cal}}

    R[rs] -> X -> ALU

    IR(I) -> ALU -> Z

  3. 执行周期 Mex{M_{ex}}

    Z -> AR -> MEM -> DR -> R[rt]

swsw 指令的执行流程

功能:在主存中写入一个 3232 位的存储器字

汇编代码sw rt, imm(rs)

RTL 功能说明M[R[rs] + SignExt(imm)] <- R[rt]

前两个周期使用的数据通路和 lwlw 相同

第三个机器周期使用的数据通路:

Z -> AR

R[rt] -> DR -> MEM

beqbeq 指令的执行流程

功能:条件分支指令,如果 rsrsrtrt 的值相等就跳转

汇编代码beq rs, rt, imm

RTL 功能说明if(R[rs] == R[rt]) PC <- PC + 4 + SignExt(imm) << 2

3 个机器周期使用的数据通路如下:

  1. 取指周期 MifM_{if} 使用的数据通路与 lwlw 指令的数据通路相同

  2. 计算周期 McalM_{cal} 使用的数据通路如下:

    R[rs] -> X -> ALU

    R[rt] -> ALU -> PSW

  3. 执行周期 MexM_{ex} 使用的数据通路如下:

    PC -> X ->ALU

    IR(A) -> ALU -> Z

addiaddi 指令的执行流程

功能:立即数加指令,将 rsrs 寄存器和立即数相加的结果送入 rtrt 寄存器

汇编代码addi rt, rs, imm

RTL 功能说明R[rt] <- R[rs] + SignExt(imm)

执行周期 MexM_{ex} 使用的数据通路:

R[rs] -> X

IR(I) -> ALU -> Z -> R[rt]

addadd 指令的执行流程

功能:将 rsrs 寄存器与 rtrt 寄存器相加的结果送入 rdrd 寄存器

汇编代码add rd, rs, rt

RTL 功能说明R[rd] <- R[rs] + R[rt]

执行周期 MexM_{ex} 使用的数据通路:

R[rs] -> X -> ALU

R[rt] -> ALU -> Z -> R[rd]

# 指令数据通路

# 单总线结构性能分析

单总线结构中最慢的数据通路为访存通路 M[AR] -> DR 和 运算通路 ALU -> Z

单总线结构计算机的最小时钟周期应为

Tmin_clk=Tclk_to_q+max(Talu,Tmem)+TsetupT_{min\_clk}=T_{clk\_to\_q}+max(T_{alu},T_{mem})+T_{setup}

# 多总线结构数据通路

# 单周期 MIPS CPU 数据通路

所有指令在一个时钟周期内完成的 MIPSMIPS 处理器

取指令的数据通路

RR 型运算类指令数据通路

lwlw 指令数据通路

swsw 指令数据通路

数据通路综合

单周期 MIPSMIPS 数据通路

# 处理性能分析

单周期 MIPS 处理器的最小时钟周期 Tmin_clkT_{min\_clk}

Tmin_clk=Tclk_to_q+Tmem+max(TRF_read,Text+Tmux)+Talu+Tmem+Tmux+Tsetup=Tclk_to_q+2Tmem+TRF_read+Talu+Tmux+TsetupT_{min\_clk}=T_{clk\_to\_q} + T_{mem}+max(T_{RF\_read},T_{ext}+T_{mux})+T_{alu}+T_{mem}+T_{mux}+T_{setup}\\ =T_{clk\_to\_q} + 2T_{mem}+T_{RF\_read}+T_{alu}+T_{mux}+T_{setup}

# 多周期 MIPS CPU 数据通路

  1. 不再区分指令存储器和数据存储器,分时使用部分功能部件
  2. 主要功能单元输出端增加寄存器锁存数据
  3. 传输通路延迟变小,时钟周期变短

# 硬布线控制器

# 基本架构

# 固定指令周期硬布线控制器设计过程

# 变长指令周期硬布线控制器设计过程

# 对比

# 微程序控制器

  1. 微程序是利用软件方法来设计硬件的技术
  2. 将完成指令所需的控制信号按照格式编写成微指令,存放到控制存储器
  3. 存储技术和程序设计相结合,回避复杂的同步时序逻辑设计

# 基本概念

微命令:控制部件向执行部件发出的各种控制命令叫作微命令

微操作:执行部件接受微命令后进行的操作

  • 互斥的微操作:不能同时或不能在同一节拍内并行执行的微操作
  • 相容的微操作:能够同时或在同一节拍内并行执行的微操作

微指令:在机器的一个 CPUCPU 周期中,一组实现一定操作功能的微命令的组合

微程序:一系列微指令的有序集合、

  • 一段微程序对应一条机器指令

微地址:存放微指令的控制存储器的单元地址

# 微程序控制器组成原理

# 微程序设计

# 微指令格式

# 设计原则

  1. 有利于缩短微指令字长度
  2. 有利于减少控制存储器容量
  3. 有利于提高微程序执行速度
  4. 有利于对微指令进行修改
  5. 有利于提高微程序设计的灵活性

# 直接表示法

# 编码表示法

  1. 把互斥性的微命令分在同一段内,兼容性的微命令分在不同段内
  2. 每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间
  3. 一般每个小段还要流出一个状态目标是本字段不发出任何微命令。因此当某字段的长度为三位时,最多只能表示七个互斥的微命令,通常用 000 表示不操作

# 混合表示法

# 微指令地址形成方法

# 水平型微指令编码效率

# 垂直型微指令编码效率

# 习题

  1. 采用直接表示法的微指令:9 个

    A/B 组:231=72^3-1=7

    C 组:2414=112^4-1-4=11

    共:1212

  2. 9+1+1+1=129+1+1+1=12

  3. 微指令中的下址字段的位数决定了控制存储器的可寻址范围,这里应该是 25=322^5=32 个地址单元

    微指令字的位宽决定了控制器的位宽

    所以存储控制器最多有 32322424 位存储单元

B. 二者都是按地址访问

按内容访问的是 TLB 和 cache

# 异常与中断

# 概念

异常CPUCPU 内部引起的异常事件(内部中断或软件中断)

  • 故障:由指令执行引起的异常
    • 如未定义指令,越权指令,段故障,数据未对齐,除数为零,浮点溢出,整数溢出
  • 自陷:事先安排的 “异常” 事件
  • 终止:随机出现的使得 CPUCPU 无法继续执行的硬件故障,和具体指令无关
    • 如机器校验错,总线错误

外部中断:外部设备向 CPUCPU 发出中断请求(如鼠标点击,按键动作)

# 异常与中断处理过程

当发生中断 / 异常事件时,CPUCPU 接收到请求,在指令执行结束时 CPUCPU 要进入中断响应周期进行响应处理

  1. 关中断:临时禁止中断请求,为了在中断响应周期以及中断服务程序中保护现场操作的完整性
  2. 保存断点:保存将来返回被中断程序的位置
    • 对于已经执行完毕的指令,其断点是下一条指令的位置
    • 对于缺页故障、段错等执行指令引起的故障异常,断点应该是异常指令的 PCPC
  3. 中断识别:根据当前的中断请求识别出终端来源,并将对应中断的中断服务程序入口地址送入程序计数器 PCPC

# 支持中断的 CPUCPU 设计

# 数据通路升级

# 三级时序硬布线控制器升级

# 现代时序硬部线控制器升级

# 微程序控制器升级