是什么

  • 定义:CPU 内部所有寄存器、ALU 及数据传输部件均连接在一组共享的内部总线上,由控制单元(CU)按时序发出微命令,协调各个部件分时复用总线以完成指令执行的数据通路结构。

  • 大白话:内部总线就像 CPU 内部的“单车道”,所有部件都在路边排队;同一时刻只能有一个部件往路里送数据,其他部件可以同时听/收。为了不堵车和不让数据乱窜,需要额外的暂存器(如 Y、Z)和严格的节拍控制。

核心内容

1. 单总线结构的固有矛盾与暂存器配置

  • ALU 与总线的矛盾:ALU 是无存储功能的组合逻辑部件,要求两个输入端必须同时提供稳定的输入信号。但单总线同一时刻只能传输一个操作数。

    • 解决机制(暂存器 Y):先将第一个操作数从总线打入 暂存器 Y 锁存;在下一个节拍,总线送出第二个操作数直达 ALU 的 B 端,此时 Y 端稳定输出第一个操作数到 A 端,ALU 方可完成计算。

  • 输出与输入的竞争矛盾:ALU 运算结果若直接送回内部总线,会形成环路反馈至输入端 B,引发逻辑冲突与数据振荡。

    • 解决机制(暂存器 Z):ALU 输出端外接 暂存器 Z 锁存运算结果,在后续节拍再由 门控信号将结果送上总线。

2. 算术逻辑标志位生成原理

设 16 位运算中两个输入最高位分别为 ,运算结果最高位为

  • 符号标志 SF (Sign Flag):反映结果正负(补码符号位)。

  • 溢出标志 OF (Overflow Flag):仅在同号相加异号相减导致符号异常改变时产生。

    • 加法 溢出:正加正得负()或 负加负得正()。

    • 减法 溢出:正减负得负()或 负减正得正()。

3. 通用寄存器组(GPRs)寻址与选通逻辑

  • 容量与位宽关系:地址线位宽为 位时,最多可唯一标识 个独立通用寄存器(如 4 位对应 个寄存器)。线位宽看数据链路图上写的几,线位宽就是几

  • 字段来源:寄存器编号(rsrd)来自 指令寄存器(IR) 划分的操作数寻址字段。

  • 读/写控制逻辑底层的区别

    • 写操作(rd):输入为 4 位二进制编号,需选通 16 个寄存器中某一个的写入使能端,使用 地址译码器(Decoder)

    • 读操作(rs):从 16 个寄存器现有的输出信号中选出 1 路送出,使用 多路选择器(MUX)

4. 取指周期的固定微操作与时序流水

