目录
1.CCI集成流程
2.CCI功能集成指导
2.1CCI结构框图解释
Request concentrator
Transaction tracker
Read-data Network
Write-data Network
B-response Network
2.2 接口注意项
记录一下CCI500的ACE slave interface不支持的功能:
对于ACE-Lite slave interface来说:
对于AXI4 master interface:
将AXI4 master连接到CCI-500的ACE-Lite接口:
2.3CCI的系统级一致性
Domain signaling
Point of Serialization
WriteLineUnique 和 WriteUnique支持
2.4 Exclusive accesses
1.CCI集成流程
上述为推荐的集成流程,每个方面的技术细节这里暂时不展开了,涉及了ACE\AXI4\APB\Low-power interface\clk_rst\综合\DFT\验证等。
2.CCI功能集成指导
这是本次整理主要内容,涉及了CCI在不同case下会有的不同行为。这一章主要是总结一些AXI和ACE协议的需求。
结合之前的CCI500_execution_tb【ARM】CCI500_execution_tb-CSDN博客可以很容易理解上述的架构图。
2.1CCI结构框图解释
Request concentrator
请求集中器(RC)根据事务跟踪器(Transaction Tracker, TT)和ID跟踪器(ID Tracker, IDT)中的服务质量(Quality of Service, QoS)属性和占用水平(occupancy levels)来对请求进行仲裁。根据地址,请求随后进入两个TT分区中的一个。TT负责处理危险检查(hazard checking),生成窥探请求(snoop requests),并根据需要将请求发送到下游。每个从属接口都有一个IDT,它向TT提供排序要求。
Transaction tracker
对于shareable requests,TT访问窥探过滤器(snoop filter)以确定请求是否必须进行窥探或继续向下游发送。TT还向窥探过滤器发出分配和去分配请求,确保窥探过滤器始终包含最新信息。如果窥探过滤器在尝试分配时找不到空闲条目,它将通过发出CleanInvalidate窥探请求来释放一个条目。
Read-data Network
如果窥探过滤器指示数据可能被保存在上游缓存中,TT通过Snoop网络(Snoop Network, SN)向适当的ACE从属接口发出窥探请求。这些接口通过可选的流水线阶段和出口(egress)寄存器片进行访问。在窥探命中的情况下,SN通过读数据网络(Read-data Network, RN)将数据发送回原始主设备。
RN是一个全交叉互联,它将读数据从主接口传输到从属接口。
如果读响应不需要数据传输,TT通过读响应器(Read Responder, RR)发送读响应。例如,TT可能使用RR处理直接虚拟内存访问(Direct Virtual Memory access, DVM)消息或缓存维护(cache maintenance)操作。
Write-data Network
如果需要CCI生成的写操作,SN通过写数据网络(Write-data Network, WN)发送窥探数据。WN是一个全交叉互联,它将写数据从从属接口传输到主接口。
不可共享请求和导致窥探过滤器未命中的可共享请求通过请求分配器(Request Distributor, RD)发送到下游的主接口。为了防止跨流阻塞,RD只允许TT向具有空间的FIFOs的主接口发送请求。
B-response Network
在TT处理写请求并且RD允许请求向下游发送后,将路由信息发送到WN。这个路由信息允许写数据被发送。B响应网络(B-response Network, BN)将写响应传输到IDT。IDT将写响应发送到原始主设备,并在必要时重新排序以满足ID排序要求。
APB接口使您能够对CCI-500进行编程。APB接口连接到配置寄存器块(Configuration Register Block, CRB)和性能监控单元(Performance Monitoring Unit, PMU)。
P-Channel和Q-Channel提供时钟和电源控制。
2.2 接口注意项
当使用不是完全支持接口协议的master或slave时,需要做额外的logic去提供需要的值。
记录一下CCI500的ACE slave interface不支持的功能:
对于ACE-Lite slave interface来说:
也是不支持barrier transactions。与一般的ACE-Lite slave不同的是CCI的拥有AC和CR channel用来发送DVM messages。当连接不支持返回DVM message response的master,若CCI 发送DVM message会导致CCI deadlock住,所以建议将ACCHANNELEN tie 0来避免这个问题。
CCI可以设置可以接受的OT的大小。设置SIx_RW_MAX。
对于AXI4 master interface:
注意分为system interface和memory interface, address decoder用来做地址区分,fix从什么端口出。
将AXI4 master连接到CCI-500的ACE-Lite接口:
ACE-Lite 较 AXI4支持 硬件一致性和缓存维护(cache maintenance). 所以如果想将AXI4 master连接到CCI500的ACE-Lite接口上需要注意如下事项。
PS:正常的ACE-Lite相比AXI4增加的接口如下:
因为AXI4没有AC等接口所以只能保持hardware coherency。AXI4->ACE-Lite的转换通过添加AxDOMAIN信号,并且确保其他的AXI4无法驱动的ACE-Lite接口tie off。下表声明如何将这些信号tie off。
CCI-500 的 ACE-Lite 从属接口支持可编程的可共享覆盖。因此,您可以为连接的设备配置适当的属性,使其可以是共享的,也可以是不共享的。
注意:
- FIXED 突发传输、设备内存事务和 DVM 消息事务不受任何覆盖影响。
- 如果一个主设备正在对可共享区域生成独占访问,它需要在其他主设备中增加额外的独占监视器。因此,如果它覆盖为可共享,CCI-500 将 AxLOCK 覆盖为正常,独占写入将失败
或者,如果需要共享和非共享流量的混合,则必须使用从属接口上的 AxDOMAIN 输入信号来标记这种混合。您可以基于以下内容对 AxDOMAIN 进行解码:
- 地址,其中某些区域被视为可共享的,其他区域被视为非共享的。
- ID,其中某些主设备或线程被视为可共享的。
- USER 位。如果您使用 CoreLink NIC-400 网络互连来组合几个具有不同 AxDOMAIN 信号要求的 AXI 主设备,那么每个主设备都可以为其自己的事务生成自己的 AxDOMAIN 信号。然后,您可以使用 AxUSER 信号将这些信号通过互连路由,并将 AxUSER 输出连接到 CCI-500 ACE-Lite 从属接口的 AxDOMAIN 输入。
注意:
- 当事务被标记为内部共享或外部共享时,根据 ACE 规范,其他属性有限制。以下表格显示了这些限制。
其余有一些AXI3连接ACE-Lite slave interface,ACE-Lite连接master interface暂时不更新。(有需要可以评论一下我再更新)
2.3CCI的系统级一致性
Domain signaling
下图是AMBA中对AxDomain的解释
CCI是被认为处于Inner和Outer domain中的。所以AxDomain处于Inner Shareable和Outer Shareable时可能会导致snoop transaction到连接的ACE master上,取决于snoop filter 的内容。又因为下游的端口都是AXI4,因此domain信息是不会传到下游去的。Cache maintenance 操作总是会终止于CCI-500。下表是CCI-500对AxDomain的处理。
Point of Serialization
与exclusive access有关。
在一致性系统中,每个可共享地址必须对所有能够访问该地址的主设备有一个单一的序列化点(Point of Serialization, PoS)。PoS也被称为一致性点(Point of Coherency, PoC)。
CCI-500包含两个PoS,每个事务跟踪器(Transaction Tracker, TT)分区一个。这些PoS覆盖由哈希算法确定的不同地址区域。所有进入PoS的可共享事务都会针对发往该分区的其他可共享事务的进展进行危险检查(hazard check)。
例如:
- 事务1,一个共享读取事务,通过了PoS。
- 事务2,一个与事务1具有相同地址的共享读取事务,进入了PoS。
- 事务2对事务1进行了危险检查,因为事务1尚未完成。
- 事务2仅在事务1完成后才继续进行。也就是说,当事务1收到RACK(Read Acknowledge)并且事务被接受进入CCI时。
注意: 为了维护一致性,如果一个代理以可共享的方式访问地址,所有代理都必须以可共享的方式访问它。此外,任何在主设备之间共享的可缓存地址都必须使用被标记为内部共享(Inner Shareable)或外部共享(Outer Shareable)的事务来访问。
WriteLineUnique 和 WriteUnique支持
CCI-500 处理 WriteLineUnique 和 WriteUnique 事务。 当它接收到一个 WriteLineUnique 事务时,CCI-500 会生成一个 MakeInvalid 窥探事务来使所有缓存中的cacheline失效。当 MakeInvalid 通过了 PoS(Point of Serialization)并且完成了其窥探事务时,CCI-500 会从其 AXI4 主接口发出一个 WriteNoSnoop 事务。 当它接收到一个 WriteUnique 时,CCI-500 会生成一个 CleanInvalid 窥探来清理和使所有主缓存中的相关cacheline失效。当 CleanInvalid 通过了 PoS 并且完成了其窥探事务时,CCI-500 会从其 AXI4 主接口发出一个 WriteNoSnoop 事务。 与任何 CleanInvalid 事务一样,CCI 生成的 WriteBack 事务可以优先于 WriteNoSnoop 事务。这个现象与仿真case一致。【ARM】CCI500_execution_tb-CSDN博客
为确保 CCI-500 中有足够的一致性处理时间,提供了写数据缓冲区。这些缓冲区允许链接的 AW 和 W 通道事务通过提供写数据存储在 AW 通道被处理时进入 CCI-500。 如果接收到的 WriteUnique 或 WriteLineUnique 事务与之前的 WriteUnique 或 WriteLineUnique 事务发生危险冲突,它会在 PoS 处被暂停。该事务在早期写入完成之前不会进展。如果事务仅与同一 ACELite 从属接口的早期事务发生危险冲突,它可以在早期窥探事务完成后进展。在这种情况下,事务可以在不必等待早期写入事务完成的情况下继续进行。然而,如果暂停事务的原因是为了防止其他事务饥饿,被暂停的事务在早期写入事务完成后才能继续。 任何 WriteUnique 或 WriteLineUnique 事务如果与除 WriteUnique 或 WriteLineUnique 之外的可共享事务发生危险冲突,都必须等待早期事务完成后才能进展。
2.4 Exclusive accesses
CCI-500 支持对可共享和不可共享位置的独占访问。 CCI-500 的独占访问支持符合 ACE 和 AXI4 协议所定义的标准。 注意: CCI-500 仅提供 PoS(Point of Serialization)独占监视器。主设备和从设备组件必须以符合 ARM® AMBA® AXI 和 ACE 协议规范,AXI3, AXI4, 以及 AXI4-Lite ACE 和 ACE-Lite 的方式提供额外的监视器。 ARM® AMBA® AXI 和 ACE 协议规范,AXI3, AXI4, 以及 AXI4-Lite ACE 和 ACE-Lite 仅允许在 ACE 接口上进行可共享的独占访问。有关所需 ACE 信号的信息,请参见规范。 以下事务与可共享位置的独占序列相关联:
- 断言 ARLOCK 的 ReadClean。
- 断言 ARLOCK 的 ReadShared。
- 断言 ARLOCK 的 CleanUnique。
CCI-500 支持每个 ACE 主设备最多四个独占访问线程,并为安全和非安全事务设有单独的监视器。这意味着非安全事务不能影响安全事务,反之亦然。从属接口上的 ARID 信号的两个最低有效位区分独占线程。当与 ARM 处理器一起使用时,这些位标识群集中的每个处理器。在该线程的独占共享访问上设置监视器标志,并在来自不同独占线程的成功独占共享访问上重置。 如果处理器对其缓存以共享状态持有的存储位置执行 Store-Exclusive 指令,则必须在 ACE 接口上发出相应的独占 CleanUnique 事务。 当 CleanUnique 事务由 CCI-500 处理时:
- 如果设置了适当的监视器,事务可能会通过。发送窥探并返回 EXOKAY 响应,除非它以 ERROR 响应命中。
- 如果未设置适当的监视器,则认为事务失败。抑制窥探,并返回 OKAY 响应。
未完待续