• 正文
  • 相关推荐
申请入驻 产业图谱

NIC-400总线死锁分析和解决

04/28 16:01
506
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

ARM的NIC-400是一款通用的总线互联IP。单个NIC-400支持:

1~128个master接口(AXI3、AXI4、AHB-Lite master

、APB3、APB4等)

1~64个slave接口(AXI3、AXI4、AHB-Lite slave等)

AXI和AHB-Lite的地址位宽支持32-64 bits,数据位宽支持32、64、128和256 bits。

NIC-400的具体介绍参见:Crossbar总线互联 -- NIC-400介绍。本文主要介绍NIC-400的死锁分析和解决方法。

1. NIC-400死锁类型

NIC-400死锁分为2大类:response乱序死锁和AW-W死锁。

1. response乱序死锁

AXI事务是根据相同ID来保序的。即:相同ARID的事务必须按照请求发送的顺序来返回rdata。相同AWID的事务必须按照按照请求发送的顺序来返回响应。

因此,response乱序导致死锁需要同时满足以下条件:

    有两个及以上的master,两个及以上的slave;slave可以乱序回响应;master可以发送多个outstanding读、或多个outstanding写;master会给不同slave发送相同AXI ID。

死锁示例如下:


有两个master和两个slave,所有的事务都是相同ID的读事务。由于NIC400会进行ID扩展来区分不同的master,因此这两个master发的请求经过NIC400后是不同ID的。访问顺序如下:

    Master 0发送一个读请求给Slave A;Master 0发送一个读请求给Slave B;Master 1发送一个读请求给Slave B;Master 1发送一个读请求给 Slave A。

死锁形成分析:

    Master 0必须先收到来自Slave A的响应;Slave A乱序回响应,先给Master 1发送响应;Master 1必须先收到来自Slave B的响应;Slave B必须先给Master 0回响应;从而形成死锁。

2. AW-W死锁

支持写数据交织(interleaving)的AXI3和不支持写数据交织的AXI4都有可能产生AW-W死锁。

产生AW-W死锁的条件为:

1)1个master和1个target之间有多条路径;

2)写outstanding大于1;

3)路径上有retiming组件,例如register slice。

下图是一个AW-W死锁示例。


访问顺序如下:

1. Master 0通过一条路径发送写请求A给Slave;

2.写请求A由于retiming组件被delay;

3.Master 0通过另一条路径发送写请求B给Slave;

4.Slave先收到写请求B,后收到写请求A;

5.根据AXI协议,Master 0必须先发送写请求A的写数据A;

6.Slave不能接收写数据A,因为它先收到的是写请求B;

7.由于写数据A没有被接收,写数据B会被阻塞,从而形成死锁。

此外,有环路也会产生AW-W死锁,如下图,图中的Slave/Master既有slave口也有Master口:

访问顺序如下:

1.Master 0发送一个写请求给Slave/Master;

2.Master 0发送一个写请求给slave A;

3.Slave/Master发送一个写请求给slave A;

4.在Slave/Master能接收来自Master 0的写数据之前,slave A必须接收写数据。

假设Master 0先把数据发送给Slave/Master,并且Slave/Master没有足够的buffer,那么会产生环路死锁:

1.Master 0必须先发送写数据给Slave/Master;

2.Slave/Master只能把写数据发给Slave A,并且不能存下来自Master 0的整个事务;

3.Slave A必须先接收来自Master 0的写数据;4.产生死锁。

在多个interconnect中也会产生AW-W死锁,如下图,有3个interconnect。


访问顺序如下:1.M0发送一个写请求到S1(请求阻塞在retiming slice中);2.M0发送一个写请求到S0,请求被接收;3.M1发送一个写请求到S0,请求被接收;4.M1发送一个写请求到S1,请求被接收;5.S1接收来自M0的写请求。

会产生以下环路死锁:

    S1必须先接收来自M1的数据;M1只能先发送数据给S0;S0必须先接收来自M0的数据;M0只能发送数据给S1;导致死锁。

2. NIC-400死锁解决方法

NIC400制定了一些规则来防止死锁。每个ASIB都可以配置不同的CDAS(Cyclic Dependency Avoidance Schemes)。对于读和写事务,采用了相同的CDAS方案,但它们是独立运行的。NIC400支持三种方法来解决死锁:Single Slave (SS)、Single Slave per ID (SSPID)、Single Active Slave (SAS)。

1. Single Slave(SS)

对于一个ASIB,所有outstanding的读事务必须是访问同一个目的地,所有outstanding的写事务必须是访问同一个目的地。

SS可以解决以上所有死锁问题,且对面积和时钟频率的影响比较小,但是对性能影响很大(当master期望outstanding访问不同的target时),需要慎重使用。

2. Single slave per ID(SSPID)

对于一个ASIB,所有相同ID的outstanding的读事务必须是访问同一个目的地,所有相同ID的outstanding的写事务必须是访问同一个目的地。

如果master想要发送同ID的访问某个target的事务,需要等之前同ID的访问其他target的事务收到响应,才能发送出去。

SSPID对面积影响较大,面积主要取决于ID位宽、outstanding大小、target数量等。

3. Single Active Slave(SAS)

如果有到其他master接口的写数据未发送完,那么到当前这个master接口的AW请求会被阻塞。可以用来避免AW-W死锁。

一般可以选择SAS+SSPID的配置,就可以解决以上死锁问题了。

除了NIC400提供的这几种死锁解决方法,用户也可以通过re-order buffer等方法来避免一些死锁依赖问题。

参考:

1. Arm CoreLink NIC-400 Network Interconnect TRM

2.https://zhuanlan.zhihu.com/p/347874698?share_code=1cXzYekHo9BMo&utm_psn=2023890831623430726

Arm

Arm

ARM公司是一家知识产权(IP)供应商,主要为国际上其他的电子公司提供高性能RISC处理器、外设和系统芯片技术授权。目前,ARM公司的处理器内核已经成为便携通讯、手持计算设备、多媒体数字消费品等方案的RISC标准。公司1990年11月由Acorn、Apple和VLSI合并而成。

ARM公司是一家知识产权(IP)供应商,主要为国际上其他的电子公司提供高性能RISC处理器、外设和系统芯片技术授权。目前,ARM公司的处理器内核已经成为便携通讯、手持计算设备、多媒体数字消费品等方案的RISC标准。公司1990年11月由Acorn、Apple和VLSI合并而成。收起

查看更多

相关推荐