ACE学习系列-05-ACE互联设计:事务排序与一致性保证

ACE

Posted by George Lin on December 21, 2025

ACE互联设计:事务排序与一致性保证

引言

在ACE系统中,Interconnect(互联结构)扮演着系统级协调者的角色。它不仅要处理多个Master的事务请求,还要生成Snoop操作,协调缓存状态转换,管理主存访问,并确保整个系统的一致性。Interconnect的设计质量直接决定了系统的性能和正确性。

理解Interconnect的设计要求,不仅要理解它需要做什么,更要理解它如何通过精心设计的排序规则、响应生成机制和主存交互策略来保证系统的一致性。这些设计要求体现了分布式系统协调的复杂性,也反映了ACE协议在保证正确性和优化性能之间的精妙平衡。

本文将从Interconnect的核心职责出发,深入解析事务排序规则、Snoop事务生成、响应生成机制、主存交互策略等关键设计要素,揭示Interconnect如何成为ACE系统一致性的守护者。

Interconnect的核心职责:系统级协调者

Interconnect在ACE系统中承担着多重职责,这些职责共同构成了系统级一致性协调的基础。理解这些职责是理解Interconnect设计的关键。

首先,Interconnect必须接收来自Initiating Master的事务请求。这些请求可能同时到达,可能针对不同的地址,也可能针对同一个地址。Interconnect必须能够处理这些并发请求,决定它们的处理顺序,并确保处理过程的一致性。

其次,Interconnect必须确定事务的处理顺序。当多个Master同时访问同一个缓存行时,Interconnect必须决定哪个事务先处理。这个决定必须是一致的,所有组件必须看到相同的顺序。这种一致性是系统正确性的基础。

第三,Interconnect必须为每个一致性事务生成相应的Snoop操作。根据发起事务的类型和Domain属性,Interconnect必须确定需要Snoop哪些Master,发送什么样的Snoop事务,以及何时可以终止Snoop操作。这个过程需要Interconnect维护系统的一致性状态信息。

第四,Interconnect必须接收Snoop响应和数据,并根据这些信息生成对发起Master的响应。Interconnect需要综合多个Snoop响应的信息,决定如何设置IsShared和PassDirty等响应位,以及如何处理脏数据。

第五,Interconnect必须管理与主存的交互。当数据不在任何缓存中时,Interconnect需要从主存读取;当脏数据需要写回时,Interconnect需要协调写回操作;当需要确保数据一致性时,Interconnect需要管理主存更新的顺序。

这些职责的协同工作实现了完整的ACE一致性协议。Interconnect通过精心设计的机制来履行这些职责,确保系统既正确又高效。

事务排序规则:一致性的基础

事务排序是ACE协议正确性的基础。当多个Master同时访问同一个缓存行时,Interconnect必须确保所有组件看到相同的处理顺序。这种一致性排序是缓存一致性协议的核心要求。

ACE协议定义了基于响应和Snoop事务的排序规则。如果一个Master发起一个一致性或缓存维护事务,并在收到响应之前收到了Snoop事务,那么Snoop事务被定义为先于发起事务。这种规则确保了当Interconnect决定先处理另一个Master的请求时,被Snoop的Master能够感知到这个顺序。

相反,如果一个Master发起事务后,在收到Snoop事务之前先收到了响应,那么发起事务被定义为先于Snoop事务。这种规则确保了当Interconnect决定先处理发起Master的请求时,其他Master的Snoop操作能够感知到这个顺序。

这种排序规则的关键在于它只适用于同一个缓存行的事务。不同缓存行的事务可以并行处理,不需要严格的顺序关系。这种设计允许系统在保证正确性的同时最大化并行性。

Interconnect必须确保以下约束:如果Interconnect向Master提供了事务响应,它不能在该Master返回RACK或WACK之前向该Master发送对同一缓存行的Snoop事务。这种约束确保了Master在完成事务之前不会收到新的Snoop操作,避免了状态管理的复杂性。

同样,如果Interconnect向Master发送了Snoop事务,它不能在该Master返回CRRESP之前向该Master提供对同一缓存行的事务响应。这种约束确保了Master在完成Snoop响应之前不会收到事务响应,避免了状态转换的冲突。

这些排序规则和约束共同确保了系统的一致性。无论Master如何并发访问,Interconnect都能通过明确的排序规则保证所有组件看到一致的状态转换顺序。

RACK和WACK机制:事务完成的精确标记

RACK(Read Acknowledge)和WACK(Write Acknowledge)是ACE协议中用于精确标记事务完成的机制。这两个信号解决了Interconnect和Master之间可能存在延迟时的同步问题。

RACK和WACK的设计考虑了实际系统中的延迟场景。例如,当Interconnect和Master之间存在寄存器切片或时钟域边界时,事务的完成时间在Interconnect和Master之间可能不同步。RACK和WACK机制使得Interconnect可以精确知道事务何时在Master端完成。

