——————————————————————————————
版权声明:
本文作者:烓围玮未。主要从事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的情况,通过以上分析我们可以得到以下结论:
Master通过outstanding访问不同slave的时候,必须采用不同的ID,有多少slave就需要使用多少个ID;
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
——————————————————————————————