常常是最后一把钥匙打开了门。
-- 钱学森
前面说到AXI的五个通道是独立的,但通道间必须保持一定的约定关系:
- 写回复必须在一次写事务的最后一个写数据之后
- 读数据必须在接收到读地址信号之后
- 通道间握手必须满足一定的依赖关系
前两条好理解,重点看一下第三条。之前讲过,为了避免死锁,协议规定发送方的VALID不能依赖接收方的READY;反过来,接收方的READY可以等待,也可以不等待发送方的VALID。当发生一次读传输时,读地址通道中,主机(master)是发送方,而从机(slave)是接收方;在读数据通道中,主机是接收方,从机是发送方,这时的依赖关系是:
- 主机不可以等待从机置起ARREADY以后,来决定是否置起主机的ARVALID
- 从机可以等待主机置起ARVALID之后置起ARREADY
- 从机可以在主机置起ARVALID之前置起ARREADY
- 从机必须等待主机置起ARVALID 和从机置起ARREADY 之后,才可以置起RVALID
- 从机不可以等待主机置起RREADY,来决定是否置起从机的RVALID
- 主机可以等待从机置起RVALID之后置起主机的RREADY
- 主机可以在从机置起 RVALID 之前置起主机的RREADY
读传输的依赖关系也可以参考下图,其中,单头箭头表示其指向的信号可以在箭头起始信号置起之前或之后置起,也就是说被指向的信号不依赖起始信号;双箭头表示其指向的信号必须在箭头起始信号置起之后置起,也就是说被指向的信号必须依赖起始信号。
对于写传输来说,在写地址和写数据通道上,主机是发送方,从机是接收方;在写响应通道,主机是接收方,从机是发送方,这时的依赖关系是:
- 主机不可以等待从机的AWREADY和WREADY,来置起主机的AWVALID和WVALID
- 从机可以等待主机置起AWVALID和WVALID之后置起从机的AWREADY
- 从机可以在主机置起AWVALID和WVALID之前置起从机的AWREADY
- 从机可以等待主机置起AWVALID和WVALID之后置起从机的WREADY
- 从机可以在主机置起AWVALID和WVALID之前置起从机的WREADY
- 从机必须在主机置起WVALID和WREADY之后,才可以置起BVALID,从机必须等待主机置起WLAST之后,才可以置起BVALID
- 从机不可以等待主机置起BREADY之后再置起BVAILD
- 主机可以等待从机置起BVALID之后置起BREADY
- 主机可以在从机置起BVALID之前置起BREADY
上面听起来有点像绕口令,其实记住一个大原则就好:发起方不能挑事,接收方有自主权。
在AXI4和AXI5中,写传输增加了额外的从机置起 BVALID 信号所需的依赖,从机必须等待AWVALID,AWREADY,WVALID和WREADY。比起AXI3,BVALID还要依赖于AWVALID和AWREADY。从机要等写地址和写数据都完成以后才可以返回写响应,这在道理上是对的。但是,一般而言,写数据会在写地址前完成。
VALID/READY握手机制是AMBA中一个很重要的机制。正是因为有了这个机制,发送方和接收方都有能力控制传输。协议中花费了大量篇幅来描述VALID/READY。
今天事情有点多,就少写一点吧\~\~
【未完,待续】
作者:老秦谈芯
来源:https://mp.weixin.qq.com/s/hPGTRah\_3Z9qFco1mr7ggA
相关文章推荐
更多AMBA协议相关知识请关注Arm AMBA 协议集专栏。