4.7 SEQ处理器
顺序处理器
SEQ(Sequential)处理器是 Y86-64 的顺序实现——每个时钟周期执行一条完整的指令,后一条指令必须等前一条完全结束后才能开始。
五个阶段
SEQ 将每条指令的执行划分为五个阶段,每个阶段完成特定的功能:
1. 取指(Fetch)
从内存中读取指令字节,解析出:
- icode(指令码)和 ifun(功能码)
- rA 和 rB(寄存器操作数字段)
- valC(常数字段,如果有的话)
- valP(下一条指令的地址 = PC + 当前指令长度)
2. 译码(Decode)
从寄存器文件读取操作数:
- valA:根据 rA 读取寄存器
- valB:根据 rB 读取寄存器
- 如果是 call/push,也读取 %rsp
3. 执行(Execute)
ALU(算术逻辑单元)执行实际计算:
- 算术运算:valE = valA op valB
- 地址运算:valE = valB + valC
- 条件码更新(OF, SF, ZF)
- 条件分支判断
4. 访存(Memory)
读或写内存(数据内存):
- 读:从 valE 或 valA 给出的地址读取数据
- 写:将数据写入 valE 或 valA 给出的地址
5. 写回(Write Back)
将结果写回寄存器文件:
- dstE:通常写入 ALU 结果或 valC
- dstM:通常写入从内存读取的值
更新PC
将下一条指令的地址写入 PC 寄存器,指向程序中顺序的下一条指令(或跳转目标)。
SEQ的局限
SEQ 在每个时钟周期只能完成一条指令,吞吐率为 1 CPI(每指令周期数)。虽然结构简单易于理解,但性能极低——硬件大部分时间处于空闲等待状态。流水线处理器正是为了解决这个问题而设计的。
相关笔记
链接到
- 上一个知识点:4.6 状态机
- 下一个知识点:4.8 SEQ各阶段分析
- 相关知识点:3.9 跳转指令、3.10 条件分支