计算机组成¶
杂项知识¶
Amdahl 定律
思想
摩尔定律、抽象、普遍情况、并行、流水线、预测、存储器层次、冗余
指令速度计算
算术¶
乘法器
除法器
浮点数
浮点加法器
汇编¶
RISC-V 指令及格式
寄存器标识
除了 x0-x31
,还会用其他标识标记寄存器的用途,常见的有:
a0-a7
(x10-x17
):函数参数ra
(x1
):返回地址sp
(x2
):栈指针t0-t6
(x5-x11
):临时寄存器,被调不保存s0-s11
(x8-x18
):保存寄存器,如果使用了则需要保存
Apr.16¶
回顾单周期¶
R 型数据通路¶
- ALU 前的 MUX:ALUSource,
- Mem 后的 MUX:控制是两位,除了内存和 ALU 结果还有可能为 PC+4(JAL 指令)
- Read 置 0 的原因:与 Cache 有关,会造成中断
- Write 置 0 的原因:不破坏数据
I 载入¶
rs + rd + imm
S 存储¶
rs + rs + imm,数据 + 地址 + 偏移量
SB 跳转¶
用 ALU 中的 Zero 判断是否跳转
注意 shift 1
J 无条件跳转¶
用单独的 ALU 计算 PC + imm << 1 的值。
重点¶
不同指令控制位的取值(ALUSrb、MemToReg 等)。
ALUOpcode 由 Opcode(Control)解出和几个 Func 字段共同决定(ALUCtrl)。
考试¶
OPcode、Func、寄存器编号之类的不需要记,会给
流水线¶
五级:Instruction Fetch、Instruction Decode & REGister read、EXecute、MEMory、Write Back
此时 CPI 是平均值,不断趋近于 1。
冒险 Hazard¶
Structure Hazard、Data Hazard、Control Hazard
- Data Hazard
- buble
- Forwarding:无法解决 Load-Use 问题,可以通过编译指令调度进行。
- Control Hazard
- Stall:分支在 IF 阶段无法知道结果,肯定需要等待
- Branch Prediction
流水线寄存器¶
从右往左的数据流会造成冒险。需要保存数据。
- MEM 和 WB 会往回走,造成控制冒险和数据冒险。
- 注意到 WB 写寄存器同时还需要地址和数据,这些数据也需要寄存,为流水线寄存器。
- 注意 WB 的地址和数据应该随着该指令的执行被逐个阶段向下传递,最后确定 WB 时又传回来。
每两个阶段之间的寄存器用两个阶段命名,为:IF/ID、ID/EX、EX/MEM、MEM/WB。
知道这些阶段需要存什么。
知道 Single-clock-cycle