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 处理器的一个周期内完成”读取旧值 — 运算 — 写回新值”的流程。
相关笔记
链接到
- 上一个知识点:4.4 存储器和时钟
- 下一个知识点:4.6 状态机