最近项目遇到总线死锁问题,把问题记录下来,供大家参考。
- 现象描述
如下图所示,两个NIC400总线上的两个Master跨总线分别写两个Slave总会造成总线死锁问题。
构造仿真场景:写交易发起顺序,M1->S2,M1->S1,M2->S1 ,M2->S2。确保如下条件满足:
- M2的写地址先到达S2,写数据延后,M1的写地址和写数据在M2的写数据之前到达S2;
- M1的写地址先到达S1,写数据延后,M2的写地址和写数据在M1的写数据之前到达S1;
当上述条件满足时,总线便有可能会发生死锁。
备注:
1)BM:bus matrix,NIC400总线内部组件,负责Master/Slave一些接口特性控制、缓存等功能。
- 问题分析
前置条件:对于NIC400总线来说,即便端口配置成AXI3,也不支持写交织 。
- S2端点分析:S2对应的总线端口有个bus matrix(BM4)。首先接收到M2的写地址,随后接收到了M1的写地址和写数据。由于AXI协议规定,AWADDR需要与WDATA严格对应保序,BM4会压住M1的写数据,反压M1端口发出后续写数据,一直等待M2的写数据。
- S1端点分析:S1对应的总线端口有个bus matrix(BM1)。首先接收到M1的写地址,随后接收到了M2的写地址和写数据。由于AXI协议规定,AWADDR需要与WDATA严格对应保序,BM1会压住M2的写数据,反压M2端口发出后续写数据,一直等待M1的写数据。
通过对S1/S2端点的分析发现,S2一直等待M1的第二笔交易的写数据,但是M1的第一笔写数据由于S1的反压无法正常下发,自然无法下发第二笔写交易的写数据;S1一直等待M2的第二笔写数据,但是M2的第一笔写数据由于S2的反压无法正常下发,自然无法下发第二笔写交易的写数据。
有关上述写数据的反压,可以这么理解,假设BL=16,已经发出8拍数据,被Slave端的BM缓存压住,BM同时通过一直拉低wready信号反压Master发出后续8拍写数据。
上述总线死锁根本原因在于AXI协议规定的AW通道和W通道相互独立,NIC总线实现时AW/W分通道进行收发。当复杂系统中多master多Slave并发场景时,不可避免会出现WDATA相对于AWADDR延迟很大的情况,由于AW/W保序特性,便有可能出现总线死锁的问题。
- 解决办法
1.NIC400总线配置为了防止死锁提供三种机制:分别为SS/SSPID/SSPID+SAS。
SS:single slave,该总线端口一次只能访问一个Slave,在交易未返回响应之前,无法下发下一笔交易。访问相同Slave的outstandng能力不受限制。
SSPID:single slave per id,支持并发访问多个Slave,但不同Slave需要使用不同的ID。
SSPID+SAS:在SSPID基础上增加了SAS(single active slaver)的限制,在当前写地址对应的写数据没有发完时,下一笔写地址无法下发。此种策略强制将写地址和写数据绑定一起发送,避免了写地址和写数据分离发送,由于路径延迟导致的死锁问题。
2.针对上述死锁问题,在NIC总线配置中,将M1/M2全部配置成SSPID+SAS策略,则可以避免死锁问题。
- 总线配置思考
- 在NIC总线配置中,一个主总线上只能配置一个SSPID,其他只能配置为SS或者SSPID+SAS。相当于配置工具强制避免了在同一个interconnect中出现多master多Slave写交易死锁情况。
- 对于较复杂芯片,通常有多个子系统,这样系统中会有多个interconnect,各个子系统之间有跨总线访问需求。此时如果出现了两个以上SSPID配置(每个interconnect只有一个SSPID),在多master跨总线写多Slave时,就可能会出现上述的总线死锁问题。
- 芯片总线架构设计是个复杂的工程,需要架构师对芯片应用场景有比较明确的了解,划分子系统时尽量降低多interconnect的耦合,减少互访需求;同时单一interconnect内也需要根据不同master的访问特性进行配置,并发性要求高的配置为SSPID,无并发性要求配置为SS。但当系统中出现SSPID时,一定要慎重考虑是否存在跨总线死锁问题,如果可能存在死锁问题,需要使用SSPID+SAS策略避免。
- 对于复杂芯片系统,使用NIC总线,推荐配置多层级的总线架构,而非选择并列的总线架构。
- 当master和Slave数量增加,选择NOC总线也许是个不错的选择。NOC总线master端口对应的NIU可以配置reorder buffer来支持相同ID不同Slave的outstanding,提高并发效率;同时NOC总线内部是将AXI交易的多个通道打包成packet进行收发,天然保证了控制信息(AW)和数据信息(WDATA)一起下发,避免上述所说的死锁问题。