第 15 章:ROB 重排序缓冲
学习目标
- 理解精确异常
- 实现 ROB
- 保证顺序提交
15.1 思考:乱序执行的问题
div x1, x2, x3 # 异常!
add x4, x5, x6 # 已经执行完了
如果 div 异常,add 的结果要撤销!
解决方案:ROB(Reorder Buffer)
15.2 ROB 结构
typedef struct {
logic valid;
logic ready;
logic [5:0] dest;
logic [31:0] value;
logic [31:0] pc;
} rob_entry_t;
rob_entry_t rob [31:0];
reg [4:0] rob_head, rob_tail;
15.3 提交逻辑
if (rob[rob_head].ready) begin
reg_file[rob[rob_head].dest] <= rob[rob_head].value;
rob_head <= rob_head + 1;
end
思考:分支预测错误如何处理?