Chapter 02 · 解剖图
CPU 解剖
把硅片切开,里面长什么样? 这一章不放动画, 放一张可探索的静态解剖图: 点哪里就讲哪里, 还可以打开 "假装它不存在" 看看后果。
实验台 · CPU 的器件、连线、和"如果它不存在"
点图里任意器件, 右侧打开 做什么 / 物理实现 / 真实 CPU 区别 三段。 上方反事实开关可以临时"关掉"一个器件 (Forwarding / x0 硬接地 / 哈佛分离), 看哪些连线变红、整体性能会差到哪里。
工程细节
数据通路 vs 控制通路
CPU 内部信号分两类:数据信号(寄存器值、内存值、ALU 输出)和控制信号(告诉 ALU "做加法"、告诉 RegFile "写 a3")。 图里它们的连线分别用 绿 与 虚线琥珀。
为什么 x0 硬接 0 这条 ISA 决定如此重要
它不是"寄存器堆的小特性", 而是 RISC-V 整套调用规范的基石。汇编里add x5, x0, x6 表达"x5 = x6";bne x0, x6, label 表达"x6 != 0 则跳"; 写 x0 是"丢弃 ALU 结果"。 打开 "假装 x0 不硬接 0" 反事实, 你能看到整个寄存器堆受影响, 整个生态会立刻崩。
哈佛 vs 冯诺依曼在现代不是二选一
L1 通常是哈佛(I-cache 和 D-cache 分开), L2 起统一为冯诺依曼; 这样取指和访存在 L1 不打架, 又能在 L2 / L3 / DRAM 保持"一切都是地址"的统一抽象。 反事实开关 "假装 IMem 和 DMem 共用端口" 会把你拉回 1970 年代的单端口存储, load/store 密集型负载会直接腰斩。
ALU 物理上是几个并行电路
ALU 不是"一个加减器", 而是几条并行电路 (整数加 / 逻辑 / 移位) + 一个多路选择器, 控制信号选哪条电路输出。整数加法器通常用 carry-lookahead, 是 ALU 的关键路径之一。 高性能 CPU 还会把 ALU 拆成多个端口并行执行 (Apple M2 ~ 6 个 INT execution port)。
下一步: 让这些器件按时钟动起来
到 Ch03 "流水线", 这张静态图会按 IF / ID / EX / MEM / WB 五拍并行; 到 Ch04 "现代 CPU 的魔法", 寄存器堆会膨胀到几百个物理寄存器, ALU 会从 1 个变成 6 个并行端口。