讲个AXI死锁场景

分享个AXI死锁场景,如下图所示,假如Master是CPU,Slave是AXI转AHB的桥。

Master往下游发起两笔读操作,每一笔都是读完整的cache line数据,但内部只有一个read buffer来存储返回的数据,大小为1个cache line。因此Master必须先缓存R1的数据,然后再缓存R2的数据,所以Master暂时不接收R2的数据了。

Master 在收到R1的数据并放到read buffer后,会先拉低Rready信号,等到read buffer的数据放到cache中对应的set/way位置后,再拉高Rready信号,表示read buffer可以继续接收数据。但由于要放入的set/way是dirty数据,所以Master需要先把set/way原先的数据写回下游,所以master发起了W1写操作。

W1写请求被slave收到后,发现前面R2的操作还没有完成,因为R2的数据还没有被Master收下,这样W1也就无法完成了。

这样一个死锁环就形成了。Read buffer中的R1需要CPU cache腾出某set/way的空间->CPU cache在腾该set/way的写操作无法被slave接收->slave之所以不接收,是因为slave发现R2还没有做完->R2之所以没有做完,是因为CPU master无法接收R2的数据了->CPU master之所以无法接收新数据,是因为read buffer被R1占据了。

那么这种死锁环可以怎么验证出来呢?

常见的方式是在Slave测挂的AXI slave VIP去测Master CPU时,要在AXI slave VIP内实现读请求永远优先于写请求的机制模式。

相关推荐
智码看视界1 天前
Day84-Arthas诊断实战:CPU飙高/死锁/内存泄漏排查三板斧
jvm·内存泄漏·arthas·死锁·性能诊断·生产调优
for_ever_love__1 天前
MySQL 锁与死锁讲透:行锁、间隙锁、Next-Key Lock 与排查方法
mysql·lock·行锁·死锁·间隙锁·排查·next-key
~木雨2 天前
Java 线程从生到死:创建三式、六态流转、中断协作与死锁活锁饥饿,一篇讲透
java·java并发·虚拟线程·死锁·线程状态·中断机制
utmhikari7 天前
【DIY小记】解决散热问题提升超频性能的经验
性能测试·cpu·硬件·bios·超频·主板·风道
炎龙铠甲会合体10 天前
从 SPEC 到上板:在 Zynq-7020 上用 RTL 手写一个 YOLO 卷积加速器(完整教程)
yolo·fpga开发·axi·芯片验证
键盘会跳舞1 个月前
【C++多线程】死锁诊断工具实战:从 Windows 到 Linux 的全链路排查
linux·c++·windows·死锁
ly76891 个月前
深入解析 MySQL 间隙锁:从加锁规则到死锁案例
数据库·mysql·死锁·间隙锁·next-key lock·事务隔离
Felven1 个月前
Intel Core Ultra X9 388H全面性能对比分析报告
cpu·gpu·intel·性能对比·amd
SDWAN_Cheap1 个月前
CPU与GPU的区别及应用场景详解
cpu·gpu