数据通路的基本结构
零件备齐了,这一节讨论怎么把它们连起来。
连法只有三种:单总线、多总线、专用通路。三者提供的功能完全相同——同一条指令在三种结构下都能执行——区别只在要几拍。所以这一节的核心是一个可计算的量:同一个操作,在三种结构下分别需要多少个时钟周期。
机制
一、CPU 内部单总线
所有寄存器的输入和输出都挂在同一根内部总线上。
flowchart TB BUS(["内部总线(一条)"]) R["R0 R1 R2 R3<br/>PC IR MAR MDR"] Y["暂存器 Y"] ALU["ALU"] Z["暂存器 Z"] R -->|Xout 三态门| BUS BUS -->|Xin 写使能| R BUS --> Y Y --> ALU BUS --> ALU ALU --> Z Z --> BUS classDef bus fill:#fde68a,stroke:#d97706,stroke-width:3px classDef reg fill:#dbeafe,stroke:#2563eb,stroke-width:2px classDef alu fill:#dcfce7,stroke:#16a34a,stroke-width:2px class BUS bus class R,Y,Z reg class ALU alu
结构上只有一条约束,但后果很大:
一拍之内,总线上只能出现一个值。
一次 ALU 运算 (R1) + (R2) → R3 因此必须拆成三拍:
| 拍 | 微操作 | 控制信号 | 为什么不能合并 |
|---|---|---|---|
| T0 | (R1) → Y | R1out, Yin | R1 的值先上总线,被暂存器接住 |
| T1 | (Y) + (R2) → Z | R2out, ALUop=add, Zin | R2 现在才能上总线——T0 已被 R1 占用 |
| T2 | (Z) → R3 | Zout, R3in | 结果经 Z 回到总线再写入 |
三拍里有两拍是被总线逼出来的:T0 存在是因为两个操作数不能同拍上总线(这就是暂存器 Y 的理由),T2 存在是因为 ALU 输出直接接回总线会形成组合环路(暂存器 Z 的理由)。
优点:连线最少、结构最规整、控制器最简单。
缺点:拍数最多,
二、CPU 内部多总线
设两条或三条内部总线,让多个值能同时传送。
以三总线为例:总线 A 和 B 各送一个操作数给 ALU,总线 C 送回结果。于是:
| 拍 | 微操作 |
|---|---|
| T0 | (R1) → A,(R2) → B,ALU 运算,结果 → C → R3 |
一拍完成。 代价是连线数量成倍增加,而且每个寄存器要有多套三态门(分别通向不同总线)。
双总线是折中:两个源可以同时上不同总线,但结果回写还要一拍,或者需要一条到某总线的旁路。题目给”双总线”时要按图判断,不能套模板——双总线的具体连法在不同教材里不统一。
三、专用数据通路
不设通用总线,按数据实际流动的方向单独拉线。
典型例子就是 MIPS 五级流水线的数据通路:PC → 指令存储器 → 寄存器堆 → ALU → 数据存储器 → 写回,一条主干道加若干旁路,每一段只往一个方向走。
优点:速度最快,没有总线争用,天然适合流水线切分。 缺点:连线最多、面积最大、通用性差——加一条新指令可能要重新布线。
为什么流水线一定用专用通路:流水线要求各段同时工作(5.6.2),而总线结构下各段会互相争总线,结构冒险会严重到流水线失去意义。这就是 4.4.2 说”RISC 采用 Load/Store 结构让流水段整齐”的硬件配套条件。
三种结构的对比
| 单总线 | 多总线 | 专用通路 | |
|---|---|---|---|
| 一次寄存器间 ALU 运算 | 3 拍 | 1~2 拍 | 1 拍 |
| 连线数量 | 最少 | 中 | 最多 |
| 需要暂存器 | 必须(Y、Z) | 可少设 | 一般不需要(用段间寄存器) |
| 控制器复杂度 | 最简单 | 中 | 最复杂 |
| 适合 | 早期 CISC、微程序控制 | 中档机 | 流水线 / RISC |
| 高 | 中 | 低 |
这张表的读法:三种结构不是”好坏排序”,而是5.2.3 那个
「找线」到底是怎么个找法
疑问点:数据通路书上讲得很少,感觉就是找线;印象里做过一道题,数据通路要从 ALU 穿过去
两句都对,而且第二句正是这一节最值得记住的那个结构特征。先说第二句。
你记得的那道题应该是 2015 年真题那道单总线 CPU 大题(本章 5.3.4 会完整拆开)。它的结构是:
- 通用寄存器 R0~R3 和暂存器 T 的输出只通向 ALU 的输入端
- ALU 的输出经移位器 SR 才回到内总线
- 内总线再写回各寄存器
也就是说,寄存器的输出根本没有直达内总线的路。于是
(R1) → R2这种最普通的传送,也必须绕道 ALU。这就解释了 ALU 功能表里那个看起来毫无用处的「直送 A(
mova)」为什么存在——它不是给程序员用的,是给数据通路用的:当唯一的回路穿过 ALU 时,就需要一个”什么都不做地穿过去”的功能。 同理,移位器的三种功能里也有一个”直送(mov)“,理由完全一样。一句话判据:ALU 功能表里出现”直送”,几乎可以断定这台机器的寄存器间传送必须穿过 ALU。
再说第一句。「就是找线」抓住了操作的本质,但它有一套确定的算法,不是碰运气。
完整的读图五步(5.3.4 会逐条演示):
- 先给每根线定性——实线走数据,虚线走控制。控制线的起点只能是控制部件(5.3.1 的判据)。
- 数出总线有几条——这决定”一拍能传几个值”,是拍数的上限约束。
- 找出每个寄存器的入口和出口——出口有没有三态门(
Xout)、入口有没有写使能(Xin)。只有出口能上总线,只有入口能收。- 把要完成的操作写成数据流(就是 5.2.2 那四组),再对着图检查每一步的路是否存在。
- 排拍:把数据流的每一步按”总线冲突 / 部件冲突 / 数据依赖”三条规则分组,能塞进同一拍的塞在一起。
书上讲得少是真的,但少的是例题不是知识点。 这一节的知识点就是上面那张三结构对比表,剩下全是把它用在具体图上的熟练度——所以”等做题”这个判断是对的,而做题前要带着的是这五步和三条排拍规则,不是更多的概念。
排拍的三条规则
第 5 步用到的三条规则,单独摆出来(5.3.4 反复使用):
| 规则 | 内容 | 来源 |
|---|---|---|
| 总线冲突 | 同一拍内,同一条总线上只能有一个 Xout 有效 | 三态门,见 5.3.2 |
| 部件冲突 | 同一拍内,ALU / 移位器 / 主存端口各自只能被用一次 | 组合部件不能同时算两件事 |
| 数据依赖 | 后一步要用前一步的结果,必须排在后一拍 | 结果要等寄存器时钟沿才稳定 |
反过来,Xin 可以同拍多个有效——这是唯一能”白赚”的并行,排拍时要主动去找。典型例子:取指周期里 PC → MAR 的同时把 PC 也送去做加法。
边界
层次辨析:单总线 / 多总线 / 专用通路
三者功能相同、拍数不同。判据:
- 图上只有一条贯穿所有寄存器的竖线 → 单总线
- 图上有两三条并行的总线 → 多总线
- 图上没有总线,只有点对点的箭头 → 专用通路
拍数:单总线一次运算 3 拍,专用通路 1 拍。
边界辨析:暂存器 Y、Z 是结构的产物,不是必需品
单总线必须有 Y(接住第一个操作数)和 Z(打断 ALU 输入输出的组合环路)。
多总线和专用通路可以不设——两个操作数走不同总线同时到达,结果走第三条总线直接写回。所以”CPU 里一定有暂存器”是错的,正确说法是”单总线结构下必须有”。
关联对照:CPU 内部总线 / 系统总线
内部总线的争用由控制器排拍解决(本节三条规则);系统总线的争用由总线仲裁解决(6.2.1)。
区别的根源:内部总线的所有使用者都听同一个控制器指挥,冲突可以在设计时静态排除;系统总线的使用者(CPU、DMA 控制器)是相互独立的主设备,冲突只能在运行时动态判优。
对照速查
| 现象 | 说明这是什么结构 |
|---|---|
| ALU 功能表里有”直送 A” | 寄存器间传送要穿 ALU → 单总线 |
| 图上有暂存器 T / Y / Z | 大概率单总线 |
| 一次寄存器间加法要 3 拍 | 单总线 |
| 各段有独立的指令存储器和数据存储器 | 专用通路(流水线) |
| 一拍能同时读两个寄存器并写回 | 多总线或专用通路 |
| 操作 | 单总线拍数 | 说明 |
|---|---|---|
(R1) → R2(若有直达总线的路) | 1 | R1out, R2in |
(R1) → R2(须穿 ALU) | 2 或 3 | 视 ALU 输出端有无暂存器 |
(R1) + (R2) → R3 | 3 | 存 Y、算、回写 |
| 取指周期 | 3 | 送地址、读存储器、送 IR(PC 自增可并入) |
考点
- “为什么要设暂存器 T”:答单总线一拍只能传一个值,ALU 需要两个操作数同时到位;再补避免 ALU 输入输出成组合环路。
- 数一次运算要几拍:单总线记 3 拍。题目若给具体图,按三条排拍规则实算。
- 判断结构类型:看总线条数,或看有没有暂存器、有没有”直送”功能。
- 三种结构的优劣对比:拍数、连线、控制复杂度三项,方向相反。
- 流水线为什么要专用通路:答总线结构下各段争总线会造成严重结构冒险。
链接
- 🏠 返回总览:计算机组成原理第 5 章:中央处理器总览
- ⬅️ 上一节:5.3.2 数据通路的组成
- ➡️ 下一节:5.3.4 数据通路的操作举例
- 🚀 专用通路的去向:5.6.2 流水线的基本实现
- 🔗 RISC 的配套条件:4.4.2 RISC 的基本概念
- 📖 名词库:第 5 章名词库