计算机系统导论 · 第十讲:SEQ 顺序实现

本页目录

第四章 Lesson10
SEQ:Sequential Implementation

笔记整理自 2026 年 10 月 19 日课程 本节课讨论:具体语义是如何和机器实现结合在一起的?

硬件电路中的存储体现状态:如何保存?

1. 如何实现状态的保存?

什么是状态?

图灵机为例,是哪支笔吗?否,是纸带上信息。

相当于所有reg, 状态寄存器csr, memory构成了一个集合,经过一个函数之后仍然是这三元集合。

两条指令之间需要加一个东西来阻挡,使得状态之间的切换有明确界限。 在软件实现的时候,天然的函数就是边界,但是在硬件的实现的话,需要明确这个边界。

有了这个clock才能实现状态的保存。

2. HCL 与 SEQ 的六个阶段

来源:ICS10,2026 年 10 月 19 日,51 页。 HCL 描述组合逻辑:bool 表示布尔值,int 表示字级值。选择表达式自上而下取第一个条件为真的分支,表示多路选择器。

SEQ 在一个周期中完成一条指令:取指 F、译码 D、执行 E、访存 M、写回 W、更新 PC。阶段是同一条组合数据通路中的逻辑划分。

阶段主要信号和运算
F取 icode/ifun、可选寄存器字节、立即数 valC;求下一条顺序地址 valP
D选 srcA/srcB,读取 valA/valB,确定 dstE/dstM
EALU 求 valE;计算条件 Cnd;OPq 更新条件码
M选择访存地址和写入数据;读结果为 valM
W向 dstE 写 valE,向 dstM 写 valM
PC在 valP、valC、valM 之间选择

指令长度为 : 表示是否有寄存器字节, 表示是否有常数字段。jXX/call 为 9 字节,irmovq/rmmovq/mrmovq 为 10 字节。

课程笔记中的原始插图

3. 各类指令的数据通路

3.1. 算术、传送与有效地址

OPq rA,rB:valA=R[rA],valB=R[rB],valE=valB OP valA,写回 rB。减法计算 rB-rA。

irmovq:valE=0+valC;rrmovq:valE=0+valA。cmovXX 条件不成立时把 dstE 设为 RNONE=0xF,从而取消写回。

rmmovq rA,D(rB):valE=R[rB]+D,将 R[rA] 写到 M8[valE]。 mrmovq D(rB),rA:以相同方式求地址,读出 valM,通过 M 写端口写入 rA。

3.2. 栈与调用

指令valE内存动作PC 与写回
pushq rAR[rsp]-8M8[valE]=valArsp=valE; PC=valP
popq rAR[rsp]+8valM=M8[valA]rsp=valE; rA=valM
call DestR[rsp]-8M8[valE]=valPrsp=valE; PC=valC
retR[rsp]+8valM=M8[valA]rsp=valE; PC=valM

popq/ret 从旧栈顶读内存,pushq/call 向新栈顶写内存。popq %rsp 的两个写目的地相同,内存读出的值取得最终优先级。

4. 控制逻辑的选择依据

srcA:寄存器传送、存储、运算、压栈取 rA;弹栈和返回取 %rsp。 srcB:运算与内存寻址取 rB;栈操作、调用和返回取 %rsp。 dstM 只在装载与弹栈时取 rA。

ALU 的 A 输入分别选 valA、valC、-8 或 8;B 输入选 valB 或 0。只有 OPq 使用 ifun 指定的运算,其余需要 ALU 的指令做加法。

访存地址:装载、存储、压栈、调用选 valE;弹栈、返回选 valA。存储数据:call 选 valP,其他写内存指令选 valA。

PC 选择优先按指令语义表达:call 取 valC;成功跳转取 valC;ret 取 valM;其余取 valP。

状态码按课件顺序:地址错误 ADR、非法指令 INS、停机 HLT、正常 AOK。

5. 时钟与关键路径

周期内组合电路依次传播,时钟边沿更新 PC、寄存器、条件码与存储状态。单周期必须足够长,使取指、读寄存器、ALU、数据存储器等最长路径完成。

SEQ 的 CPI 为 1,但时钟周期长,且各功能单元只在周期的一部分时间工作。流水线通过在阶段间加入寄存器,让不同指令同时使用不同阶段。

6. 手工跟踪

若 %rsp=0x100,执行 call 0x200,当前 PC 为 0x20:valP=0x29,valE=0xf8,M8[0xf8]=0x29,新 %rsp=0xf8,新 PC 为 0x200。随后 ret 读取 0x29,恢复 %rsp=0x100 并返回 0x29。

查看原始笔记