是什么
-
定义:数据通路(Data Path)是指令执行过程中数据所经过的路径及对其进行操作的部件集合;微操作控制信号是在每个时钟周期(节拍)内由控制器发出、用于控制数据在通路中正确流动的电平或脉冲信号。
-
大白话:数据通路就是 CPU 内部各个寄存器、ALU 和总线连起来的“硬件管网”,控制信号就是“阀门开关”,告诉计算机哪一拍打开哪个阀门放数据、流到哪里去。
-
==寻址原理==:计算机中用二进制编码对寄存器进行唯一标识。要区分 个不同的寄存器,所需的二进制位数 必须满足:
-
具体对应:4 个寄存器只需要 位二进制()即可完全覆盖:
-
-
-
-
带有双括号的就是寄存器寻址,单括号的就是直接寻址
-
核心内容
这类“数据通路与微操作控制信号”大题,是计组里套路最固定、性价比最高的必拿分大题。掌握以下四步通法流程,拿到任何数据通路题都能直接套用:
第一步:找结构(看图审题,明确硬件约束)
动笔前先在图上扫视 3 个关键点:
-
总线结构:是单总线、双总线还是三总线?
-
408最常考单总线:同一拍内,内部总线上只能有一个器件作为“输出(Out)”;多个器件可以同时作为“输入(In)”接收该数据。
-
-
ALU 的输入/输出接口:
-
ALU 的两端输入分别连在哪里?通常一端必须接暂存器(如 A / Y / Temp),另一端直连总线。
-
ALU 的输出端是否有暂存器(如 AC / Z)锁存结果?
-
-
MDR / MAR 的特殊信号:
-
区分面向内部总线的信号(如
MDRin、MDRout)和面向外部系统总线的信号(如MDRinE、MDROutE、MemR、MemW)。
-
第二步:拆操作(把指令按“微操作三部曲”拆解)
不管指令写得多么复杂,执行阶段本质上只有三件事(按需组合):
[1. 取操作数 (读主存/读寄存器)] ──> [2. ALU运算] ──> [3. 写回结果 (写主存/写寄存器)]
-
取操作数:
-
若是寄存器寻址:直接从通用寄存器读(如
R0out)。 -
若是间接寻址/存储器寻址:必须走读主存流程(送地址 读数据)。
-
-
ALU 运算:
-
先把第一个数送进暂存器 。
-
再把第二个数送到总线上,发出 ALU 控制信号(如
ADD、SUB),将结果打入输出暂存器 。
-
-
写回结果:
-
若写回寄存器:。
-
若写回主存:必须走写主存流程(送地址 送数据到 MDR 发出写控制信号)。
-
第三步:排节拍(分配时钟周期,考虑并行)
把拆出来的微操作逐一塞进时钟周期(C5、C6、C7…),遵循两条硬规则:
-
总线不冲突:同一拍内,带有
out(且挂在同一总线上)的信号最多只能出现一个。 -
读写主存的标准节拍模版(直接背):
-
读主存(需 2 拍):
-
第 1 拍:(控制信号:
Addr_out, MARin) -
第 2 拍:(控制信号:
MemR, MDRinE)
-
-
写主存(需 2 拍,若 MAR 中已有有效地址可省第 1 拍):
-
第 1 拍:(控制信号:
Data_out, MDRin) -
第 2 拍:(控制信号:
MemW, MDROutE)
-
-
加分小技巧(并行优化)
在执行第 2 拍“读主存”时,数据走的是外部数据总线,CPU 内部总线处于闲置状态!你可以顺手在这一拍安排一个内部总线传输(比如把另一个寄存器的值送进暂存器 )。
第四步:核对信号与格式(规范输出)
-
左边写功能,右边写信号:左边用数据流向箭头(如 ),右边写题目给出的严格信号名(大小写与图保持一致)。
-
检查输入输出匹配:有箭头“出”必有对应
Xout,有箭头“进”必有对应Xin。 -
检查外部信号:读内存必有
MemR, MDRinE;写内存必有MemW, MDROutE。
例题
-
题目:
【2009 统考真题】某计算机字长 16 位,采用 16 位定长指令字结构,部分数据通路结构如下图所示。图中所有控制信号为 1 时表示有效,为 0 时表示无效。控制信号 MDRinE 为 1 表示允许数据从 DB 打入 MDR,MDRin 为 1 表示允许数据从总线打入 MDR。假设 MAR 的输出一直处于使能状态。加法指令“ADD (R1), R0”的功能为 ,即将 R0 中的数据与 R1 的内容所指主存单元的数据相加,并将结果送入 R1 的内容所指主存单元中保存。
已知取指和译码阶段为:
-
C1: |
PCout, MARin -
C2: |
MemR, MDRinE, PC+1 -
C3: |
MDRout, IRin -
C4: 指令译码 | 无
请列出指令执行阶段每个节拍的功能和有效控制信号。
-
-
分析:
-
指令目标:,涉及 1 次间接读内存、1 次加法、1 次间接写内存。
-
套用通法:
-
找结构:单内部总线,ALU 须通过暂存器 暂存一侧输入,结果经 输出。
-
拆操作:读主存取操作数 ALU 加法计算 写回结果至 。
-
排节拍与并行:
-
C5:将 内容送入 。
-
C6:读主存 ,同时利用空闲的内部总线并行完成 。
-
C7: 与 相加,结果存入 。
-
C8:将 结果写入 。
-
C9:发出写信号写入主存( 保持有效,无需重发地址)。
-
-
-
-
答案:
| 时钟 | 功能 | 有效控制信号 |
|---|---|---|
| C5 | R1out, MARin | |
| C6 | MemR, MDRinER0out, Ain | |
| C7 | MDRout, ADD, ACin | |
| C8 | ACout, MDRin | |
| C9 | MemW, MDROutE |
⚠️ 易错点
Warning
内部总线控制 vs 外部总线控制混淆:
内部 CPU 总线进出 MDR:必须写 ==
MDRin/MDRout==。外部系统数据总线(DB)进出 MDR:必须写 ==
MDRinE/MDROutE==(带 代表 Enable 外部三态门控制)。单总线输出冲突:
绝对不能在同一周期内出现两个带
out的内部总线信号(如同一拍写R0out, MDRout为严重错误)。重复发送未被破坏的地址:
- 当 MAR 的输出保持有效且没有被后续操作覆盖时,写回阶段不需要重复将地址再次打入 MAR。
核心内容
1. 硬件接口与控制信号体系
数据通路的控制信号完全由图中硬件结构唯一决定:
-
三态门输出控制(Xout):控制部件将数据送出到内部总线。如
R0out、R1out、PCout、MDRout、ACout。 -
寄存器输入使能(Xin):控制部件从内部总线接收数据并锁存。如
R0in、R1in、PCin、MARin、MDRin、Ain、ACin、IRin。 -
ALU 运算控制:控制 ALU 执行的具体操作。如
ADD、SUB、AND等。 -
主存与外部总线控制:
-
MemR:向主存发读控制命令。 -
MemW:向主存发写控制命令。 -
MDRinE:允许数据从外部数据总线(DB)写入 MDR。 -
MDROutE:允许 MDR 中的数据输出到外部数据总线(DB)。
-
2. 核心原理:MAR、MDR 到底是什么?
CPU 速度极快,主存速度较慢,二者不能直连,必须通过 CPU 边缘的两个中转接口:
+---------------+ 内部总线 (Internal Bus) +---------------+
| 通用寄存器 R0 | <===============================> | 通用寄存器 R1 |
+---------------+ || +---------------+
||
+-----------------------++-----------------------+
| || |
[MARin] [MDRin] [MDRout]
v v ^
+----------+ +------------+ |
| MAR | | MDR | ----------------+
+----------+ +------------+
| ^ |
| (直连) [MDRinE]| |[MDROutE]
v | v
=====================================================================
外部地址总线 (AB) 外部数据总线 (DB) 控制总线 (CB)
| | (MemR / MemW)
v v v
+-------------------------------------------------------------------+
| 主存储器 (M) |
+-------------------------------------------------------------------+
-
MAR(Memory Address Register,地址寄存器):
-
角色:“门牌号寄存器”。
-
输入来自内部总线(由
MARin控制),输出直连外部地址总线(AB)。 -
作用:告诉主存接下来要访问哪一个内存单元。
-
-
MDR(Memory Data Register,数据寄存器):
-
角色:“货物集装箱”。
-
双向双总线连接:一侧连 CPU 内部总线(控制信号为
MDRin/MDRout),另一侧连外部数据总线 DB(控制信号为MDRinE/MDROutE)。 -
作用:进出 CPU 的所有主存数据/指令都必须在此中转。
-
3. 为什么写成 ?
表示“主存(Memory)中地址为 MAR 值的那个存储单元内部保存的数据”。
物理执行流程为:
-
MAR 将地址送到地址总线(AB),主存地址译码器选中对应单元;
-
控制器发出
MemR,主存把该单元的数据推到外部数据总线(DB); -
控制器发出
MDRinE,MDR 从外部数据总线将数据锁存入内部。故微操作记为:,对应信号为
MemR, MDRinE。
4. 寻址方式判断:怎么确定将谁送入 MAR?
判断哪个寄存器送入 MAR,完全取决于指令给出的寻址方式:
| 汇编形式 | 寻址方式 | 含义 | 送入 MAR 的数据来源 | 对应微操作与信号 |
|---|---|---|---|---|
ADD R0, R1 | 寄存器寻址 | 不访存(无需 MAR) | 无 | |
ADD (R1), R0 | 寄存器间接寻址 | R1 存的是地址 | (R1out, MARin) | |
ADD (R0), R1 | 寄存器间接寻址 | R0 存的是地址 | (R0out, MARin) | |
ADD X, R0 | 直接寻址 | 指令字中的形式地址 Ad(IR) | (IRout, MARin) |
-
本题判定依据:
题目指令为
ADD (R1), R0,功能定义为 :-
== 外面没有括号,表示 存放的是纯操作数;==
-
== 外面带括号 ,表示 存放的是主存单元的地址(指针)。==
-
因此,取操作数和最终写回结果时,必须将 写入 MAR,绝不能将 写入 MAR。
-
5. 解题通法:四步设计法
-
第一步:看硬件约束
-
单总线结构 同一拍内只能有 1 个 Out 信号(独占内部总线)。
-
ALU 没有内部存储能力 输入端必须先用 寄存器锁存一个操作数(
Ain);输出端必须先打入 寄存器(ACin)。
-
-
第二步:拆解功能阶段
-
取主存数:。
-
取寄存器数并运算:。
-
写回结果:。
-
-
第三步:时钟节拍分配与并行优化
-
读主存时数据在外部 DB 传输,内部总线空闲,可并行执行 。
-
MAR 具有地址锁存保持特性(题目说明其输出一直使能),写回主存时无需重复传送地址。
-
-
第四步:填表匹配控制信号
-
每一个数据源对应一个
Xout。 -
每一个数据目的地对应一个
Xin。 -
访存操作附带
MemR, MDRinE或MemW, MDROutE。
-
例题
-
题目:
【2009 统考真题】某计算机字长 16 位,采用 16 位定长指令字结构,部分数据通路结构如下图所示。图中所有控制信号为 1 时表示有效,为 0 时表示无效。控制信号 MDRinE 为 1 表示允许数据从 DB 打入 MDR,MDRin 为 1 表示允许数据从总线打入 MDR。假设 MAR 的输出一直处于使能状态。加法指令“ADD (R1), R0”的功能为 ,即将 R0 中的数据与 R1 的内容所指主存单元的数据相加,并将结果送入 R1 的内容所指主存单元中保存。
已知取指和译码阶段为:
-
C1: |
PCout, MARin -
C2: |
MemR, MDRinE, PC+1 -
C3: |
MDRout, IRin -
C4: 指令译码 | 无
请按表中描述方式用表格列出指令执行阶段每个节拍的功能和有效控制信号。
-
-
规范解答:
| 时钟 | 功能 | 有效控制信号 | 依据与说明 |
|---|---|---|---|
| C5 | R1out, MARin | 为间址地址,先送 MAR | |
| C6 | MemR, MDRinER0out, Ain | 外部读主存; 内部总线并行将操作数 存入暂存器 | |
| C7 | MDRout, ADD, ACin | MDR 送总线,ALU 运算,结果存入 AC | |
| C8 | ACout, MDRin | 运算结果经内部总线送入 MDR | |
| C9 | MemW, MDROutE | MAR 地址保持有效,发出写控制信号写入主存 |
⚠️ 易错点
Warning
内部与外部 MDR 控制信号混淆:
内部总线交互:写
MDRin(总线 MDR)和MDRout(MDR 总线)。外部总线交互:写
MDRinE(DB MDR)和MDROutE(MDR DB)。漏写 或写混直接扣分。单总线输出冲突:
同一拍内不能同时出现两个内部
Out信号(例如不能在同一拍写R0out, MDRout)。寻址主体搞反:
必须通过指令语法中的括号判定谁是地址、谁是立即数/寄存器数。
(R1)表示地址在 ,故送 ;若错写为 则整道大题后续全错。冗余微操作:
- 题干明确“MAR 输出一直使能”,写主存(C9)前严禁重复写入 。