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

乐活   2024-10-22 11:17   北京  

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

版权声明:

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

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

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

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

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

为了详细了解,outstanding,out-of-order,interleaving对传输的影响,继续进行场景分析。

在分析了各种场景下outstanding,out-of-order,interleaving的好处后,对更复杂的场景,比如soc中多master访问多个slave的情况,这些可以分解为基本场景,只是在总线部分有些差异,这些主要是总线设计的内容。

下面主要讨论一下,在支持outstanding,out-of-order,interleaving的情况下,对ID的处理。

1. 一个master访问两个salve

先分析一下一个master访问两个slave的ID使用。

假设Master OST=4, Master先给Slave0发了一个ID=0的命令,那么Master能否继续以ID=0给Slave1发送命令呢?

结论是不行:

BUS区分访问slave0还是slave1是按照地址来区分的,但是slave返回response给master的时候只有ID信息,没有address信息。所以BUS和master是没有办法来区分返回response是来自slave0还是slave1的,BUS会等到第一个ID0的response返回了,再发送第二个ID0的transaction。实际使用的系统总线比如NOC,NIC都不能支持相同ID的outstanding发给不同的slave。传输如下图所示:

可以看到,如果master只能发送一个ID的outstanding,在发送给不同slave的时候outstanding机制失效了!但是如果master是发送给同一个master,那么还是能继续发送多个transaction:

另外,提醒一下,outstanding是master在没收到response的时候,最多能发送到命令个数,实际发送多少命令还是看master的需求。

对于一个master访问两个(或者多个)slave的情况,通过以上分析我们可以得到以下结论:

  1. Master通过outstanding访问不同slave的时候,必须采用不同的ID,有多少slave就需要使用多少个ID;

  2. Master通过outstanding访问相同slave的时候,可以采用相同的ID,也可以采用不同ID;

实际在进行总线设计的时候,即需要匹配ID和outstanding个数。

2. 两个master访问两个salve

现在增加到两个master,那么两个master如果都通ID=0访问Slave0,会发生什么事情呢?BUS和Slave0无法区分传输来自master0还是master1。解决方式就是通过修改ID,给每个master增加一个唯一的master ID,如下图所示:

这样BUS传输的transaction的ID就是MID+AXI ID的组合,因为MID对整个SOC系统来说是唯一的,所以slave能精确区分命令的来源,BUS也能精确把response送给对应masters。这个方案也是大部分实际SOC采用的方案,即:给SOC中所有的master增加唯一的master ID。

至于MID+AXI ID怎么组合,可以直接把MID作为AXI ID的高位,也可以通过hash再编码,一般这个在系统BUS里处理。

这个多master访问就和单master访问多slave也是类似的,只是多master需要在bus做仲裁,可以简化为延时增大了。

3. 一个AXI传输访问两个salve

有没有可能,一个master发送一笔transaction,同时访问两个slave呢?正常情况是没有,非常特殊情况下,确实存在,比较常见的是DDR interleaving访问。除了这个外,基本上不允许一个master发送一笔transaction,同时访问两个slave的。AXI的跨4K限制就是为了限制这种情况。

但是SOC为了访问带宽,并且把带宽均分到多个DDR,一般会支持DDR的interleaving访问。也就是系统总线会主动的把一笔transaction拆分到两个DDR或者多个DDR,如下图所示:

访问每个DDR的burst大小变小了,具体大小和interleaving的分拆大小有关,这也是系统总线的核心参数。

Burst拆分会带来很多问题,比如如果顺序是A00,A01, 但是DDR0/1的响应是B01,B00返回怎么处理呢?这里BUS就需要先排序再合并后返回到master,所以这里需要增加reorder buffer。

reorder buffer基本上必备的,因为你不能保证DDR0/1响应返回的顺序,所以为了传输正确性,一定要进行重排。同样,进行读的时候也需要重排,由于读返回的是数据和response,所以reorder buffer开销还是非常大的。

关于多master访问DDR,这个是SOC设计的核心和重点,后面会专门分析,这里就先不展开了。

后记

技术很重要,技术背后的思想更重要!

技术背后的某些思想就是你解决以后问题的钥匙。我的文章可能一篇中知识点不太多,但是力求让你能深入理解,为你进阶打下基础。如果有一点点收获,也算是我对中国芯片行业的一点点贡献吧。

赠人玫瑰,手有余香。如果你有所收获,麻烦花一秒时间帮我点个赞吧,谢谢!

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

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

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


芯时代青年
专心数字前端全流程,芯时代有为青年的自我修养
 最新文章