关于AXI总线中讲到的interleaved和out of order,这两个词讲到的是不是同一种情况呢?AXI总线中的乱序传输到底指的是那种情况呢?我自己也总结了一下对AXI总线中乱序传输的情况:
1、对于写传输,同一master发出的写地址可以和写数据乱序,如m1按顺序发出两个写命令CMD1和CMD2分别访问S1和S2,此时可以先向S2发送写数据再向S1发送写数据
2、对于读传输,同一slave接收到得读地址可以和返回的读数据乱序,情况同比上例
3、对于同一master发出的写命令或者同一slave接收到的读命令,Burst间的交叉乱序传输,如m1按顺序发出两个写命令CMD1和CMD2,写数据时可以在CMD1的数据没有发完的情况下就发送CMD2的数据
不知道这几种情况是否是之前提到的interleaved或者out of order呢?
本人初学AXI,这些概念没有搞的太懂,特此请教各位大虾指点迷津
:loveliness::loveliness::loveliness::loveliness::loveliness:
1、对于写传输,同一master发出的写地址可以和写数据乱序,如m1按顺序发出两个写命令CMD1和CMD2分别访问S1和S2,此时可以先向S2发送写数据再向S1发送写数据
2、对于读传输,同一slave接收到得读地址可以和返回的读数据乱序,情况同比上例
3、对于同一master发出的写命令或者同一slave接收到的读命令,Burst间的交叉乱序传输,如m1按顺序发出两个写命令CMD1和CMD2,写数据时可以在CMD1的数据没有发完的情况下就发送CMD2的数据
不知道这几种情况是否是之前提到的interleaved或者out of order呢?
本人初学AXI,这些概念没有搞的太懂,特此请教各位大虾指点迷津
:loveliness::loveliness::loveliness::loveliness::loveliness:
简单说了,乱序是salve返回master请求的out of order特性,但这个slave可以是广义上的,一般总线会完成这个功能;而间插(interleave)是指写数据,或是读返回数据,按找不同ID交织出现。比如:ID0 ID1 ID0 ID1....。乱序和间插都有深度,一般乱序深度比间插大的多。上面那个例子就是间插深度为2的情况。
虽然axi总线协议中支持乱序交易,但实际应用中极少会涉及,因为要支持这种协议对系统中的主机和从机的硬件要求都比较高。基于ARM的SOC设计中跟少用到,arm9不支持AXI总线就不用说了,ARM11也不支持transaction ID信号,而且现在常用的一些IP也不支持乱序交易。所以对于初学者没必要老纠结在这个问题上。:P
简单讲,如果没有outstanding,或者说outstanding能力为1,则AXI Master的行为如下:
读操作:读地址命令->等待读数据返回->读地址命令->等待读数据返回->读地址命令->等待读数据返回。。。。。
写操作:写地址命令->写数据->等待写响应返回->写地址命令->写数据->等待写响应返回。。。。。(如果支持out-of-order,对于AXI3,写命令和写数据不一定有先后顺序且ID顺序不一定相同,AXI4因为已经没有WID信号,所以写数据的顺序要和写地址的顺序一样)
而如果outstanding能力为N>1的话,则:
读操作:可以连续发N个读地址命令,这期间如果读数据没有返回,则需要需要等待读数据返回,如果有读数据返回,则返回了几个,那么仍然可以接着发几个。也就是说,“在路上” 的读命令(或者读数据)最多可以是N。多说一点,可以看出,如果数据返回得比较慢,那么IP需要等待,效率就会比较低,因此,为了提高效率,有必要提高outstanding能力,以弥补”路上“(总线)引入的延时。但是也不能无限制地发,有可能会引起总线拥塞,把其他IP给堵住。
写操作:可以连续发出N组写地址(写数据)命令,这期间如果写响应没有返回,则必须等待写响应返回才能接着发写地址(写数据)命令,如果有写响应返回,则返回了几个,那么仍然可以接着发几组。也就是说,“在路上” 的写响应最多可以是N。
以上是个人理解,如果有不对的地方,还请指正。