Master必须在最后一个读数据传输(RLAST被设置)之后才能发送RACK。这个要求确保了Master已经接收了所有数据,事务真正完成。同样,Master必须在写响应握手之后才能发送WACK,确保写事务真正完成。

RACK和WACK信号对所有事务都有效,不仅仅是Shareable事务。这种设计允许这些信号可以简单地基于读数据通道或写响应通道的握手机制生成,简化了实现。

重要的是,RACK和WACK信号不能被阻塞。Interconnect必须在Master发送这些信号的同一周期接受它们。这种要求确保了事务完成的及时确认,避免了额外的延迟。

RACK和WACK机制在事务排序中起着关键作用。Interconnect使用这些信号来确定何时可以向Master发送新的Snoop事务,从而保证了排序规则的正确执行。没有这些信号,Interconnect无法准确知道事务的完成时间,可能导致排序错误。

连续读数据返回:性能优化的重要特性

连续读数据返回(Continuous Cache Line Read Data)是ACE协议的一个重要性能优化特性。这个特性允许Master在开始接收缓存行数据后,可以连续接收所有数据,而不需要在数据传输过程中处理新的Snoop事务。

这个特性的设计考虑了缓存行读取的特殊性。当一个Master发起缓存行大小的读事务时,它期望能够连续接收整个缓存行的数据。如果在数据传输过程中需要处理Snoop事务,可能会导致数据接收的中断,影响性能。

支持连续读数据返回的Interconnect保证:一旦第一个数据beat返回,所有后续的数据传输都会连续返回,不需要等待任何Snoop事务的进展。这种保证使得Master可以在接收数据时专注于数据处理,而不需要担心Snoop操作的干扰。

然而,这个特性有一些限制。如果Master已经开始响应一个Snoop事务,并且已经返回了至少一个数据beat,那么它必须完成该Snoop事务的所有剩余数据beat。这种要求确保了Snoop操作的完整性,避免了数据传递的不一致。

连续读数据返回特性只适用于精确缓存行大小的事务,包括ReadClean、ReadShared、ReadUnique、ReadNotSharedDirty,以及缓存行大小的ReadOnce和ReadNoSnoop事务。这种限制反映了该特性的设计目标:优化缓存行级别的数据传输。

这个特性是可选的,但协议推荐所有新设计都支持它。这种推荐反映了该特性对系统性能的积极影响,特别是在高带宽数据传输场景中。

Snoop事务生成:一致性协调的核心

Snoop事务生成是Interconnect的核心功能之一。Interconnect必须根据发起事务的类型和Domain属性,确定需要生成哪些Snoop事务,以及何时可以终止Snoop操作。

对于ReadOnce、ReadClean、ReadNotSharedDirty和ReadShared事务,Interconnect必须Snoop所有可能持有该缓存行副本的Master。Snoop操作必须持续到以下任一条件满足:获得了缓存行的副本、收到了WasUnique响应、或者已经Snoop了所有缓存。

这种设计允许Interconnect在找到数据或确认没有其他副本时提前终止Snoop操作。WasUnique响应特别有用,因为它明确表示没有其他缓存持有副本,Interconnect可以立即停止Snoop操作,提高效率。

对于CleanShared事务,Snoop操作必须持续到获得了脏副本(PassDirty被设置)、收到了WasUnique响应、或者已经Snoop了所有缓存。这种设计确保了CleanShared操作能够找到所有脏副本并确保它们被写回。

对于ReadUnique、CleanUnique、MakeUnique、CleanInvalid、MakeInvalid、WriteUnique和WriteLineUnique事务,Snoop操作必须持续到收到了WasUnique响应或已经Snoop了所有缓存。这些事务要求获取独占权限或无效化所有副本,因此必须Snoop所有可能的Master。

Interconnect不需要同时Snoop所有缓存,可以顺序Snoop。这种灵活性允许Interconnect根据系统状态和资源可用性优化Snoop操作的调度。例如,Interconnect可以先Snoop最可能持有数据的Master,如果找到了数据,就可以提前终止。

当Interconnect顺序执行Snoop操作时,如果收到了PassDirty响应,它可以使用MakeInvalid Snoop事务来处理剩余的Master。这种优化利用了已经获得脏数据的事实,对于剩余Master只需要无效化即可,不需要传输数据。这种优化对于WriteUnique、ReadUnique、CleanUnique和CleanInvalid事务特别有效。

响应生成机制:信息综合的艺术

Interconnect必须综合多个Snoop响应的信息,生成对发起Master的响应。这个过程需要Interconnect理解每个响应位的含义,并根据协议规则正确设置响应位。

