学习目标

  • 理解 LR/SC 机制
  • 实现保留集
  • 构建同步原语

9.1 LR/SC 指令

lr.w x1, (x2)      # Load Reserved
sc.w x3, x4, (x2)  # Store Conditional

SC 成功返回 0,失败返回非 0。

9.2 实现

reg [31:0] reservation_addr [1:0];
reg reservation_valid [1:0];

// LR
if (lr_exec)
    reservation_addr[core_id] <= addr;

// SC
if (sc_exec) begin
    if (reservation_valid[core_id] && 
        reservation_addr[core_id] == addr)
        sc_result <= 0;  // 成功
    else
        sc_result <= 1;  // 失败
end

思考:什么时候清除保留?

下一步

第 10 章:内存序

更新时间: