跳转至

第 4 章 中央处理器

依据:2016 年版教材第 4 章与配套大纲。下文编号指大纲“考核内容与考核要求”。

复习导航:大纲要求与笔记位置

大纲条目 层次 位置 学完应能做到
1 程序执行概述 识记;领会 第 1 节 给出指令周期、数据通路、PC/IR/译码器/MAR/MDR 等含义,说明指令执行过程
2 数据通路基本结构和定时 识记;领会 第 2 节 区分操作元件与状态元件,说明互连与 D 触发器定时
3 数据通路基本工作原理 领会 第 3 节 说明控制信号与数据通路的关系,描述单总线与单周期的工作过程
4 流水线方式下指令的执行 识记;领会;简单应用 第 4 节 划分流水段,说明 CPI 为 1 的原因,计算指令吞吐率
5 控制器设计基本原理 识记;领会 第 5 节 说明硬连线与微程序控制器的设计过程和特点
6 指令流水线中的冒险处理 识记 第 6 节 区分结构、数据、控制冒险,说明转发与停顿
7 高级流水线基本原理 识记 第 7 节 说明超流水线、多发射、VLIW、超标量、乱序执行
8 异常和中断 识记;领会 第 8 节 区分内部异常与外部中断,说明硬件的响应过程

第 4 条兼有简单应用,需能划分流水段并计算吞吐率;第 6、7 条以识记为主,重点是术语所指的现象而非细节推导。

本章学习目标

第3章规定了指令的功能,本章说明CPU用数据传送、运算和控制实现功能的过程。学习内容包括CPU组成、数据通路与定时、控制器,以及异常和中断。流水线部分要求能够划分流水段、计算吞吐率,并理解冒险的成因与处理方法。

1 程序执行概述(1,识记、领会)

CPU由数据通路和控制部件组成,两者协同工作。数据通路保存、传送、加工数据。控制部件根据指令、时序及状态产生控制信号。取指、译码、操作数获取、执行、访存、写回等阶段,并非每条指令都要走完。

部件 职能
PC 后继取指地址
IR与译码器 保存指令并解释字段
寄存器堆 通过读口和写口提供操作数及保存结果
ALU 运算、比较及有效地址计算
MAR/MDR 暂存主存地址和读写数据
控制器 决定选择信号、写使能、运算操作、读写请求

指令周期是完成一条指令所需的全过程,时钟周期是基本节拍。多周期实现中,一条指令可占多个时钟。流水线中多条指令的周期相互重叠,不能由CPI直接推断单条延迟。

2 数据通路基本结构和定时(2,识记、领会)

组合逻辑依据当前输入产生输出,寄存器等状态元件则在规定时刻锁存值。时钟周期要容纳关键路径延迟、寄存器建立时间等。缩短时钟周期需改变路径或流水分段,不能让信号尚未稳定就锁存。

单总线结构共享传送通路,硬件开销小,但同一时刻通常只允许一个源驱动总线,复杂操作需要多个节拍。多总线或专用通路允许更多并行传送,代价是连线和选择控制变多。多路选择器选数据来源,写使能决定目的寄存器是否更新。

单周期实现让每条指令在一个长周期内完成,周期由最慢的指令决定。多周期实现分阶段复用硬件,周期可以缩短,代价是CPI增加。比较性能要看“周期×周期数”,不能只比较CPI。

3 数据通路工作原理(3,领会)

指令语义可以进一步分解为数据通路上的微操作。确定操作数来源、所经运算部件和结果目的地后,才能判断需要哪些选择信号和写使能。以下微操作描述基本过程。其中哪些操作能够并行,取决于具体电路的资源和连接方式。

以使用MAR和MDR的取指过程为例,CPU先执行MAR←PC,将取指地址送到存储器,并发出读请求。数据返回后执行MDR←M[MAR],再由IR←MDR保存指令。顺序执行时,PC更新为PC←PC+指令长度。实际实现可以把其中部分操作合并或并行安排。

MIPS指令 核心数据流 关键写操作
add rd,rs,rt 寄存器两读口→ALU加→结果选择器 写rd
lw rt,imm(rs) 基址+符号扩展位移→数据存储器读 主存数据写rt
sw rt,imm(rs) 基址+位移→地址端,R[rt]→数据端 写数据存储器,无寄存器写回
beq rs,rt,imm 比较两寄存器,形成分支目标 条件成立时更新PC

所有指令都有取指操作。“sw不读存储器”通常指不读数据存储器,但取指访问并不能省掉。IR等寄存器是否需要独立设置,也与实现方式有关。

4 流水线执行(4,识记、领会、简单应用)

教材先给出一般分段示意,再给MIPS五段:IF取指、ID译码/读寄存器、EX运算/算地址、MEM数据访存、WB写回。流水段间寄存器传递数据、目的寄存器号和控制信息。

R型运算的MEM段为空,sw没有寄存器写回,简单流水线仍保留这两处位置,以维持统一流动。某段没有有效工作,不代表其他指令可以随意跨过该段。

理想k段流水线,各段周期τ,n条指令:

流水线总时间 T_pipe = (k+n−1)τ;吞吐率 TP = n / [(k+n−1)τ]。

