关于AXI协议,很多人都会提到interleaving、reorder、out of order等概念,但是很少有人能将三者之间的关系讲明白,本人从业多年,今天就来谈一谈自己的理解。
其实,AXI原协议中并没有给这几个概念做明确的定义,应该是看协议的人自己从文档中提炼出来的词汇,叫的多了,好像就变成了专业词汇,就好像世间本无路,走的人多了,就变成了路,是一个道理。既然大家现在都这么叫,那我们今天也姑且按照这样的定义来解释。
interleaving:间插,或交织,不同人翻译过来叫法不一,读事务和写事务都会涉及到这个概念。对于读来说,就是读数据通道在返回response时,两个不同的RID的rdata交织在一起;对于写来说,是指两个不同的WID的wdata交织在一起。如下图,其中AX0、AX1、AX2的ID分别是0,1,2:
首先,对于写事务来说:
因为interleaving需要通过ID来实现,所以只有AXI3支持写interleaving,AXI4以后,协议删掉了WID信号,所以也就不再支持写interleaving,但是读interleaving还是支持的。
interleaving针对的是不同的ID,而ID相同的transaction内部数据必须严格保序,即ID都是0的写数据之间必须保序。
对于写interleaving,还有一点要注意,虽然不同的WID之间的写数据可以间插或交织,但是第一拍写数据的顺序必须和写命令的顺序保持一致,即对于上图写事物来说,W00,W10和W20必须保序,不能颠倒,例如不能出现W00,W20,W10或者W10,W00,W20这样的顺序。
要实现interleaving,首先master要能够发出interleaving的命令,其