整理目的为解释AMBA总线中与缓存相关的transaction 类型,设计snoop 接口,snoop address channel。
对传输类型进行分类,有5个不同的大类。
1.Non-snooping 类型:这类传输不允许监听其他的master。
2.Coherent 类型:这类传输是针对那些可以被其他主设备缓存的内存地址,需要监听。
3.Memory update 类型:这类传输更新主存,必须不能监听其他主设备。
4.Cache maintenance 类型:这类传输是针对那些可以被其他主设备缓存的内存地址,需要监听。这些传输也可能需要被传输到下级cache中。
5.Barrier 类型:这类传输确立了其他事务之间的顺序。
6.DVM 类型:这些事务在参与分布式虚拟内存方案的组件之间传递操作。
Coherent与Cache maintenance传输需要进行监听。
细分6个大类中的不同传输:
Read 传输
Write 传输
对比观测可以看出read传输没有直接的memory update的操作,write 传输没有cache maintenance的。
文档中按照transaction的属性来进行区分而不是按照传输类型:
Transactions | Type | Group | Channel | Description |
---|---|---|---|---|
Read | ReadNoSnoop | Non-snooping | AR | 用于与其他主设备不可共享的内存空间,不会产生snoop。 |
ReadOnce | Coherent | AR | 用于与其他主设备共享的内存空间中。 当需要获取数据的即时副本时,就会使用这种事务。 数据不会被缓存在本地以供将来使用。 | |
ReadClean | Coherent | AR | 用于那些与其他主设备共享的可共享内存区域。ReadClean 事务保证不会将更新主内存的责任转移给发起事务的主设备。 通常,当一个主设备想要获取缓存行的干净副本时,会使用 ReadClean 事务,例如,拥有写穿缓存(write-through cache)的主设备 | |
ReadNotSharedDirty | Coherent | AR | 它用于那些与其他主设备共享的可共享内存区域。ReadNotSharedDirty 事务可以在任何组合的 IsShared 和 PassDirty 响应下完成,除了 IsShared 和 PassDirty 同时被断言的情况。通常,这种事务由执行加载操作的缓存主设备使用,并且可以接受任何状态的缓存行,除了 SharedDirty 状态。 | |
ReadShared | Coherent | AR | 它用于那些与其他主设备共享的可共享内存区域。ReadShared 事务可以在 IsShared 和 PassDirty 响应的任何组合下完成。通常,ReadShared 事务由执行加载操作的缓存主设备使用,并且可以接受任何状态的缓存行。 | |
ReadUnique | Coherent | AR | 可与其他主设备共享的内存区域中进行操作。该事务获取数据的副本,并确保缓存行可以保持在唯一状态(Unique state)。这允许主设备对缓存行执行存储操作。 通常,当发起事务的主设备执行部分缓存行存储并且没有缓存行的副本时,会使用 ReadUnique 事务。 | |
Clean | CleanUnique | Coherent | AR | 事务确保以下几点:
通常,当主设备已经拥有数据的副本,并在可共享内存中执行部分缓存行存储操作之前,会使用 CleanUnique 事务。 |
CleanShared | Cache maintenance | AR | CleanShared 事务是一种广播缓存清理操作,它可用于可共享和不可共享内存区域。 CleanShared 事务的用途是确保所有主内存位置的缓存副本都是干净的(即没有被修改的)。这意味着,当一个主设备发起 CleanShared 事务时,它会通知所有其他可能拥有该内存位置副本的缓存,将这些副本标记为非脏状态,从而确保整个系统中对该内存位置的所有缓存副本都是同步的,并且没有副本包含未写入主内存的修改。 | |
CleanInvalid | Cache maintenance | AR | CleanInvalid 事务是一种广播缓存清理和使无效操作,它可用于可共享和不可共享内存区域。 CleanInvalid 事务的用途是确保主内存被更新,并且没有主内存位置的缓存副本。当一个主设备发起 CleanInvalid 事务时,它会确保所有其他缓存中相应的缓存行被标记为无效,并且如果缓存行是脏的(即包含未写回主内存的修改),那么这些修改会被写回主内存。这样可以保证主内存中的数据是最新的,并且系统中不存在该内存位置的有效缓存副本。 | |
Make | MakeUnique | Coherent | AR | MakeUnique 事务用于在可与其他主设备共享的内存区域中进行操作。MakeUnique 事务确保以下几点:
这意味着发起 MakeUnique 事务的主设备想要确保它对某个特定缓存行有独占的控制权,以便它可以自由地修改数据而不受其他缓存副本的干扰。同时,这也确保了主设备是唯一可以访问该缓存行的设备,其他设备中的相应缓存副本将被标记为无效或被清除。 只能在full cache line的时候使用。 |
MakeInvalid | Cache maintenance | AR | MakeInvalid 事务是一种广播缓存使无效操作,它可用于可共享和不可共享内存区域。 MakeInvalid 事务的用途是确保没有主内存位置的缓存副本。当一个主设备发起 MakeInvalid 事务时,它会通知所有其他可能拥有该内存位置副本的缓存,将这些副本标记为无效。这通常用于确保内存中的数据不被缓存,或者在主设备需要独占访问某个内存位置时,确保其他所有缓存中的副本都是无效的,从而维护数据的一致性。 | |
Write | WriteNoSnoop | Non-snooping | AW | WriteNoSnoop 事务用于在不可与其他主设备共享的内存区域中进行操作。WriteNoSnoop 事务可能由以下原因产生:
|
WriteUnique | Coherent | AW | WriteUnique 事务通常确保以下几点:
| |
WriteLineUnique | Coherent | AW | 与WriteUnique的区别是WriteLineUnique需要对full cache line进行update。 | |
WriteBack | Memory Update | AW | WriteBack 事务是一种写操作,它可用于可共享和不可共享内存区域。WriteBack 事务是将脏缓存行(dirty cache line)写入主内存或下游缓存以更新数据的操作。 注意: WriteBack 事务和 WriteClean 事务的区别在于,在可共享内存区域中,事务完成后缓存行是否仍然保留在缓存中。在 WriteBack 事务之后,缓存行将不再被分配。而在 WriteClean 事务之后,缓存行仍然保留在缓存中。 这意味着 WriteBack 事务通常用于以下情况:
相反,WriteClean 事务用于更新主内存或下游缓存,但更新后缓存行仍然保留在缓存中,以便快速响应后续的读取请求。这种操作通常用于确保数据的一致性,同时保持对数据的快速访问能力。 | |
WriteClean | Memory Update | AW | ||
WriteEvict | Memory update | AW | WriteEvict 事务可用于在逐出(evicting)一个干净的缓存行时。这种事务用于将缓存行写入到更低级别的缓存层次结构中,例如 L3 缓存或系统级缓存。WriteEvict 事务不需要更新主内存。 WriteEvict 事务只能在以下情况下使用:
注意: 如果一个缓存行可能已经被推测性地获取,即它位于其共享域之外,那么这个缓存行可能会过时,因为后续对该缓存行的存储操作不要求更新它。如果一个缓存行可能是一个陈旧的副本,那么就不能通过使用 WriteEvict 事务将其写回到其共享域中。 WriteEvict 事务可以被丢弃。 这意味着 WriteEvict 事务是一种优化操作,它允许系统在不违反缓存一致性原则的情况下,将不再需要的干净缓存行移动到缓存层次结构中的更低级别,或者完全从缓存中移除。这种操作有助于管理缓存空间,确保缓存中只保留最相关或最可能被重用的数据。 | |
Evict | Evict | Memory update | AW | Evict 事务表示一个缓存行已被从某个主控设备的本地缓存中逐出。Evict 事务不涉及数据传输。Evict 事务只能用于可共享(Shareable)的内存区域。 注意
|
Barrier | Barrier | Barrier | AW | 保证系统中事务执行的顺序和观测。 |
DVM | DVM Complete | DVM | AR | DVM操作事务完成。 |
DVM Message | DVM | AR | DVM操作事务 |
对于仅支持ACE-Lite的主设备,这些主设备没有AC通道,即一般是给没有Cache的设备使用,但是有snoop通道可以监听其他的主设备,所以可以发送一些主动的Cache maintenance的传输,对于读传输来说Coherent的传输几乎不能发,只能发ReadOnce。
- 指示发出的事务是否可以被其他主控的硬件一致性缓存保存。
- 发出屏障事务(barrier transactions)。
- 发出广播缓存维护操作(broadcast cache maintenance operations)。