第 9 章:LR/SC 实现
学习目标
- 理解 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
思考:什么时候清除保留?