学习目标

  • 理解精确异常
  • 实现 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

思考:分支预测错误如何处理?

下一步

第 16 章:寄存器重命名

更新时间: