AXI各通道握手依赖

在AXI协议中,为了防止死锁,对每个通道的握手信号(VALID, READY)做了以下规定:

  • AXI通道的发送端的VALID信号不能依赖于接收端的READY信号;
  • AXI通道的接收端可以等到VALID信号拉起来后,再拉起VALID信号;

此外,不同通道上的握手信号之间也存在依赖关系。下面三个图为读写传输依赖,单箭头指向的信号可以在箭头起始的信号之前或之后拉起。双箭头指向的信号必须在箭头起始的信号拉起之后才能拉起。

读传输依赖如下图1所示。

  • ARREADY可以在ARVALID之前或之后拉高,但是ARVALID不能等ARREADY拉高才拉高。
  • RREADY可以在RVALID之后或之后拉高,但是RVALID不能等RREADY拉高才拉高。
  • RVALID 必须在ARVALID 和ARREADY 都拉高之后才能拉高

图1 读传输握手依赖

AXI3写传输依赖如下图2所示。

  • AWREADY可以在AWVALID之前或之后拉高,但是AWVALID不能等AWREADY拉高才拉高;
  • AWREADY可以在WVALID之前或之后拉高,但是WVALID不能等AWREADY拉高才拉高;
  • WREADY可以在WVALID之前或之后拉高,但是WVALID不能等WREADY拉高才拉高;
  • WREADY可以在AWVALID之前或之后拉高,但是AWVALID不能等WREADY拉高才拉高;
  • BREADY可以在BVALID之前或之后拉高,但是BVALID不能等BREADY拉高才拉高;
  • BVALID 必须在WVALID 和WREADY 都拉高之后才能拉高

图2 AXI3写传输握手依赖

图3的AXI4和AXI5是在图2 AXI3基础上,多增加了一个约束,也就是:BVALID 必须在AWVALID 和AWREADY 都拉高之后才能拉高。之前AXI3,BVALID只需要等到WVALID和WREADY收集好就可以拉高了,不需要看AWREADY和AWVALID。

图3 AXI4和AXI5 写传输握手依赖

那么为了验证这些AXI通道握手之间的依赖,防止设计中出现不应该存在的依赖而导致死锁,合格的AXI VIP要注意必须支持READY模式:

  • ARREADY一直不拉高,直到AXI VIP收到ARVALID拉高才拉高;
  • AWREADY一直不拉高,直到AXI VIP收到AWVALID拉高才拉高;
  • AWREADY一直不拉高,直到AXI VIP收到AWVALID和WVALID都拉高才拉高;
  • WREADY一直不拉高,直到AXI VIP收到WVALID拉高才拉高;
  • WREADY一直不拉高,直到AXI VIP收到AWVALID和WVALID都拉高才拉高;
  • BREADY一直不拉高,直到AXI VIP收到BVALID拉高才拉高;

说白了其实就是为了防止设计人员在写代码时,错误地依赖收到READY信号后才会发出VALID信号。而也只有VIP支持以上的READY模式才能检查出这个bug,如果VIP的READY只是无规律的toggle,那么这种bug就几乎不可能找出来。

相关推荐
Amazinqc1 天前
Mysql数据库数据软隔离的并发死锁情况
数据库·mysql·死锁
北风朝向1 天前
springboot使用@Validated校验List接口参数
spring boot·后端·list·校验·valid
CoderMeijun18 天前
C++ 多线程进阶:Lambda、条件变量与死锁
c++·多线程·条件变量·lambda·死锁·生产者消费者
一叶飘零_sweeeet24 天前
深度剖析:Java 并发三大量难题 —— 死锁、活锁、饥饿全解
java·死锁·活锁·饥饿
weisian1511 个月前
Java并发编程--24-死锁排查与性能调优:线上并发问题诊断指南(死锁,CPU飙升,内存溢出)
java·开发语言·arthas·死锁·火焰图·cpu飙升
qq_283720051 个月前
MySQL技巧(八) :死锁解决与实战案例
mysql·索引·锁机制·顺序·死锁
Mistra丶2 个月前
记一次 JVM+Postgresql的 “死锁” 问题排查
jvm·数据库·postgresql·死锁
John_ToDebug2 个月前
WaitableEvent 跨线程等待的死锁陷阱
windows·笔记·死锁
西门吹雪分身3 个月前
JUC之可重入锁
java·juc·死锁·公平锁·非公平锁
闲人编程3 个月前
Redis分布式锁实现
redis·分布式·wpf·进程··死锁·readlock