深入理解AXI协议中的outstanding/out-of-order/interleaving

这篇blog把outstanding/out-of-order 说的很清晰

深入理解AXI协议中的outstanding/out-of-order/interleaving(二)

——————————————————————————————

版权声明:

本文作者:烓围玮未。主要从事ISP/MIPI/SOC/车规芯片设计/SOC架构设计

首发于知乎专栏:芯片设计进阶之路

微信公众号:芯片设计进阶之路(x_chip)

转发必须授权,同时保留这段声明,盗版必究!

——————————————————————————————

为了详细了解,outstanding,out-of-order,interleaving对传输的影响,下面用枚举法,把各种情况进行分析。

  1. 一个master访问一个salve

规则:同一个ID:可以发送多个outstanding(OST),但是必须按照顺序回来;不同ID: 可以发送多个OST,不同ID的transaction可以乱序返回;如果不支持outstanding,那么必须等到response返回才能发下一笔命令。

如果支持outstanding,那么master可以不必等到response返回,连续发送命令。

在这里插入图片描述

2.一个master访问两个salve

一个master访问多个slave,必须有中间的BUS/NOC/仲裁器来进行仲裁,SOC中一般使用NOC, 通过不同地址区分访问的是slave0还是slave1。这里slave0和slave1的地址不能重叠,否则会导致系统出错。
在这里插入图片描述

2.1 Master写

规则:

同一个ID:可以发送多个OST,但是必须按照顺序回来;

不同ID:可以发送多个OST, 返回可以乱序;

读和写是独立通道,没有关系;

2.1.1 Master不支持outstanding

如果master不支持outstanding,那么master必须等待response回来后才能继续发下一个transaction,如下图所示:

在这里插入图片描述

发给slave0和slave1的transaction通过绿色和蓝色来区分;

由于命令和响应通道(ADDR 和RESP)占的带宽和时间都非常小,总线主要关心数据通路的效率,目标是让数据通道效率能到达最大。如上图可以看到,在master不支持outstanding情况下,DATA通路会产生很多空的“气泡”,使得总线的效率降低。

2.1.2 Master支持outstanding

如果master支持outstanding,这里假设OST=4, 那么master可以在第一个response返回前,连续发送4个命令(ADDR), 如下图所示:

在这里插入图片描述

master发给slave0和slave1总共的OST=4,所以必须在master发了ADDR2到slave0后,必须等待BRESP0返回后,才能继续发送下一个地址(ADDR1),如图中红色所示;

由于master能支持OST,可以看到数据通路的“气泡”消失了,总线利用率大大提高,而且对每个命令来说,从发送到收到BRESP的总时间也减少了。所以至少有以下三个优点:

提高了总线利用率;

减少了单个命令的延时;(前提是master能及时发送命令)

减少了对系统总线的占用时间;

2.1.3 Master不支持out-of-order

如果master不支持outstanding,那么必须等待当前命令的response返回,才能发送下一个命令,所以不存在多个response的out-of-order返回的情况。

所以支持out-of-order的前提是支持outstanding。如果master不支持out-of-order,假设一种情况如下所示:

在这里插入图片描述

这里虽然发给slave1的ADDR0(蓝色)命令比master发给slave0的ADDR1(绿色)命令晚,但是由于slave1相应比较快,所以蓝色的BRESP0比绿色的BRESP1早返回。如图中两个箭头所示。

由于master不支持接受response的out-of-order返回,master只能按照发送命令的顺序来处理

所以slave1的BRESP0返回后,master其实在等待slave0的BRESP1,在没有处理完slave0的BRESP1前,master是无法处理slave1的BRESP0,所以只能丢掉slave1的BRESP0,或者根据设计不同,可能会卡死master。

所以,如果master支持写outstanding,但是不支持写response的out-of-order返回,其实是有问题的,要么数据丢失,要么master卡死。其实对照AXI协议我们知道,写response通道的位宽比较小,只有2~3bit的数据,支持写response的out-of-order的代价其实非常小。

所以,如果AXI master支持写outstanding,那么必须支持写response的out-of-order。如果你碰到的master不支持写response的out-of-order,那这就是一个很差的设计,你有足够的理由要求设计人员重新修改设计。

