第 8 章:原子指令
学习目标
- 理解原子操作
- 实现 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
思考:如何在乱序核中实现?