取指令阶段的核心数据通路为:

  • 阶段划分与微操作序列

    1. 发地址并启动读PCout, MARin, Read(在第 1 周期发出,将 PC 送入 MAR 并启动主存读)

    2. 主存读等待:若主存访问延迟为 个时钟周期,CPU 需插入等待信号(周期

    3. 送指令寄存器MDRout, IRin(在第 周期,数据已在 MDR 稳定,送入 IR 译码)

读延迟周期重叠:考场上写微操作序列时,PCout, MARinRead 可以放在同一个周期发出,主存读周期从发出 Read 该拍开始计时。

  • 周期计算公式

5. 控制单元(CU)的产生机制与输入连接

  • CU 的功能:产生整个 CPU 运行所需的全部微命令控制信号(如各种寄存器的 in/out 门控、ALUop、主存 Read/Write 等)。

  • CU 的核心输入来源及作用

    1. 指令寄存器(IR):提供操作码(OPcode),告诉 CU “当前要执行什么指令”

    2. 标志寄存器(FR/PSW):提供运算状态标志(如 SF、OF、ZF、CF),告诉 CU “条件转移等分支是否满足”

    3. 时钟与节拍发生器:提供节拍脉冲信号,告诉 CU “当前处于指令的第几步”

    4. 外部控制信号(如中断请求/总线请求):告诉 CU “是否有更高级别的外部事件响应”

例题

  • 题目:(2022年408统考真题)某 CPU 数据通路包含 GPRs(读端口 rs、写端口 rd,线宽均为 4 位)、ALU(输入 A/B,输出 F)、暂存器 Y 与 Z、标志寄存器 FR、IR、PC、MAR、MDR 及主存。

    1. 设 ALU 输入端最高位为 ,输出最高位为 ,写出 SF 以及 时 OF 的逻辑表达式。

    2. 为什么要设置暂存器 Y 和 Z?

    3. GPRs 最多有多少个通用寄存器?rs 和 rd 来自哪个寄存器?rd 应连接地址译码器还是多路选择器?

    4. 取指令阶段(不考虑 PC 增量)的控制信号序列是什么?若从发出主存读指令到数据读出并传送到 MDR 共需 5 个时钟周期,取指令阶段至少需要几个时钟周期?

    5. 图中控制信号由什么部件产生?图中哪些寄存器的输出信号会连到该部件的输入端?

  • 分析

    • (1) SF 直接取最高位;OF 根据溢出情形构造最小项。

    • (2) 单总线同一时刻只能传一个数,ALU 需两端同时输入 必须用 Y 锁存操作数;ALU 结果直连总线会形成回路振荡 必须用 Z 暂存结果。

    • (3) 4 位二进制对应 ;寄存器编号来自 IR;rd 写操作需选通使能端,用译码器。

    • (4) 取指遵循 。第 1 周期发 PCout, MARin, Read,主存读占 5 拍,第 6 周期发 MDRout, IRin

    • (5) 控制信号由控制单元(CU)产生;其输入需接收 IR 的操作码以决定执行指令类型,接收 FR 的状态标志以决定转移跳转。

  • 答案

    1. 加法溢出:

      减法溢出:

    2. 设置 Y 的原因:CPU 内部采用单总线结构,同一时刻总线上只能传输一个操作数;ALU 是无存储功能的组合逻辑部件,要求双端同时稳定输入,故需先用 Y 锁存一个操作数。

      设置 Z 的原因:ALU 运算结果若直接送上内部总线,会形成回路反馈至输入端 B 引起逻辑冲突与振荡;设置 Z 可以暂存运算结果,在下一拍再输出到总线。

    3. GPRs 中最多有 16 个 通用寄存器;rs 和 rd 来自 指令寄存器(IR);rd 应连接 地址译码器

    4. 取指令阶段控制信号序列:

      • 第 1 拍:PCout, MARin, Read

      • 第 2 ~ 5 拍:等待主存读操作完成

      • 第 6 拍:MDRout, IRin

      取指令阶段至少需要 6 个时钟周期

    5. 控制信号由 控制单元(CU / 控制器) 产生。会连到该部件输入端的寄存器为 指令寄存器(IR)标志寄存器(FR)

⚠️ 易错点

Warning

  • 取指周期的节拍叠加陷阱:主存读延时 5 拍是从发出 Read 信号开始计算的。由于 PCout, MARin, Read 可以在第 1 周期同时发出,故取指总周期为 拍,不要算成 拍(除非题目明确说明 Read 必须在 MAR 稳定后的下一周期单独发出)。

  • CU 输入寄存器的遗漏:判断哪些寄存器连入 CU 时,容易漏掉 标志寄存器(FR)。CU 产生微指令不仅看 IR 里的操作码,条件转移指令(如 beq, bne)还必须依据 FR 里的标志位(ZF, SF 等)来决定下一条指令地址。

  • 译码器与多路选择器功能混淆

    • ==地址译码器()== 用于“选定目标使能” 适用于 写操作(rd)

    • ==多路选择器()== 用于“多路数据挑一路” 适用于 读操作(rs)

  • 单总线微操作并发冲突:同一时钟周期内,只能有一个部件输出到总线(带 out 信号),但可以有多个部件同时从总线读入(带 in 信号)。