顺便提一句,有很多设计人员,甚至是十几年二十年工作经验的设计人员,在设计AXI的master的时候,往往忽略写response的处理,也就是只要发送了命令和数据,不等写response返回就认为这笔传输已经完成了。这是一个非常严重的设计bug,会导致整个系统不能确实写数据是不是真的写到了最后的目的地,比如DDR。对软件使用造成了很多困扰,这里重点提醒一下。写response的处理是一个代价非常小的逻辑,在设计的时候,请务必考虑到。

2.1.4 Master支持out-of-order

Master支持outstanding和out-of-order情况下,上面的传输变成如下图所示:

在这里插入图片描述

正常传输没有任何影响,只是master需要增加一个BRESP的缓存,把乱序返回的BRESP暂存。

注意:由于AXI4去掉了写交织,而且写交织基本没有设计会使用,所以这里不讨论写交织的支持情况。

2.2 Master读

2.2.1 Master不支持outstanding

如果master不支持outstanding,那么master必须等待rdata和response回来后才能继续发下一个transaction,如下图所示:

在这里插入图片描述

2.2.2 Master支持outstanding

如果master支持outstanding,这里假设OST=4, 那么master可以在第一个response返回前,连续发送4个命令(ADDR), 如下图所示:
在这里插入图片描述

由于第一个transaction的数据在D03处已经完成,这时就可以直接发下一个命令ADDR1(蓝色)了。

2.2.3 Master不支持out-of-order

如果master不支持outstanding,那么必须等待当前命令的rdata和response返回,才能发送下一个命令,所以不存在多个response的out-of-order返回的情况。

所以支持out-of-order的前提是支持outstanding。如果master读不支持out-of-order,假设一种情况如下所示:

在这里插入图片描述

由于master不支持out-of-order,所以必须先处理slave0的D10~D13, master无法处理先从slave1返回的D00~D03数据,master要么丢掉这些数据,要么master被卡死。

所以master AXI read如果支持outstanding,一般都需要支持读数据返回out-of-order;如果实在碰到master只支持读outstanding而不支持读out-of-order,那就需要系统总线或者额外设计,把送回给master的数据进行排序,实现复杂性比较大,实际中确实也会碰到这种情况。对这种有问题的IP最好的方式还是修改IP。

2.2.4 Master支持out-of-order

Master支持outstanding和out-of-order情况下,上面的传输变成如下图所示:

在这里插入图片描述

对传输和带宽都没有影响,代价是需要master对返回的数据进行重排序或者重新分发。由于这里有可能需要对rdata进行重排,所以会增加master的开销。但是相对于系统性能,这个代价是值得的。

2.2.5 Master不支持interleaving

interleaving是一个burst内的概念,AXI的rdata可以选择支持rdata的interleaving,进一步提高性能。如果不支持interleaving,那么一个burst的数据必须按照第一个到最后一个为一个整体来返回,如下所示:

在这里插入图片描述

一个burst之内的数据,必须按照0,1,2,3这样的顺序返回。interleaving主要看slave的返回顺序,是否支持主要是slave的能力,但是也需要master支持。

2.2.6 Master支持interleaving

如果在进行AXI Read的时候支持interleaving,那么slave可以把一个burst打乱,只要其他burst的一笔数据ready了就可以返回,如下:

在这里插入图片描述

可以看到,burst间插入了其他burst的数据,这样transfer粒度的数据就被利用起来了,进一步提高了总线利用率。

但是需要slave和master都要能支持,会增加slave和master的复杂性,而且会拉长传输对系统总线的占用时间。所以个人认为AXI read支持interleaving的优势并不明显,更好的方式是slave能缓存一个burst的数据,一旦开始响应master的读,就连续的返回一个burst的数据。这样既能提高总线利用率,又能减少对系统总线的占用时间。实际中是否支持AXI read interleaving主要和IP设计相关。

到这里,我们并没有分析中间的BUS,其实实际中,连接master和slave的bus才是关键,下一篇文章会通过分析两个master访问两个slave的情况来进行详细分析。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值