学习目标

  • 理解原子操作
  • 实现 AMO 指令
  • 保证原子性

8.1 思考:为什么需要原子操作?

// 两个核同时执行
counter++;  // 读-改-写,不是原子的!

问题:最终 counter 的值可能错误!

8.2 RISC-V AMO 指令

amoadd.w x1, x2, (x3)  # 原子加
amoswap.w x1, x2, (x3) # 原子交换

8.3 实现

// 锁定总线
if (amo_start) begin
    bus_lock <= 1'b1;
    // 读-改-写
    bus_lock <= 1'b0;
end

思考:如何在乱序核中实现?

下一步

第 9 章:LR/SC 实现

更新时间: