读通道
单箭头为可以,双箭头为必须满足。
1.主机在发起ARVALID之前必须不等待从机发起ARREADY,即主机发起ARVALID不依赖ARREADY;
2.从机可以等待(也可以不等待)主机发起ARVALID后再发起ARREADY,即从机发起ARREADY不依赖主机ARVALID;
3.从机在发起RVALID之前必须等待ARVALID和ARREADY发起,因为要在正确接收到读地址后才能返回数据;
4.从机在发起RVALID之前不用等待主机发起RREADY,即从机发起RVALID不依赖RREADY;
5.主机可以等待(也可以不等待)从机发起RVALID后再发起RREADY,即主机发起RREADY不依赖从机RVALID。
写通道
这一版本其实应该说是AXI3的版本,因为AXI4的版本多了些条件,算是这一种版本的特殊情况。
图中WVALID上面的†代表WVALID的发起还依赖WLAST。
1.主机在发起AWVALID或者WVALID之前必须不等待从机发起AWREADY和WREADY,即相互之间不依赖;
2.从机在发起AWREADY/WREADY之前可以等待(也可以不等待)主机发起AWVALID/WVALID,即从机发起READY不依赖主机VALID;
3.从机在发起BVALID之前必须等待WVALID/WREADY/WLAST都发起了,因为BRESP要在最后一个写数据收到后才能发起;
4.从机在发起BVALID之前必须不等待BREADY发起,即从机发起BVALID不依赖BREADY;
5.主机在发起BREADY之前可以等待(也可以不等待)从机BVALID发起,即相互之间不依赖。
PS.为什么第一条规则很重要?举个例子,如果主机在发起VALID之前等待从机发起READY,而从机定义的是在发起READY之前等待主机发起READY,这样系统就会陷入死锁。
写通道(AXI4附加版)
由图可见,比上个版本多了两个双箭头,限制了条件。 这一版反映的其实是AXI3的预期版本,因为在AXI4中,必须在写地址和写数据同时被接受到后从机才会返回RESP,也就是上一个版本的第3条规则发生了改变,即从机在发起BVALID之前必须等待AWVALID/AWREADY/WVALID/WREADY/WLAST都发起。