计算机组成:中央处理器

正文索引 [隐藏]

1. CPU 概述

image-20191208081540992

CPU 的功能:指令执行、控制信号、时钟定时、数据运算、中断

数据通路:全部指令执行部件的基础(主存虽然不属于 CPU,但是由于指令执行需要频繁访问,所以划归数据通路)

控制单元:产生控制信号,使数据通路正常工作

微操作:计算机中最基本的不可再分解的操作

微命令:执行微操作所需要的控制信号

计算机指令周期的处理流程

  1. 取指令:将一条指令从主存中取出送入 CPU

  2. 指令译码:分析指令的操作码以及寻址特征

  3. 读数据:将指令要处理的源操作数读到 CPU

    image-20191208091844495

    • RR 型指令:源操作数在通用寄存器
    • RS 型指令:源操作数在通用寄存器存储器
  4. 执行操作:用 ALU 完成指令功能(四则运算、逻辑运算)

  5. 存放结果:保存处理后的数据(目的操作数

    • RR 型指令:目的操作数在通用寄存器
    • RS 型指令,目的操作数在通用寄存器存储器

下面举个计算机取指令的例子,使用 RTL 语言描述:

image-20191208082539260

假设主存与 CPU 异步

  1. MAR ← PC //将指令地址从 PC 中送到 MAR(存储器地址寄存器)
  2. MemRd ← 1 //向存储器发送读指令
  3. PC ← PC + 1 //PC 指向下一条指令
  4. wait until ready = 1 //等待数据到达存储器总线(出现在 MDR(存储器数据寄存器) 中)
  5. IR ← M[MAR] //将指令从存储器相应地址取出放入指令寄存器
  6. MemRd ← 0 //取消存储器读指令

如果同步,则不需要 2,4,6 步骤

2. 中断系统

组成

  • 中断软件:中断初始化程序 + 中断处理程序
  • 中断硬件:中断控制器

中断响应

  • 条件:EINT = 1(表示 CPU 允许中断)
  • 响应时间:指令周期后 (因为此时 CPU 线性程序的现场最简单稳定)
  • 响应过程:关中断 -> 保护程序断点 -> 获得中断服务程序入口地址

举例:MIPS 中的异常处理

image-20191208085002186

3. 单周期 CPU

image-20191208092134504

主要特点:部件冗余、分散互联

指令周期:长度取决于执行时间最长的指令(取数据 load 指令)image-20191208112109115
image-20191208112420781

I. 基本组成

image-20191208142628570

  • MCU,Main Control Unit,发出各部件所需的控制信号

    image-20191208103132561

  • ALUCU,ALU Control Unit,根据 ALU 的操作类型发出 ALU 具体操作信号

    image-20191208103149596

  • IM,Instruction Memory,存放指令,执行读操作

  • DM,Data Memorym,存放数据,执行写操作

  • SigExt16/32,Sign Extend 16/32,将 16 位指令拓展到 32 位

  • PC,Program Counter,存放即将执行指令的地址

  • RF,Register File,临时存放数据、地址

  • ALU,Arithmetic Logic Unit,执行数据运算

  • 加法器,对 PC 值进行修正

image-20191208091844495

完整数据通路

image-20191208102755989

II. 取数据流程

image-20191208103409623

  1. 取指令(蓝线)

    image-20191208104136916

  2. 取数据(绿线):这里最后一行的 PC 变化指等待时钟信号跳变,和 1 中的不冲突

    image-20191208105013170

III. 存数据流程

image-20191208105212701

  1. 取指令(蓝线)

  2. 存数据(绿线)

    image-20191208105434146

IV. 加法流程

image-20191208110623997

  1. 取指令(蓝色)

  2. 运算(绿色)

    image-20191208110822808

V. 分支指令

image-20191208111544762

不转移分支

image-20191208111208856

转移分支

image-20191208111518569

VI. 跳转指令

image-20191208111742269

image-20191208111813733

VII. 支持内部中断的结构

image-20191208112213854

红色部分记为支持中断的核心部件,主要由 MCU 来通告中断原因:

  • 未定义指令中断
  • 算数溢出中断

4. 多周期 CPU

image-20191208092207374

设计思想

  • 指令分阶段执行
  • 每个阶段微操作安排在一个时钟周期内完成
  • 一个时钟周期最多一次访存/寄存器读写/ALU 操作
  • 前一周期执行结果由下一时钟上升沿打入相应状态单元
  • 通常取一次存储器读写的时间作为时钟周期(因为存储器读写最慢)

分类:分散互联结构、单总线结构、双总线结构、三总线结构

I. 分散互联结构

在单周期数据通路基础上,合并冗余单元,增加处理单元之间的临死寄存器:

  • 指令存储器、数据存储器合并
  • 加法器、ALU 合并
  • 增加
    • IR, Instruction Register,暂存存储器读出的指令
    • MDR,Main Data Register,暂存存储器读出的数据
    • 临时寄存器 A, B,暂存 RF 中读出的操作数
    • 寄存器 ALUOut,暂存 ALU 输出数据

示意结构

image-20191208142136730

指令周期:分为 5 个周期

  • T0:用 PC 值从存储器中读指令,将指令放在 IR,通过 ALU 修正 PC 指向下一指令
  • T1:读寄存器堆,将数据存入临时寄存器 A,B
  • T2:ALU 计算,将结果存入 ALUOut
  • T3:将 ALUOut 中的值写入 RF 或存储器,或读取存储器单元内容放入 MDR
  • T4:将 MDR 值存入寄存器堆

完整通路

image-20191208142220777

i. 取数据流程

共 5 个周期

第一个周期:用 PC 值从存储器中读指令,将指令放在 IR,通过 ALU 修正 PC 指向下一指令

image-20191208143932586

第二个周期:读寄存器堆,将数据存入临时寄存器 A,B

image-20191208144610462

第三个周期:存储地址计算,将地址放入 ALUOut

image-20191208145048894

第四个周期:从存储器中取 ALUOut 所存地址,放入 MDR

image-20191208145236288

第五个周期:将 MDR 中数据送入指定寄存器中

image-20191208145449829

ii. 存数据流程

共 4 个周期

前三个周期和取数据一样:

  1. 用 PC 值从存储器中读指令,将指令放在 IR,通过 ALU 修正 PC 指向下一指令
  2. 读寄存器堆,将数据存入临时寄存器 A,B
  3. 存储地址计算,将地址放入 ALUOut

第四个周期:将对应写入存储器 ALUOut 地址中

image-20191208145848839

iii. 加法流程

共 4 个周期

前两个周期和取数据一样:

  1. 用 PC 值从存储器中读指令,将指令放在 IR,通过 ALU 修正 PC 指向下一指令
  2. 读寄存器堆,将数据存入临时寄存器 A,B

第三个周期:ALU 堆操作数执行加法运算,存入 ALUOut

image-20191208150301897

第四个周期:结果存入 RF 中

image-20191208150350293

iv. 分支指令

共 3 个周期

前两个周期和取数据一样:

  1. 用 PC 值从存储器中读指令,将指令放在 IR,通过 ALU 修正 PC 指向下一指令
  2. 读寄存器堆,将数据存入临时寄存器 A,B

第三个周期:比较临时寄存器 A、B 中的值,如果相等,则将 ALUOut 的值送入 PC

image-20191208152332115

v. 跳转指令

共 3 个周期

前两个周期和取数据一样:

  1. 用 PC 值从存储器中读指令,将指令放在 IR,通过 ALU 修正 PC 指向下一指令
  2. 读寄存器堆,将数据存入临时寄存器 A,B

第三个周期:将 PC 的值左移对应位送入 PC

image-20191208152758531

II. 单总线结构

总线作为CPU多个部件间传输数据的公共通路,使得CPU内部结构更规整。但总线传输的“互斥性”决定了一条总线上只能进行串行的传送操作,降低了操作间的并行性,从而导致指令周期延长

示意结构

image-20191208152938195

完整数据通路(基于通用寄存器)

image-20191208153022005

取指令操作

共 5 个周期

image-20191208155642826

  1. 送指令地址

    image-20191208155554820

  2. 取指令

    image-20191208155624514

image-20191208155654651

  1. 送 PC 修正量

    image-20191208155718671

  2. 修正 PC

    image-20191208155832881

image-20191208155919510

  1. 指令译码和读寄存器

    image-20191208155943112

运算操作

共两个周期

image-20191208160114567

  1. 读寄存器

    image-20191208160201813

  2. 运算并写寄存器

    image-20191208160233922

III. 双总线结构

在单总线结构中,总线上操作非常繁忙,但部件间操作并行性较低。提高操作并行性的方法:

  • 在单总线数据通路中建立一条或者多条专用通路
  • 构造并行总线,允许总线事务并行地完成(双总线结构、三总线结构)

基本结构

image-20191208160623250

完整数据通路

image-20191208160648516

IV. 三总线结构

基本结构

image-20191208160711863

V. 性能指标

CPI:指令周期中包含的时钟周期数

平均 CPI:衡量 CPU 速度的指标

image-20191208161036276

不同互联结构性能比较

10 条 MIPS 32 指令中,按照各自 CPI 可以将它们分为5类:取数指令、存数指令、算术/逻辑指令、分支指令和跳转指令。

假设这5类指令在程序中出现的频度依次为:30%、10%、40%、10%和10%,由不同多周期结构实现的该指令集的平均CPI如下:

image-20191208161228784

5. 指令流水 CPU

指令流水:将指令的执行过程分为几个阶段,每个阶段由数据通路中的不同操作部件执行,不同指令多个阶段在时间上重叠

image-20191208161539616

结构示意

image-20191208161650100

  • 取指令(FI):从指令存储器中读取指令。
  • 指令译码(ID):分析当前指令,同时读取寄存器。
  • 执行指令(EX):执行指令操作或计算地址。
  • 存储器访问(MA):对数据存储器进行读写操作。
  • 数据写回(WB):将操作结果写回寄存器。

image-20191208162830292

级间寄存器

为了使多条指令共享流水线数据通路,且保证流水线能够正确处理指令,必须在两个流水段之间设置缓存

image-20191208163054388

  • FI/ID级间
    • 指令寄存器(IR):指令代码
    • 顺序程序计数器(NPC1):顺序执行指令地址
  • ID/EX级间
    • 指令寄存器(IR):指令代码
    • 顺序程序计数器(NPC1):顺序执行指令地址
    • 源寄存器1(Rs):Rs的内容
    • 源寄存器2(Rt):Rt的内容
    • 立即数寄存器(Imm-32): 16位立即数符号扩展后的32位立即数
  • EX/MA级间
    • 指令寄存器(IR):指令代码
    • 源寄存器2(Rt):Rt的内容
    • 分支地址寄存器(NPC2):分支指令的目的地址
    • 转移地址寄存器(NPC3):转移指令的目的地址
    • ALU结果寄存器(ALU-Out):ALU执行结果
  • MA/WB级间
    • 指令寄存器(IR):指令代码
    • ALU结果寄存器(ALU-Out):ALU执行结果
    • 数据存储器读出数据寄存器(MEM-Out):存储器数据

完整通路

image-20191208163147880

I. 流水线冒险

由于某些流水段不能正常工作,而引起流水线停顿。这种现象称为流水线冒险(hazard)

结构冒险

  • 指令间竞争硬件资源造成
  • 单周期数据通路采用部件冗余可解决这个问题

数据冒险

生产数据的源指令和消费数据的目标指令重叠执行时,不能满足程序要求指令间数据处理的先后关系造成

image-20191208161915815

控制冒险

条件转移指令做出决定前,后续指令出现在流水线中,这时,如果决定的结果与已经进入流水线的指令序列不同的话,条件转移之后的指令的执行是无效的

image-20191208162036953

II. 性能指标

流水线的性能用 吞吐率、加速比、效率 三项来衡量

吞吐率

单位时间内流水线完成指令或输出结果的数据量

  • 最大吞吐率:流水线在连续流动达到稳定状态后获得的吞吐率,image-20191208162235276
  • 实际吞吐率:流水线完成 n 条指令的实际吞吐率,image-20191208162308869

加速比

某个程序以流水线执行的速度与等功能非流水线执行速度之比,m 段流水线连续执行 n 条指令的加速比为:

image-20191208162418852

在 n >> m 时,Smax ≈ m(段数)

效率

流水线中各功能段部件的利用率,m 段流水线连续执行 n 条指令的效率为:

image-20191208162627106

III. 执行举例

假设下列 5 条指令在流水线上连续执行

lw $s0,100($s1)
sw $s2,200($s3)
add $t0,$t1,$t2
beq $t3,$t4,300
j 500

第一个时钟周期

image-20191208163618632

第二个时钟周期

image-20191208163646473

第三个时钟周期

image-20191208163943933

第四个时钟周期

image-20191208163747674

第五个时钟周期

image-20191208163837912

第六个时钟周期

image-20191208164007940