对于ReadOnce、ReadClean、ReadNotSharedDirty、ReadShared和CleanShared事务,Interconnect必须确定IsShared响应位。这个决定基于收到的所有Snoop响应。

如果任何Snoop响应设置了WasUnique位,Interconnect需要特别处理。如果该响应同时设置了IsShared位,那么Interconnect必须向发起Master设置IsShared位。如果该响应没有设置IsShared位,协议推荐不设置IsShared位,但允许设置。这种设计利用了WasUnique信息来优化响应。

如果没有收到WasUnique响应,Interconnect需要综合所有Snoop响应。如果任何响应设置了IsShared位,Interconnect必须设置IsShared位。如果所有响应都没有设置IsShared和DataTransfer位,Interconnect必须不设置IsShared位。如果所有响应都没有设置IsShared位,但任何响应设置了DataTransfer位,协议推荐不设置IsShared位,但允许设置。

对于ReadNotSharedDirty、ReadShared和ReadUnique事务,Interconnect必须确定PassDirty响应位。如果任何Snoop响应设置了PassDirty位,并且Interconnect没有生成写主存事务,那么Interconnect必须设置PassDirty位。这种设计确保了脏数据信息能够正确传递给发起Master。

响应生成机制的设计体现了Interconnect在信息综合和决策制定中的关键作用。Interconnect不仅要收集信息,还要根据协议规则正确解释和传递这些信息,确保发起Master能够获得正确的状态信息。

主存交互策略:数据源的选择

Interconnect必须管理与主存的交互,决定何时从主存读取数据,何时需要写回脏数据,以及如何协调这些操作。

对于ReadNoSnoop事务,Interconnect必须总是从主存或相应的外设读取数据。这种事务不涉及一致性协议,因此不需要Snoop操作。

对于一致性读事务(ReadOnce、ReadClean、ReadNotSharedDirty、ReadShared、ReadUnique),如果Interconnect没有从Snoop操作获得所需数据,它必须从主存读取。这种设计确保了即使没有缓存持有数据,事务也能完成。

Interconnect被允许在所有Snoop事务完成之前从主存读取数据。这种提前读取可以隐藏主存访问延迟,提高性能。然而,Interconnect必须遵守以下规则:如果任何缓存持有脏副本,不能使用从主存读取的数据;如果可能发生写回操作,不能使用可能过时的主存数据。

当Interconnect收到PassDirty响应但没有向发起Master设置PassDirty位时,它必须生成写主存事务。这种情况发生在发起事务不允许PassDirty响应(如ReadOnce、ReadClean)或Interconnect已经提前返回响应但后来收到PassDirty响应时。

Interconnect被允许在收到PassDirty响应时执行写主存事务,但此时不能向发起Master设置PassDirty位。这种设计允许Interconnect承担写回责任,而不需要Master处理脏数据。

Interconnect必须确保所有主存更新(无论是来自缓存Master还是Interconnect本身)都按正确顺序执行。Interconnect只能在保证所有更早的主存更新都已排序时,才给缓存Master更新主存的权限。这种要求确保了主存状态的一致性。

非阻塞要求:系统前进的保证

Interconnect的非阻塞要求确保了系统能够持续前进,避免死锁和性能问题。这些要求定义了哪些事务必须能够进展,哪些事务可以等待。

某些事务必须能够进展而不需要等待任何待处理的Snoop事务:WriteNoSnoop、WriteBack、WriteClean、WriteEvict和Evict。这些事务不需要Snoop操作,因此不应该被Snoop操作阻塞。这种设计确保了缓存管理操作能够及时完成。

Interconnect被允许在进展以下事务之前等待Snoop事务完成:任何AR通道事务、WriteUnique或WriteLineUnique事务。这些事务需要Snoop操作来完成,因此可以等待Snoop操作。这种设计允许Interconnect在获得完整信息后再完成事务。

非阻塞要求的总结是:任何AR通道事务可以被阻塞等待AC通道事务;任何AC通道Snoop事务可以被阻塞等待AW通道写事务,但WriteUnique或WriteLineUnique事务除外。这种要求确保了Snoop操作不会被写操作阻塞,从而保证了系统的响应性。

这些非阻塞要求与Master端的非阻塞要求协同工作,共同确保了系统的前进性。通过明确定义哪些操作可以阻塞,哪些操作不能阻塞,协议确保了系统既不会死锁,也不会违反一致性保证。

事务修改:灵活性的体现

Interconnect被允许根据Modifiable属性修改事务。这种灵活性允许Interconnect优化事务处理,提高系统效率。

Interconnect可以将一个事务分解为多个事务,也可以将多个事务合并为一个事务。这种能力允许Interconnect根据目标Slave的特性优化事务大小和结构。

Interconnect可以读取比需要更多的数据,也可以访问比需要更大的地址范围(使用写选通确保只更新需要的位置)。这种能力允许Interconnect优化数据传输,减少事务数量。

