一、不同axi传输类型总结表
传输类型 | 含义 | 解释 | 效果 |
burst transfer 突发传输 | master发送控制信息和首地址信息给slave,slave根据这些信号计算接下来的地址信息。 | 一拍地址和控制信息,操控多拍数据的读出/写入,减少了地址反复握手带来的延迟。 | 提高单笔数据的传输效率 |
outstanding transfer 超前传输 | 前一次burst传输还没完成时,就开始下一次数据传输 | 一次握手,发送10个burst,减少burst握手带来的时间损耗;主设备发送10个地址和控制信号,缓存起来,1个burst结束后马上执行下一个 | 前一次burst传输还没完成时(还没收到slave发来的response),就开始下一次数据传输; 减少了因为burst提升同一从设备多笔burst传输的效率 |
out-of-order transfer 乱序传输 | 前一次传输还没完成时,就开始下一次数据传输,且数据返回的顺序和地址顺序不同 | 提高多个从设备传输效率 | |
interleaving transfer 交织传输 | 前一次传输还没完成时,就开始下一次数据传输,且数据返回的顺序和地址顺序不同,不同地址的数据可以交替出现 | 在乱序的基础上支持不同ID间数据的乱序,而相同ID的数据还是顺序返回的,不同ID之间才有交织传输。 out of order与interleaving的区别在于前者是transaction粒度的乱序,而后者是transfer粒度的乱序 |
二、outstanding传输
形象得描述一下outstanding传输是什么?
假设master是仓库大叔,slave是快递小哥。大叔需要在今天从仓库里搬20件东西让快递小哥搬走。
非outstanding传输时,大叔把东西1拿出来,等小哥把东西1装进去箱子后,再继续去拿东西2;
也就是大叔拿东西1——>小哥装东西1——>大叔拿东西2——>小哥装东西2——>...大叔拿东西20——>小哥装东西20。
这样有两个坏处:
- 这大叔不得被小哥打shi……效率太低
outstanding传输时,大叔可以在准备好的时候一次性把20件东西全部拿出来,让小哥慢慢把东西装进箱子里。也就是大叔拿东西1、2、...20——>小哥装东西1、2...20。
如何理解outstanding是针对master这句话?
对于一般的读传输,master发送完读地址后,需要等到读数据返回后,才会再一次发送下一个读地址;
对于一般的写传输,master发送完写地址和数据后,需要等到写响应返回后,才会再一次发送下一个写地址和数据的发送;
而outstanding传输时,master可以不需要等待上述的读数据或者写响应返回,就直接开启下一次传输。master是outstanding发起的主体,所以说outstanding是针对master。
上一笔transaction没传输完,下一笔就开始。那怎么区别数据属于哪一笔transaction?
根据W或者R通道的last信号或者response通道的信号即可区分。
outstanding需要master和slave同时支持时才能实现最大传输效率。那如果slave不支持呢?
slave可以通过Axready信号来阻止master的outstanding传输。
如果master发送trans 0后又紧接着发送trans1, slave可以通过将Axready信号拉低,来阻止master的outstanding传输。此时master会讲trans 1保留在总线上,等待slave接受。
等到slave接收完rdata 0后,slave再拉高Axready,表示可以接收master的下一笔传输。
如何实现outstanding?
既然outstanding是针对master的,那么实现outstanding也就需要master来做好准备。具体就是,master需要给多个还没有被slave响应的burst传输准备一片缓存,来保存还没有发送出去的burst传输的地址和控制信号。
因此,outstanding的能力就通过这片缓存的深度来实现。缓存深度越大,能力越强。
三、out of order传输
如何理解乱序out of order是针对slave这句话?
master发起outstanding传输给多个slave时,会有多笔burst传输启动(以master读slave为例)。这几笔burst传输是有先后的,比如先给slave 0发送了一笔transaction 0,再给slave 1 发送了一笔transaction 1。如果是允许out of order的话,并且slave 1比slave 0更早把数据准备好,那么就允许后发送的slave 1先返回数据。
所以说乱序是针对slave而言的。
其实针对slave,也就是针对transaction事务的,反正就不是针对master的。也就是说,多个master可以发起不同的事务,单个master也可以。
乱序是如何实现的?
需要通过不同的AXID来保证。
如果AXID是相同的,那么就没有办法乱序,因为一旦乱序了,你也不知道怎么谁是谁。所以相同的AXID,需要顺序返回。
那问题来了,master进行outstanding传输时,发出了几个AXID相同的读的burst,master怎么知道返回来的transaction是先发的还是后发的呢?
估计有个记录地址的地方。发第一个就先记录一下。
为何取消写乱序?
outstanding传输与out of order的区别?
四、interleaving传输
ref:
1.AXI中的传输类型——图文解释(Burst / Outstanding / Out-of-order 等)_axi outstanding-CSDN博客2.AXI协议一些定义的区分_outstanding和out of order有什么区别-CSDN博客
4.Out standing、Out of order、Interleaving详细介绍_out of order outstanding-CSDN博客