“工程实现仍会受到缓存、分支、流水线和内存层次影响,Word RAM 不试图预测这些常数。若要落实一次字操作的实际行为,可先用指令集状态机固定寄存器与字节内存的转移,再在明示的五级教学流水线中…”
形式陈述
先固定程序能观察什么
指令集架构(ISA)给出机器指令对架构状态的作用。本页选取 RISC-V 文档 v20260120 中 RV32I 2.1 的 add/addi/lw/sw/beq,定义正常执行教学片段:状态为
记
| 指令 | 数据效果 | 下一 PC |
|---|---|---|
add rd,rs1,rs2 |
||
addi rd,rs1,imm |
||
lw rd,imm(rs1) |
||
sw rs2,imm(rs1) |
把 |
|
beq rs1,rs2,off |
两寄存器位串相等时跳转 | 相等为 |
这里 load/store 的 off 是从B格式重组并符号扩展得到的有符号偶数字节偏移。本页例子不触及地址环绕。
直觉
ISA 描述“一条指令完成后,该看见什么”,不描述指令内部必须经过几级,也不承诺每条指令只花一周期。抽象机器的状态—转移思想在这里具体化为可编码的寄存器和内存动作。
定宽模加法决定算术结果,控制流决定下一条指令地址,两者都属于架构契约。缓存标签、旁路多路器和流水级寄存器是实现状态;程序通常不能把它们直接当 ISA 寄存器读写。
例子与边界
按一条指令一次转移复算
初始
0x00: lw x2,0(x1)
0x04: add x3,x2,x2
0x08: sw x3,4(x1)
0x0c: beq x3,x0,+8
0x10: addi x4,x3,-1
五次顺序转移分别得到:[14,0,0,0];分支不跳、PC成为 0x14 定义成一条 halt 指令。
若初始被加载的字为零,前三条数据结果也为零,分支便从自身PC
x0 丢弃结果,不丢弃操作
add x0,x1,x1 完成后 lw x0,0(x1) 仍是一次 load;在完整 ISA 中,不能因目的寄存器为零便取消应有的异常或其他规定效果。本页仅排除了这些特殊情形,没有把它们定义成不存在。
推论与应用
单周期数据通路和五级流水线可实现同一份转移契约。比较二者的正确性应比较正常执行的指令效果,而不是要求每个内部时钟边沿都对应一次 ISA 转移。
Word-RAM提供另一种目的的抽象:它为字级操作计分析成本。ISA 页固定可执行行为,流水页固定教学时序,成本模型固定计费方式,三者不可互相代替。
参考资料
- RISC-V International,RV32I Base Integer Instruction Set, Version 2.1,固定文档版 v20260120,§1.1.1、§1.1.4–1.1.6;本文只取五条指令的正常执行子集。
- David A. Patterson and John L. Hennessy, Computer Organization and Design RISC-V Edition, 2nd ed., 2021,Chs. 2, 4。小端、有效地址范围和片段停止方式是本文明示的教学环境选择。