在生成的每个事务中,Interconnect可以修改传输地址(AxADDR)、突发大小(AxSIZE)、突发长度(AxLEN)和突发类型(AxBURST)。这些修改允许Interconnect根据目标Slave的特性优化事务格式。

重要的是,Interconnect对事务的修改对系统中的任何Master都是不可见的。Master只看到它发起的事务,不知道Interconnect如何修改和处理这些事务。这种设计保持了接口的简洁性,同时允许Interconnect进行内部优化。

缓存行大小转换:异构系统的支持

ACE协议支持具有不同缓存行大小的组件之间的通信。这种支持对于异构系统设计至关重要,允许不同特性的组件在同一个一致性域中工作。

当发起Master的缓存行较窄时,Interconnect需要进行窄到宽的转换。读事务可以转换为更宽的缓存行大小,获取所需数据以及不需要的数据。多余的数据如果是脏的必须写回主存,如果是干净的可以丢弃。

Clean事务也可以转换为更宽的缓存行大小。作为Clean事务结果获得的脏数据必须写回主存。

MakeUnique或MakeInvalid事务需要特殊考虑。比Master请求更宽的缓存行不能被简单地无效化。当转换MakeUnique或MakeInvalid事务为更宽的缓存行大小时,必须转换为CleanInvalid事务。这确保了所有脏数据在更宽的行被无效化之前写回主存。

当发起Master的缓存行较宽时,Interconnect需要进行宽到窄的转换。事务可以分解为多个窄事务,每个窄事务可以由不同的缓存Master在Snoop过程中响应,某些窄事务可能需要访问主存。

Interconnect负责组装发送给发起Master的事务响应,并确保多个窄事务正确排序,即相对于其他Snoop事务作为连续块处理。

如果宽缓存行的任何部分是共享的,整个缓存行必须被视为共享。如果任何部分是脏的,整个缓存行必须被视为脏的。这种设计确保了宽缓存行的状态一致性。

实际应用:Interconnect的完整工作流程

理解Interconnect设计的关键在于理解完整的工作流程。让我们通过一个典型场景来说明Interconnect如何协调多个Master的事务。

假设Master A发起ReadShared事务,请求地址0x1000的共享访问。Interconnect收到这个事务后,需要确定是否有其他Master持有该地址的副本。

Interconnect首先检查Snoop Filter(如果存在),确定哪些Master可能持有该数据。假设Snoop Filter指示Master B和Master C可能持有该数据。

Interconnect向Master B发送ReadShared Snoop事务。Master B检查自己的缓存,发现持有UniqueDirty副本。Master B将缓存行转换为SharedDirty状态,通过CD通道返回数据,设置PassDirty和IsShared位。

Interconnect收到Master B的响应后,知道已经获得了数据。由于收到了WasUnique响应(Master B之前是Unique状态),Interconnect知道不需要继续Snoop Master C,可以提前终止Snoop操作。

Interconnect综合Snoop响应信息:PassDirty被设置(数据是脏的),IsShared被设置(数据可能被共享)。由于ReadShared事务允许PassDirty响应,Interconnect向Master A设置PassDirty和IsShared位,并通过R通道返回数据。

如果Interconnect选择承担写回责任,它可以生成WriteBack事务将脏数据写回主存,同时不向Master A设置PassDirty位。这种选择允许Interconnect优化写回操作,减少Master的负担。

这个流程展示了Interconnect如何协调多个Master的事务,如何生成Snoop操作,如何综合响应信息,以及如何管理与主存的交互。整个过程需要Interconnect维护系统的一致性状态,做出正确的决策,确保系统的正确性和性能。

总结:Interconnect作为系统守护者

Interconnect是ACE系统的守护者,它通过精心设计的排序规则、响应生成机制和主存交互策略,确保了系统的一致性和性能。理解Interconnect的设计要求,不仅要理解它需要做什么,更要理解它如何通过精巧的机制来实现这些目标。

从事务排序到Snoop生成,从响应综合到主存管理,Interconnect的每个设计要素都体现了协议在保证正确性和优化性能之间的平衡。这种平衡不是简单的折中,而是基于对系统行为的深入理解而做出的精妙设计。

在实际系统设计中,Interconnect的实现是系统性能的关键。通过优化Snoop操作的调度,实现WasUnique等优化机制,合理选择主存交互策略,系统可以在保证正确性的同时实现高性能。

在后续的文章中,我们将深入探讨缓存维护和Barrier机制,看看ACE协议如何通过这些机制来支持软件缓存管理和系统级同步,以及这些机制如何与Interconnect协同工作。


本文是ACE协议学习系列的第五篇,下一篇将深入探讨缓存维护与Barrier机制,揭示系统级一致性协调的高级特性。