SoC芯片中的总线互联一般有以下3种类型的拓扑:crossbar、ring、mesh。crossbar拓扑适合小型系统,ring拓扑适合中等规模的系统,mesh适合大规模的系统。
本文介绍一种crossbar互联 -- ARM的NIC-400 IP。
1. NIC-400概述
ARM CoreLink NIC-400是一款通用的总线互联IP。可以使用NIC-400创建一个完整的高性能、优化的、兼容AMBA的网络互联,因为它是高度可配置的。NIC-400的配置可以从一个桥接组件到一个复杂的互连。例如,从AHB到AXI协议转换桥,到由多达128个master和64个slave组成的复杂互连。
注意:NIC-400不桥接电源域、电压域和地理(geographic)域。
NIC-400配置可以由具有许多拓扑选项的多个switch组成。下图显示了NIC-400的顶层框图,其中包含多个:
Switches
AMBA Slave Interface Blocks (ASIBs)。
AMBA Master Interface Blocks (AMIBs)。
单个NIC-400支持:
1~128个master接口(AXI3、AXI4、AHB-Lite master、AHB-Lite mirrored slave、APB3、APB4)
1~64个slave接口(AXI3、AXI4、AHB-Lite slave、AHB-Lite mirrored master)
AXI和AHB-Lite的地址位宽支持32-64 bits,数据位宽支持32、64、128和256 bits。
分层的时钟门控(clock gating)
单周期的仲裁
灵活的时序收敛配置
不支持写数据交织(interleaving)
2. NIC-400功能介绍
2.1 NIC-400接口
AXI3和AXI4的slave接口支持接收1~32个写transaction、1~127个读transaction。如果ASIB里有一个full register slice,那么接收能力会增加2;如果ASIB里有一个forward register slice,那么接收能力会增加1。
AXI3和AXI4的master接口支持1~32个写outstanding。注:如果没有看到对应的写数据,AMIB前面的switch模块不会发送超过两个的写地址transfer。这样可以减少switch里的逻辑,并提升系统QoS,不会影响写通道的吞吐。
AXI3和AXI4的master接口支持1~127个读outstanding。注:当没有AXI3和AXI4的转换,且没有downsize和upsize的位宽转换时,可以将master接口的读outstanding能力配置为0,这表示master接口的读outstanding是无限大的。
APB master接口可以配置为APB2、APB3或APB4。APB接口的地址和数据的位宽固定是32 bits。
此外,NIC400支持的低功耗接口如下,即C channel,用来进行clock gating,从而降低功耗。
2.2 NIC-400操作
NIC400支持数据位宽扩展(upsize)。upsize功能能够按照1:2、1:4、1:8的比例来扩展数据宽度。upsize只对cacheable的写或读事务打包数据。本节介绍不同的burst类型和接收能力的打包规则,适用的定义如下:
- 对齐的输入burst是指在互联将地址对齐到传输size之后,将地址对齐到输出数据宽度的字(word)边界。非对齐的输入burst是指互联没有将地址与输出数据宽度的字边界对齐,即使在将地址与传输大小对齐后也是如此。如果一个事务直通(pass through),这意味着upsize功能不会改变输入事务的size和类型。
在本节的示例中,除非另有说明,否则输入数据宽度为64位,输出数据宽度为128位。
INCR burst:互联将在单个输出数据宽度内的所有输入INCR burst转换为可能的最小size的INCR1。它将INCR burst打包成可能的最佳size的INCR burst。下表展示了NIC在增大INCR burst时如何转换INCR burst。(注:burst传输不会合并)
WRAP burst:所有的WRAP burst要么作为未转换的WRAP burst传递,要么转换为输出总线的一个或两个INCR burst。表2-6显示了如何将WRAP burst从64位放大到128位,即1:2的比例。
Fixed burst:所有Fixed传输是pass through的,即不做转换。
downsize功能
downsize能够按照2:1、4:1、8:1的比例来减少数据宽度。如果事务为non-cacheable,则downsize功能不会合并比目标总线更窄的数据。
NIC-400会将处于输出数据总线最大有效负载大小范围内的INCR burst转换为一个INCR burst。而那些大于输出数据总线最大有效负载大小的INCR burst则会被转换为多个INCR burst。
NIC-400总是会将WRAP burst转换为长度为原长度两倍的WRAP burst,直至达到 WRAP16的输出数据宽度最大值。在这种情况下,它会将WRAP burst视为两个INCR burst,每个INCR burst均可映射到一个或多个INCR burst上。
NIC-400能够将FIXED burst转换为一个或多个INCR1或INCRn类型的burst,具体转换方式取决于缩小比例。
2.3 FIFO和clocking功能
如果将NIC-400配置为时钟频率转换桥,则还需要配置FIFO功能。此外,即使采用的是1:1的时钟比,也可以配置FIFO功能。
用户可以在任何通道上例化一个FIFO。可以对FIFO进行配置,以实现缓冲和时钟域跨越的功能:包括SYNC 1:1、SYNC 1:n、SYNC n:1、ASYNC、SYNC m:n。
NIC-400会自动确定FIFO的宽度为最宽的数据包的宽度。用户可以将FIFO的深度配置为2到32之间。
2.4 仲裁功能
可以给NIC-400的所有仲裁节点设置仲裁算法。在入口处,所有事务都会分配一个local QoS,可以对其进行配置,使其为:
- 静态的。可编程的。从所连接的master接收到的,仅针对AXI。
在任何仲裁节点上,具有不同QoS的事务都存在固定的优先级。QoS值越大,优先级越高。如果在仲裁节点上有相同QoS且需要仲裁的事务,则使用最近最少使用算法(LRU,Least Recently Used)来仲裁。
2.5 NIC-400死锁处理
Cyclic Dependency Avoidance Schemes (CDAS):由于AXI协议允许乱序,因此NIC400需要制定规则以防止死锁,当将多个事务从NIC400的入口点(即在slave接口处)同时路由到多个slave设备时可能会有死锁。
每个ASIB都可以配置不同的CDAS。对于读和写事务,都采用了相同的 CDAS方案,但它们是独立运行的。NIC400支持三种方法来解决死锁问题:Single Slave (SS)、Single Slave per ID (SSPID)、Single Active Slave (SAS)。
Single Slave(SS):对于一个ASIB,所有outstanding的读事务必须是访问同一个目的地,所有outstanding的写事务必须是访问同一个目的地。SS对面积和时钟频率的影响比较小,但是对性能影响很大(当master期望outstanding访问不同的target时)。
Single slave per ID(SSPID):对于一个ASIB,所有相同ID的outstanding的读事务必须是访问同一个目的地,所有相同ID的outstanding的写事务必须是访问同一个目的地。
Single Active Slave(SAS):如果有到其他master接口的outstanding写数据,那么到当前这个master接口的AW请求会被阻塞。可以用来避免AW-W死锁。
参考:
1. Arm CoreLink NIC-400 Network Interconnect TRM
2.https://zhuanlan.zhihu.com/p/347874698?share_code=1cXzYekHo9BMo&utm_psn=2023890831623430726
110
