4.5 寄存器与寄存器文件

时钟寄存器(硬件寄存器)

时钟寄存器是单个存储单元,由 D 触发器(D-Flip-Flop)构成:

  • 输入:数据值 + 时钟信号
  • 输出:当前存储的值
  • 行为:只在时钟上升沿才采样输入并更新输出;其他时间输出保持不变
  • 用途:在流水线中作为阶段之间的缓冲

这类寄存器在 CPU 中用作 PC(程序计数器)、CC(条件码寄存器)、流水线级间的暂存器。

寄存器文件(Register File)

寄存器文件是一个包含多个寄存器的阵列,对应程序员可见的通用寄存器(如 %rax、%rbx 等):

  • 读端口:类似组合逻辑——给定寄存器地址(ID),立即输出对应的值
  • 写端口:类似时序逻辑——只在时钟上升沿才写入新值
  • 通常有多个读写端口,支持同时读取多个寄存器和写入一个寄存器

读操作 vs 写操作的行为差异

操作行为逻辑类型
地址有效后直接输出数据组合逻辑
时钟上升沿采样地址和数据并更新时序逻辑

这意味着在同一个时钟周期内,可以在周期前半段读取旧值、周期末尾写入新值,而不会产生冲突。

Y86-64的程序寄存器

Y86-64 的寄存器文件包含 15 个 64 位程序寄存器(%rax ~ %r14),外加一个”无寄存器”占位(0xF):

  • 两个读端口(A、B):读取 rA 和 rB 指定的寄存器
  • 一个写端口(E):写入 dstE 或 dstM 指定的寄存器

读取不需要时钟边沿,写入只发生在时钟上升沿。这允许在 SEQ 处理器的一个周期内完成”读取旧值 — 运算 — 写回新值”的流程。

相关笔记

链接到