若串行每条需kτ,加速比为nk/(k+n−1),n很大时趋近k。存在s个额外停顿周期时,总时间为(k+n−1+s)τ。各段延迟不等时,τ至少由最长段与寄存器开销共同决定。

例:5段、τ=2 ns,10条无冲突指令共14周期=28 ns,吞吐率10/28 ns≈3.57×10⁸条/s。若改为串行执行,每条10 ns,共100 ns,加速约3.57。稳态理想CPI≈1,但单条经历五段,延迟约10 ns。

5 控制器设计(5,识记、领会)

硬连线控制器将操作码、状态、节拍等输入经逻辑电路转换为控制信号。设计时分析指令 → 列微操作与时序 → 确定控制信号 → 建立逻辑关系并实现。速度通常较快,但复杂指令的逻辑设计和修改都比较困难。

微程序控制器将控制步骤存入控制存储器,由微地址顺序及转移逻辑读取微指令,逐步发出微命令。机器指令是程序员使用的操作,微程序是实现该指令的一串微指令,微命令则是某项基本控制动作。控制存储器不等于存放用户程序的主存。

水平型微指令用较直接的控制位表达并行微命令,字比较宽。垂直型编码较集中,需要译码,字比较短。微程序控制规整、易修改,但访问控制存储会带来时间开销。

6 流水线冒险(6,识记)

类型 发生原因 处理方法
结构冒险 同周期争同一资源,如统一单端口存储器取指与取数 增加/分离资源或停顿
数据冒险 需要的结果尚未可用 转发、停顿、编译调度
控制冒险 分支方向或目标未确定 停顿、预测,错误时冲刷

数据相关是程序自身的数据依赖,是否形成冒险取决于流水线时序。基本的顺序五段流水线主要看先写后读RAW。转发把尚未写回的结果送给使用者,可以减少等待,但不能让结果早于实际生成时间出现。

经典load-use:lw $t0,0($s0)紧接add $t1,$t0,$t2。load要到MEM段末才读出数据,而后继指令的EX段已经需要它,通常要停顿1周期再转发。具体停顿数以题设的转发路径和读写时序为准。

流水线时空图通常以行为指令、列为时钟周期。在理想的IF至WB排列基础上,结合资源占用、结果可用时刻和分支确定阶段,可以找出需要停顿或冲刷的位置。

7 高级流水线(7,识记)

基本流水线通过重叠不同指令的执行阶段提高吞吐率。进一步提高性能,可以增加流水段数,或在一个周期内发射多条指令。前者称为超流水线,较细的分段有助于缩短周期,但也会增加流水寄存器开销,并可能增大分支预测失败的代价。后者属于多发射,其效果受程序中指令级并行(ILP)的限制。ILP指在满足依赖关系的前提下,有多少操作可以并行处理。

IPC表示每周期完成的指令数,等于完成指令数除以周期数;多发射处理器的IPC可以大于1。在相同统计范围内,CPI与IPC互为倒数。

静态多发射由编译器安排并行发射,VLIW把多个操作组织在长指令中。动态多发射由硬件在运行时决定,超标量是典型形式。动态调度和乱序执行允许就绪指令先执行,但体系结构可见的结果仍要符合程序语义,通常靠有序提交等机制保证。

8 异常和中断(8,识记、领会)

内部异常通常与当前指令同步,如非法指令、除零、缺页;外部中断来自设备、时钟等,与当前指令异步。两者都可能要求保存返回信息、转入处理程序,处理完再恢复。

  • 故障fault:通常可修复并重新执行故障指令,如缺页;保存位置要能支持重执行。
  • 陷阱trap:在指令完成后报告,常返回后继指令,如某些调试/系统服务机制。
  • 终止abort:严重错误,通常不能按原程序正常恢复。

硬件负责识别事件、保存必要的返回状态并转入入口。处理程序完成具体处理与更完整的现场保护。保存断点只保存恢复所需的指令位置,保存现场还包括寄存器、状态等。不同异常返回点不同,不能一律写PC+4。

9 考核要求

本章重点为程序与指令之间的关系、指令执行过程、异常和中断的基本概念、数据通路的功能和基本结构、数据通路的定时、指令流水线的基本概念、控制器的功能和设计过程;难点为数据通路的定时、指令流水线、控制器的设计过程、流水线中的冒险处理、高级流水线基本原理。

10 教材本章习题

本节按“单项选择题/填空题/简答题”分节,答案依据教材附录。

自测题(自编) 参考答案与辨析
五段线 100 条、停顿 6 周期共几周期? 5+100−1+6=110。
转发能否消灭所有 RAW 冒险? 不能,需看结果何时可用,load-use 通常仍需停顿。
微指令是普通应用程序中的机器指令吗? 不是,是控制层实现步骤。
缺页和键盘中断分别是什么? 内部异常、外部中断。
流水线是否必然缩短单条指令延迟? 不能保证,主要提高连续指令吞吐率。

11 闭卷复习与跨章联系(补充)

本章把第 3 章的指令格式落实为硬件动作:指令格式决定控制信号的取值,数据通路决定这些信号作用于哪些部件。第 5 章的存储层次解释了 MEM 段为何可能耗时多周期,第 6 章的中断机制与本章的异常处理共用同一套响应流程。计算题的关键是分清“周期数”与“延迟”:吞吐率的提高来自重叠执行,单条指令的延迟并未因此缩短。