本章节对应手册中Chapter D3 Channel Signaling章节,详细阐述了ACE接口上的基本信道信令要求。
由于篇幅原因Channel Signal章节计划分为上下两篇内容,
上篇连接:ACE(AXI Coherency Extensions) 协议学习记录3:Channel Signaling(上)
本片为ACE(AXI Coherency Extensions) 协议学习记录3:Channel Signaling(下),主要包括如下内容:
目录
3.6.2Snoop address channel signaling
3.2读数据通道信号
3.2.1 read response signaling
接下来的部分将详细说明在读取数据通道上的额外响应和确认信号以及相关约束。
首先,读取数据通道包括以下几个关键信号:
- RDATA:包含从内存或缓存返回的数据。
- RRESP:响应信号,指示数据传输的状态,例如是否成功或是否有错误发生。
- RLAST:指示突发传输的最后一个数据字。
- RVALID:有效信号,表明数据和响应有效且可供读取。
- RREADY:就绪信号,表明接收器准备好接收数据和响应。
此外,还有一些额外的信号可能用于特定的一致性操作或事务类型:
- RACK:确认信号,用于确认接收器已经接收并处理了RDATA和RRESP。
- RERR:错误信号,指示在数据传输过程中发生了错误。
表D3-14展示了读响应信号RRESP
的额外位,这些位提供了关于读取操作的状态和缓存行属性的额外信息。以下是这些信号的详细描述:
信号 | 来源 | 名称 | 意义 |
---|---|---|---|
RRESP[2] | 互连 | PassDirty | 当此位为HIGH时,表示缓存行与主内存相比是脏的(Dirty),发起主设备必须确保缓存行在某个时刻被写回主内存。发起主设备可以自己执行写操作,或者将执行写操作的责任传递给另一个主设备。 |
当此位为LOW时,表示发起主设备没有责任确保缓存行被写回主内存。 | |||
RRESP[3] | 互连 | IsShared | 当此位为HIGH时,表示可能在另一个缓存中持有相关数据的副本,缓存行必须保持在共享(Shared)状态。 |
当此位为LOW时,表示这是相关数据的唯一缓存副本,缓存行可以保持在唯一(Unique)状态。 |
IsShared
和PassDirty
响应具有以下限制条件,这些条件对于确保ACE协议中缓存一致性和数据传输的正确性至关重要:
突发传输内的一致性:
- 在一个突发传输中的所有数据传输必须保持
IsShared
和PassDirty
响应的恒定性。这意味着,对于一个给定的突发传输,这些响应值从开始到结束都应该是相同的。移除其他缓存副本的事务:
- 对于那些要求移除所有其他缓存副本的事务,
IsShared
响应必须为LOW。这表示这些事务期望操作的数据在缓存中是唯一的,不允许其他缓存持有该数据的副本。- 这类事务包括:
ReadUnique
、CleanUnique
、MakeUnique
、CleanInvalid
和MakeInvalid
。不允许传递脏数据的事务:
- 对于那些不允许传递脏数据的事务,
PassDirty
响应必须为LOW。这表示这些事务要求数据在缓存中是干净的,或者不允许脏数据被传递给其他缓存。- 这类事务包括:
ReadOnce
、ReadClean
、CleanUnique
、MakeUnique
、CleanShared
、CleanInvalid
和MakeInvalid
。无意义的响应:
- 对于某些事务,
IsShared
和PassDirty
响应必须为LOW,因为这些事务对这些响应没有定义。这些事务包括:ReadNoSnoop
、屏障事务(Barrier transactions)和分布式虚拟内存事务(DVM transactions)。单个读数据通道传输的事务:
- 有些事务在单个读数据通道传输中完成,这些事务包括:
CleanUnique
、MakeUnique
、CleanShared
、CleanInvalid
、MakeInvalid
、屏障事务(Barrier)和分布式虚拟内存事务(DVM)。- 这些事务在单个读数据通道传输中完成,并且必须断言
RLAST
信号。RDATA
信号的值可以是任意的,并且应该被忽略。响应值的一致性:
- 在一个突发传输中,
RRESP[3:2]
的值必须保持一致。通过遵循这些限制,系统可以确保在执行缓存事务时,数据的一致性和缓存行的状态得到正确管理,从而维护数据的完整性和缓存的效率。
表D3-15展示了不同事务类型允许的IsShared
和PassDirty
响应值。这些响应值对于确定缓存行的共享状态和脏状态非常重要。以下是表格的内容:
事务类型 | IsShared | PassDirty |
---|---|---|
ReadNoSnoop | 0 | 0 |
ReadOnce | 0 | 0 |
1 | 0 | |
ReadClean | 0 | 0 |
1 | 0 | |
ReadNotSharedDirty | 0 | 0 |
0 | 1 | |
1 | 0 | |
ReadShared | 0 | 0 |
0 | 1 | |
1 | 0 | |
1 | 1 | |
ReadUnique | 0 | 0 |
0 | 1 | |
CleanUnique | 0 | 0 |
MakeUnique | 0 | 0 |
CleanShared | 0 | 0 |
1 | 0 | |
CleanInvalid | 0 | 0 |
MakeInvalid | 0 | 0 |
Read Barrier | 0 | 0 |
DVM Message | 0 | 0 |
DVM Complete | 0 | 0 |
请注意,表中的“(1)”和“(0)”表示在某些情况下,事务类型可能会有不同的IsShared
和PassDirty
响应值。这通常取决于事务的特定属性或系统的设计要求。
IsShared
响应指示是否有其他缓存可能持有数据的副本,而PassDirty
响应指示是否允许传递脏数据。这些响应值帮助系统维护缓存一致性,并确保数据的完整性。例如,对于ReadUnique
事务,IsShared
和PassDirty
都为0,表示期望读取唯一的、干净的数据,且不期望其他缓存持有该数据的副本。而对于ReadNotSharedDirty
事务,IsShared
为0,PassDirty
为1,表示可以读取脏数据,但不期望其他缓存持有该数据的副本。
注意:
该注释提醒读者,表D3-15仅展示了在
RRESP[3:2]
上的允许响应值。关于CRRESP
上的允许响应值,读者应参考D3-195页上关于监听响应通道信令的描述。
RRESP
信号是读数据通道的一部分,用于在读取操作完成后提供状态信息,包括是否成功完成读取、数据是否脏、以及是否需要写回主内存等。而CRRESP
信号是监听响应通道的一部分,用于在监听事务中提供类似的状态信息。因此,为了完全理解系统如何处理缓存一致性和响应不同类型的事务,需要查看相关的章节,以获取关于
CRRESP
信号的详细信息和规定。这有助于确保在读操作和监听事务中正确地处理缓存行的状态,从而维护数据的一致性和系统的稳定性。
3.3读确认信号
读确认信令是ACE协议中用于指示主设备(master)已经完成读事务的信号。以下是关于读确认信号的详细描述:
-
信号持续时间:
RACK
信号必须在一个时钟周期内被断言,并且互连(interconnect)必须在一个时钟周期内接受它。 -
信号断言时机:
RACK
信号不能在与最后一个读数据通道传输相关的RVALID/RREADY
握手完成后的下一个周期之前被断言,这通常由RLAST
信号指示。RACK
的断言不能延迟,以等待另一个事务的完成。 -
事务类型:读确认必须发送给所有类型的事务,包括一致性事务、屏障事务和分布式虚拟内存(DVM)事务。
-
顺序信息:读确认不包含顺序信息,它的顺序与最后一个读数据项和相关的读响应相同。
-
互连处理:互连必须使用读确认来确保,直到同一个主设备针对相同地址的任何先前事务完成后,不会向该主设备的snoop端口发出事务。
信号 | 来源 | 描述 |
---|---|---|
RACK | 主设备(Master) | 读确认信号,指示主设备已经完成了一个读事务。 |
RACK
信号由主设备发出,用于确认读操作已经成功完成。当主设备接收并处理了所有相关的读数据后,它会发出这个信号。互连(interconnect)必须检测到这个信号,并将确认该读事务已经结束。这个信号对于维护系统中的缓存一致性和确保数据传输的正确性至关重要。
3.4写响应通道信号
写响应通道信令是ACE协议中用于指示写事务完成状态的机制。以下是关于写响应通道信令的关键信息:
-
写事务响应信号:通常情况下,写事务没有额外的响应信号。关于基础的写响应信号结构,可以参考A3-59页的信息。
-
写响应顺序:对于单个AXI ID的写响应,其提供顺序与事务在地址写(AW)通道上发起的顺序相同。先行的写数据不会改变写响应的提供顺序。
-
注意事项:
EXOKAY
响应仅允许用于WriteNoSnoop
事务。这意味着,对于不涉及监听其他缓存的写事务,可以使用EXOKAY
响应来指示写操作成功完成,但对于其他类型的写事务,必须使用其他类型的响应来指示事务的状态。
3.5写确认信号
写确认信令是ACE协议中用于指示主设备(Master)已经完成写事务的信号。表D3-17展示了额外的写确认信号。以下是关于写确认信号的详细描述:
-
信号持续时间:
WACK
信号由主设备断言一个周期,互连(interconnect)必须在一个周期内接受WACK
信号。 -
信号断言时机:
WACK
信号不能在与相关BVALID/BREADY
握手完成后的下一个周期之前被断言。WACK
的断言不能延迟,以等待另一个事务的完成。 -
事务类型:写确认信号
WACK
用于所有类型的写事务,包括屏障事务。 -
顺序信息:写确认不包含顺序信息,它的顺序与相关写响应相同。
-
互连处理:互连必须使用写确认来确保,直到同一个主设备针对相同地址的任何先前事务完成后,不会向该主设备的snoop端口发出事务。
信号 | 来源 | 描述 |
---|---|---|
WACK | 主设备(Master) | 写确认信号,指示主设备已经完成了一个写事务。 |
WACK
信号由主设备发出,用于确认写操作已经成功完成。当主设备成功将数据写入目标地址并且写数据通道的BVALID
信号已被消费后,它会发出这个信号。互连(interconnect)必须检测到这个信号,并将确认该写事务已经结束。这个信号对于维护系统中的缓存一致性和确保数
3.6监听地址通道信号
监听地址通道(Snoop Address Channel):这个通道用于在系统中的缓存之间传输监听(snooping)事务。它允许一个缓存主设备监听其他缓存主设备对特定内存地址的读写操作。
3.6.1snoop address channel简介
监听地址通道(AC通道)对于需要执行以下操作的主设备(master)是必要的:
-
持有共享数据的缓存副本:
- 主设备需要监听地址通道来跟踪和维护它所持有的共享数据的缓存副本。这包括监听其他主设备对这些共享数据的访问和修改,以确保缓存一致性和数据的准确性。
-
支持DVM事务:
- 分布式虚拟内存(DVM)事务要求主设备能够跨系统的多个节点管理内存资源。监听地址通道使得主设备能够监听和响应其他节点发起的内存访问请求,从而协调和管理分布式内存系统中的数据共享和一致性。
监听地址通道(AC通道)对于持有共享数据缓存副本、支持DVM(分布式虚拟内存)事务的主设备来说是必需的。
监听地址通道(Snoop Address Channel)是一个输入通道,用于连接到具有缓存的主设备(Cached Master)。该通道的主要作用是传递其他组件发起的监听(Snoop)事务到该缓存主设备,以便主设备能够根据这些事务来决定需要采取的行动。
当缓存主设备接收到监听事务时,它可以根据不同的情况进行响应,这些响应包括但不限于:
-
提供数据:如果缓存主设备拥有请求的缓存行,它可以将这些数据提供给发起监听事务的组件。
-
更新缓存状态:根据监听事务的类型,缓存主设备可能需要更新其缓存行的状态,例如,将其标记为脏(Dirty)或无效(Invalid)。
-
不采取行动:在某些情况下,缓存主设备可能不需要对监听事务做出任何响应,例如,当它没有所请求的数据副本时。
缓存主设备的响应将指导互连(Interconnect)完成监听过程所需的具体行动。例如,如果缓存主设备提供了数据,互连可能需要将这些数据传输给请求的组件。如果缓存主设备表示它拥有唯一的干净副本,互连可能需要确保其他缓存中的相应副本被标记为无效。
补充信息
控制信息在监听地址通道(snoop address channel)是正常地址通道(normal address channel)上控制信息的子集。它提供了足够的信息以进行一致性操作,但不提供不必要的信息。监听地址通道不提供以下信息:
- 突发类型(Burst type):指明了突发传输的模式,例如固定长度或可变长度。
- 突发长度(Burst length):指示突发传输中数据项的数量。
- 事务大小(Transaction size):指明了事务处理的数据量。
- 事务的可修改性或共享性(Modifiable or Shareable nature of the transaction):表明事务是否允许数据被修改或是否是共享的。
- 事务ID(Transaction ID):用于标识事务的唯一标识符。
本质上,监听地址通道提供了与正常读写地址通道相同的事务。然而,有一些例外:
不在监听地址通道上呈现的事务包括:
- 非监听类型的事务,例如:
ReadNoSnoop
、WriteNoSnoop
、WriteBack
、WriteClean
、WriteEvict
、Evict。
- WriteUnique:其他缓存主设备看到的事务是
CleanInvalid
。这确保在写操作发生之前,所有其他缓存行的副本都被清理到主内存并移除。 - WriteLineUnique:其他缓存主设备看到的事务是
MakeInvalid
。这确保在写操作发生之前,所有其他缓存行的副本都被移除。 - MakeUnique:通常,这种事务被转换为
MakeInvalid
事务。 - CleanUnique:通常,这种事务被转换为
CleanInvalid
事务。
有些监听操作可以在不监听系统中每个缓存主设备的情况下完成。因此,缓存主设备的监听地址通道可能不提供每个监听事务。
监听读事务可以通过互连进行调整,以便在获取所需数据后,不再请求对其他主设备的进一步监听。
不需要完整缓存行长度的事务被转换为完整缓存行长度的事务。这些事务包括:
ReadOnce
WriteUnique
这些规则确保了监听地址通道能够有效地支持系统的缓存一致性操作,同时避免了不必要的复杂性和资源消耗。通过这种方式,系统可以维护高效的缓存管理和数据一致性,特别是在多处理器和多缓存环境中。
3.6.2Snoop address channel signaling
表D3-18展示了监听地址通道(Snoop Address Channel)的信号列表,包括它们的来源和描述:
信号名称 | 来源 | 描述 |
---|---|---|
ACVALID | 互连 | 指示监听地址通道信号有效。当此信号有效时,表示监听地址通道上的其他信号携带了有效的事务信息。 |
ACREADY | 主设备 | 指示主设备可以接受监听地址通道上的传输。此信号是主设备用来告知互连它已准备好接收监听请求的。 |
ACADDR[ac-1:0] | 互连 | 监听事务中第一个传输的地址。ac是监听地址总线的宽度,决定了地址信号的数量。 |
ACSNOOP[3:0] | 互连 | 监听事务类型。具体的类型和行为在表D3-19中有详细描述。 |
ACPROT[2:0] | 互连 | 监听事务的保护属性。这些属性定义了事务的权限和安全特性。 |
这些信号共同工作,以支持系统中的缓存监听操作。当一个主设备发起读或写事务时,互连会通过监听地址通道广播事务地址,其他拥有该地址副本的缓存主设备则根据ACSNOOP信号指示的监听类型来响应。ACADDR信号提供了事务的具体地址,而ACPROT信号则提供了关于事务保护属性的信息,这些信息对于确保事务的正确处理和系统的安全性至关重要。
监听地址通道握手规则:
标准AXI有效/就绪握手规则适用于监听地址通道(Snoop Address Channel)。以下是关于握手过程的详细说明:
-
握手规则:
当ACVALID
信号被断言时,监听地址通道上的监听地址和控制信号(ACADDR
、ACPROT
和ACSNOOP
)不得更改,直到主设备断言ACREADY
信号。一旦ACVALID
被断言,它必须保持断言状态,直到ACREADY
被断言。允许在ACVALID
相同周期或之前断言ACREADY
。如果ACREADY
在ACVALID
之前被断言,那么即使ACVALID
没有被断言,ACREADY
也可以被取消断言。 -
地址对齐:
ACADDR
必须根据监听数据总线的宽度(以字节为单位)对齐到数据传输大小。 -
保护属性:
ACPROT[1]
指示监听事务的安全或非安全性质。对于一致性事务,ACPROT[1]
可以被视为定义了两个地址空间:安全地址空间和非安全地址空间,并可以被视为一个额外的地址位。必须正确处理安全和非安全地址空间之间的任何别名。 -
安全和非安全地址空间的一致性:
硬件一致性不管理安全和非安全地址空间之间的一致性。 -
监听事务类型:
并非在读取地址通道或写入地址通道上观察到的所有事务类型都可以在监听地址通道上观察到。表D3-19显示了可以在监听地址通道上观察到的事务的ACSNOOP
编码。所有未使用的编码都是保留的。
表D3-19展示了ACSNOOP
信号的编码和对应的监听事务类型。ACSNOOP[3:0]
是一个四位信号,用于指示在监听地址通道上的监听事务类型:
ACSNOOP[3:0] | 事务类型 |
---|---|
0b0000 | ReadOnce |
0b0001 | ReadShared |
0b0010 | ReadClean |
0b0011 | ReadNotSharedDirty |
0b0111 | ReadUnique |
0b1000 | CleanShared |
0b1001 | CleanInvalid |
0b1101 | MakeInvalid |
0b1110 | DVM Complete |
0b1111 | DVM Message |
监听事务的一些额外注意事项包括:
- 监听事务的突发长度大于一时,必须是包裹型(WRAP)突发类型。
- 监听事务的突发长度为一时,必须是递增型(INCR)突发类型。
- 监听事务必须是一个完整的缓存行长度。
- 如果引起监听过程的原始事务不是完整的缓存行长度,互连必须将其转换为完整的缓存行长度。
- 监听事务必须与监听数据通道的宽度相同。
3.7监听响应通道信号
表D3-20展示了监听响应通道(Snoop Response Channel)的信号列表,包括它们的来源、含义和描述:
信号名称 | 来源 | 含义描述 |
---|---|---|
CRVALID | 主设备 | 监听响应有效。指示监听响应通道信号有效。 |
CRREADY | 互连 | 监听响应就绪。指示可以在接受监听响应通道上的传输。 |
CRRESP[4:0] | 主设备 | 监听响应。读取响应,指示监听传输的状态。 |
这些信号共同工作以完成监听事务的响应过程。当一个主设备接收到来自另一个主设备的监听请求时,它会根据请求的类型和自身的缓存状态来生成一个监听响应。CRVALID
信号表明主设备有一个有效的监听响应准备发送,而CRREADY
信号表明互连已准备好接收这个响应。CRRESP[4:0]
是一个五位的信号,它携带了关于监听操作的状态信息,例如是否成功获取了请求的数据,或者是否需要采取其他行动来维护缓存一致性。
3.7.1监听响应通道握手规则:
标准AXI有效/就绪握手规则适用于监听响应通道(Snoop Response Channel)。以下是关于握手过程的详细说明:
-
握手规则:
当CRVALID
信号被断言时,监听响应必须保持不变,直到互连设置CRREADY
为高电平。一旦CRVALID
被断言,它必须保持断言状态,直到CRREADY
被断言。允许在CRVALID
相同周期或之前断言CRREADY
。如果CRREADY
在CRVALID
之前被断言,那么即使CRVALID
没有被断言,CRREADY
也可以被取消断言。 -
监听响应要求:
对于在监听地址通道上呈现给缓存主设备的每个监听地址,都需要在监听响应通道上有一个监听响应。 -
事务排序:
所有监听事务都是有序的。监听响应通道上的响应必须与监听地址通道上的地址顺序相同。
表D3-21展示了监听响应通道(Snoop Response Channel)中CRRESP
信号的每一位分配及其含义:
信号名称 | 含义描述 |
---|---|
CRRESP[0] | DataTransfer HIGH:指示该事务将在监听数据通道上提供完整的缓存行数据。 LOW:指示该事务不会在监听数据通道上提供数据。 |
CRRESP[1] | Error HIGH:当HIGH时,错误位指示被监听的缓存行出现错误。这通常是由于通过错误更正码(ECC)系统检测到的损坏的缓存行造成的。 LOW:指示未检测到错误条件。 |
CRRESP[2] | PassDirty HIGH:指示在监听过程之前,缓存行处于脏状态,并且将写回主内存的责任传递给发起的主设备或互连。对于所有事务(除了 MakeInvalid ),如果在监听过程之前缓存行处于脏状态且缓存不保留副本,则必须将PassDirty位设置为HIGH。LOW:指示未将写回主内存的责任传递。 |
CRRESP[3] | IsShared HIGH:指示被监听的缓存在监听过程完成后保留了缓存行的副本。 LOW:未保留缓存行的副本。 |
CRRESP[4] | WasUnique HIGH:指示在监听过程之前,缓存行处于唯一的状态。WasUnique位仅在已知没有其他缓存拥有缓存行的副本时才能为HIGH。 LOW:不提供关于监听过程之前缓存行是否处于唯一状态的信息。 |
3.7.2监听响应位的含义和使用限制
如下:
DataTransfer位
- 监听事务类型和被监听缓存中的缓存行状态决定了DataTransfer位是否设置为高电平(HIGH)以及是否发生数据传输。
- 对于以下事务,如果监听过程导致缓存命中,则会发生数据传输:
- ReadOnce
- ReadClean
- ReadNotSharedDirty
- ReadShared
- ReadUnique 如果缓存行是干净的(Clean),数据传输不是必须的。但是,规范建议仍然进行数据传输。
- 对于以下事务,如果监听过程导致缓存命中且缓存行是脏的(Dirty),则必须发生数据传输:
- CleanInvalid
- CleanShared
- MakeInvalid事务从不要求数据传输。
- 即使不需要,DataTransfer位也可以设置为1,并且数据可以在监听数据通道上返回。例如,当CleanInvalid事务持有干净的缓存行时可以返回数据,MakeInvalid事务也可以返回数据。然而,规范不推荐这种使用监听数据通道的方式。
Note:
协议允许在不需要时在监听数据通道上返回数据,这样做的目的是为了简化监听端口的实现。具体来说,这种灵活性允许监听端口以统一的方式处理不同类型的事务,即使在某些事务中实际不需要数据传输。
例如,
MakeInvalid
事务通常用于使缓存行无效,而不是为了获取数据。然而,允许在这种事务中返回数据可以使监听端口的硬件或软件实现更加简单,因为它可以对所有类型的事务使用相同的处理逻辑,而不需要为每种事务类型设计特定的处理流程。同样,
CleanInvalid
事务在某些情况下可能会持有干净的缓存行,而在其他情况下则不会。通过允许在这种事务中返回数据,监听端口可以以与ReadUnique
事务相同的方式处理CleanInvalid
事务,从而进一步简化实现。这种做法有助于减少监听端口的复杂性,并可能提高系统的可靠性和性能,因为它减少了需要处理的不同情况的数量。
然而,需要注意的是,尽管协议允许这种灵活性,但在实际设计中,应该根据具体的系统需求和性能目标来决定是否利用这种灵活性。
错误位(Error bit)
错误位(Error bit)是监听响应通道中的一个信号,用于指示在监听过程中是否检测到错误。当错误位为高电平时,它表示被监听的缓存行出现了错误。这种错误通常是由错误更正码(Error Correction Code,ECC)系统检测到的损坏的缓存行所导致的。
如果检测到错误,被监听的缓存可以采取适当的行动。例如,它可以丢弃一个干净的(Clean)缓存行,以确保系统中的数据一致性不被损坏的缓存行所影响。或者,被监听的缓存可以设置错误位为高电平来标记错误,但不采取进一步的行动。这取决于系统的设计和错误处理策略。
错误位的正确处理对于维护系统的稳定性和数据的完整性至关重要。在多处理器系统中,ECC系统是确保数据可靠性的关键组件,它能够检测并纠正单位错误,或者在无法纠正的情况下标记错误,以便系统能够采取适当的措施。通过这种方式,系统可以持续运行,即使在面对内存错误的情况下也能保持数据的一致性和可靠性。
传递脏位(PassDirty bit)
传递脏位(PassDirty bit)是监听响应通道中的一个信号,用于指示在监听事务中,脏缓存行(Dirty cache line)的写回主内存(main memory)的责任是否可以传递给请求数据的主设备。
对于以下事务,可以将脏缓存行的写回责任传递给请求数据的主设备:
ReadNotSharedDirty
:这种事务类型允许将脏缓存行的写回责任传递给请求数据的主设备。ReadShared
:在共享读事务中,如果缓存行是脏的,责任也可以传递给请求数据的主设备。ReadUnique
:在唯一的读事务中,如果缓存行是脏的,责任同样可以传递给请求数据的主设备。
在其他情况下,例如ReadClean
事务,脏缓存行必须由互连(interconnect)写回主内存。这是因为ReadClean
事务期望获取干净的数据,而脏缓存行需要先写回主内存以确保数据的一致性,然后再从主内存中读取干净的数据。(实现脏共享)
IsShared
位
IsShared
位的使用限制规定了在不同类型的监听事务中,如何确定被监听缓存中缓存行的共享状态,并如何使用IsShared
位来信号这个结果。
-
对于以下事务,被监听缓存中的缓存行必须被无效化,且
IsShared
响应必须设置为LOW(低电平):ReadUnique
:这种事务要求缓存行是唯一的,因此在监听后,其他缓存中的缓存行副本必须被无效化。CleanInvalid
:在这种事务中,缓存行将被标记为无效,因此不应该有其他缓存持有该缓存行的副本。MakeInvalid
:这种事务用于使缓存行无效,通常在这种情况下,不会期望其他缓存保留该缓存行的副本。
-
对于以下事务,被监听缓存可以在监听过程完成后确定是否保留了缓存行的副本,并且被监听缓存必须使用
IsShared
位来指示这个结果:ReadOnce
:这种事务通常用于获取数据的单一副本。ReadClean
:在这种事务中,期望获取干净的数据副本。ReadNotSharedDirty
:这种事务用于读取非共享的脏缓存行。ReadShared
:在共享读事务中,期望保留缓存行的副本。CleanShared
:在这种事务中,缓存行被标记为干净且共享。
通常情况下,被监听缓存在监听过程完成后会保留缓存行的本地副本。然而,也存在不被监听缓存保留本地副本的情况,例如,在响应ReadNotSharedDirty
监听事务时,将缓存行作为唯一副本传递给另一个缓存。
IsShared位解释:
IsShared
域的值用来指示被监听缓存中的缓存行副本是否与其他缓存共享。
IsShared
为1:表示被监听缓存确实保留了缓存行的副本,但这个副本当前不是共享给其他缓存的。这意味着,尽管存在副本,但它被保留为特定主设备的独有副本,不会被其他缓存访问或使用。这通常用于那些需要确保数据不被其他缓存干扰的事务,例如ReadUnique
事务。
IsShared
为0:表示被监听缓存中的缓存行副本是唯一的,没有其他缓存持有该缓存行的副本。在这种情况下,发起监听的主设备可能有权对数据进行独占的读写操作,而不必担心与其他缓存的一致性问题。
WasUnique
位
WasUnique
位是监听响应通道中的一个信号,用于指示在监听事务过程中,被监听的缓存行是否是唯一的,即没有其他缓存持有该缓存行的副本。
-
当
WasUnique
位为高电平时,它允许终止监听过程,因为没有其他缓存持有该缓存行的副本。这意味着,监听可以结束,因为已经确认没有其他缓存需要更新或无效化它们的副本。 -
如果协议允许缓存不生成
WasUnique
响应,在这种情况下,WasUnique
位必须永久设置为低电平。
Note:
- 永久设置
WasUnique
为低电平可能会导致一些问题。首先,它可能导致缓存行被提供给原始请求者时被标记为共享(Shared),而实际上它可以被标记为唯一(Unique)。这可能会导致不必要的性能开销,因为系统可能会继续执行额外的监听操作。其次,它可能导致额外的缓存被不必要地监听,这会增加系统的负载并可能影响性能。
汇总:
缩写解释:
响应位:
- WU (WasUnique):缓存行在这次监听之前处于唯一(Unique)状态。
- IS (IsShared):缓存在这次监听之后保留了这个缓存行的副本。
- PD (PassDirty):缓存行在这次监听之前是脏的(Dirty)。这个响应转移了更新主内存的责任以及数据。
- DT (DataTransfer):对监听事务的响应包括在监听数据通道上的数据传输。
监听事务的缩写:
- RO (ReadOnce):读取一次
- RC (ReadClean):读取清洁
- RN (ReadNotSharedDirty):读取非共享脏
- RS (ReadShared):读取共享
- RU (ReadUnique):读取唯一
- CI (CleanInvalid):清洁无效
- MI (MakeInvalid):使无效
- CS (CleanShared):清洁共享
对于每个事务,是否允许响应如下所示:
- E (Expected response):预期的响应
- P (Permitted response):允许的响应
- No Response not permitted:不允许响应,即该事务不允许产生响应
一些非法配置:
- IsShared, CRRESP[3] = 1 for: ReadUnique, CleanInvalid, MakeInvalid 这意味着在写响应通道中,如果CRRESP[3]位被设置为1,那么对于ReadUnique、CleanInvalid和MakeInvalid这些事务来说,这是非法的。CRRESP[3]位通常用于指示写操作是否成功,如果设置为1,通常表示写操作失败。而ReadUnique、CleanInvalid和MakeInvalid这些事务通常要求写操作能够成功完成,因此这种组合是不被允许的。
- PassDirty, CRRESP[2] = 1, and DataTransfer, CRRESP[0] = 0, for any transaction. 这意味着在任何事务中,如果PassDirty位被设置,同时CRRESP[2]位被设置为1,并且DataTransfer位被设置为0,这是非法的。PassDirty位通常用于指示一个缓存行是否包含脏数据(即已经被修改但尚未写回内存的数据)。CRRESP[2]位通常用于指示写操作是否已经成功提交。DataTransfer位用于指示数据传输是否正在进行。如果PassDirty位被设置,意味着缓存行包含脏数据,而CRRESP[2]位和DataTransfer位的设置则表明写操作尚未提交且数据传输未进行,这是不合理的。 正确的信号设置是确保AXI协议正常工作的关键。设计者和实现者需要遵循AXI协议的规定,避免出现上述非法信号组合,以确保数据传输的正确性和一致性。
3.8监听数据通道信号
当一个处理器或缓存尝试修改其缓存中的某个数据时,snoop数据通道可以用来检查其他缓存是否有该数据的副本,如果有,相应的缓存会更新或使无效它们的副本,以保持数据的一致性。 以下是AXI snoop数据通道中各个信号的来源和描述:
Signal | Source | Description |
---|---|---|
CDVALID | Master | 指示snoop数据通道信号有效。当主设备有snoop请求或响应时,此信号被断言。 |
CDREADY | Interconnect | 指示当前周期内snoop数据可以被接受。由互联结构产生,表明其准备好接收snoop数据。 |
CDDATA[cd-1:0] | Master | Snoop数据,由主设备提供。cd表示snoop数据总线的宽度。 |
CDLAST | Master | 指示当前snoop事务中的最后一次数据传输。由主设备控制,表明数据传输是否结束。 |
3.8.1监听数据通道握手规则:
-
CDVALID信号的作用和要求:
- 当CDVALID信号被主设备(Master)断言时,它表明snoop数据通道上的信号是有效的,包括CDDATA上的snoop数据值和CDLAST上的最后一次传输指示。
- 一旦CDVALID被断言,CDDATA和CDLAST上的值就不能改变,直到互联结构(Interconnect)断言CDREADY信号,表示它已经接受了这些信息。
- CDVALID信号必须保持断言状态,直到CDREADY信号也被断言。
-
CDREADY信号的时机和行为:
- CDREADY信号由互联结构产生,用来指示它当前周期内可以接受snoop数据。
- CDREADY信号的断言可以在CDVALID信号之前,或者与CDVALID信号在同一周期内发生。
- 如果CDREADY在CDVALID之前被断言,那么即使CDVALID没有被断言,CDREADY也可以被取消断言。
-
CDDATA信号的宽度和灵活性:
- CDDATA是snoop数据通道的数据总线,其宽度由
cd
参数定义。 - CDDATA的宽度不需要与读数据和写数据通道的宽度相同。
- 这种设计提供了灵活性,允许根据系统的需求和预期的缓存命中率来调整snoop数据总线的宽度。在缓存命中率较低且传输延迟不关键的场景中,可以实现比读数据和写数据通道更窄的snoop数据总线。
- CDDATA是snoop数据通道的数据总线,其宽度由
这些规则和设计选择有助于优化系统性能,特别是在需要处理大量数据和高带宽需求的情况下。通过合理配置snoop数据通道的信号和总线宽度,可以提高系统的效率和响应速度,同时确保数据的一致性和完整性。
3.8.2监听数据通道的约束:
在AXI协议中,snoop数据总线的宽度和使用受到一系列限制和规则的约束,以确保数据传输的正确性和一致性。以下是关于snoop数据总线宽度、事务类型、传输顺序以及snoop数据通道的可选性等方面的详细说明:
-
snoop数据总线宽度:
snoop数据总线可以是32、64、128、256、512或1024位宽。对于所有缓存行大小的事务,必须使用完整的数据总线宽度,不允许部分宽度的传输。突发传输的长度必须是1、2、4、8或16,这决定了给定缓存行大小的最小和最大数据总线宽度。 -
snoop数据传输要求:
当CDVALID信号被断言时,CDDATA的所有字节通道必须有效,因为snoop数据总线不支持字节脉冲。snoop数据不是每个snoop事务都需要的,只有在snoop响应中DataTransfer位被断言的事务才需要提供snoop数据。当需要提供snoop数据时,数据必须按照与snoop地址通道上呈现的关联snoop地址相同的顺序提供。 -
突发传输类型和顺序:
所有突发长度大于1的snoop事务被定义为WRAP突发类型。在snoop突发中提供数据传输的顺序与标准包裹突发的顺序相同。 -
CDLAST信号的作用:
CDLAST信号必须在与snoop事务相关的最后一个数据传输期间被断言。 -
snoop数据通道的可选性:
snoop数据通道是可选的。然而,任何不支持snoop数据通道的缓存主设备仍然必须在snoop地址通道上支持所有类型的snoop事务。 -
脏数据的处理:
缓存主设备不需要在完成snoop事务时返回脏数据,并且永远不应使用DataTransfer被断言的snoop响应。为实现这一点,缓存主设备要么不保留脏数据,要么在响应必须获取脏缓存行的任何snoop进程之前执行WriteBack或WriteClean操作。此选项与WriteUnique和WriteLineUnique事务不兼容。
解释-脏数据处理:
- 主设备不需要在完成snoop事务时返回脏数据的原因是,snoop事务的主要目的是维护缓存一致性。当一个缓存行被修改时,其他缓存需要知道这一变化,以便它们可以更新自己的副本或将其标记为无效。
- 在某些情况下,主设备可能需要将脏数据写回内存(WriteBack)或先清理(WriteClean)后再响应snoop请求。这样做是为了确保在snoop事务中提供的数据是最新的,并且与其他缓存中的副本保持一致。
- 如果主设备不保留脏数据,那么它就不需要在snoop事务中返回这些数据。相反,它可以简单地响应snoop请求,表明缓存行是脏的,并且需要更新或无效化。
解释-Data Transfer有效时的snoop响应:
- 当Data Transfer位被断言时,确实表示有数据需要传输。然而,在snoop事务的上下文中,Data Transfer位通常用于指示响应snoop请求的数据是否需要被传输回请求者。
- 在某些设计中,snoop响应可能不需要数据传输,而是只需要通知请求者缓存行的状态(例如,它是脏的、干净的或无效的)。在这种情况下,使用Data Transfer位可能会引起混淆,因为它暗示了实际的数据传输。
- 为了避免混淆并确保snoop事务的清晰性,协议规定在snoop响应中不应断言Data Transfer位。这样可以明确区分snoop事务的类型,确保数据传输只在必要时发生。
3.9监听通道依赖性
在AXI协议中,snoop通道是用于维护缓存一致性的关键机制。snoop通道包括snoop地址通道和snoop数据通道,它们之间以及与其他通道(如读地址通道、写地址通道和数据通道)之间存在依赖关系。这些依赖关系确保了在执行缓存操作时,系统能够正确地处理数据传输和一致性请求。
在AXI协议中,信号之间的依赖关系通常通过单向箭头和双向箭头来表示。这些箭头定义了信号的握手顺序,确保了数据传输和缓存一致性操作的正确性。以下是对这些依赖关系的详细解释:
单向箭头:表示信号可以在箭头起点的信号之前或之后被断言。这意味着信号的产生没有严格的顺序要求,可以灵活地根据当前的系统状态和需求来确定。
双向箭头:表示信号只能在箭头起点的信号被断言之后才能被断言。这通常用于确保某些操作的顺序性和依赖性,以避免潜在的冲突和错误。
-
3.9.1ACVALID和ACREADY:
- 互联结构(Interconnect)不需要等待主设备(Master)断言ACREADY就可以断言ACVALID。
- 主设备可以等待ACVALID被断言后再断言ACREADY。
-
3.9.2CRVALID、ACVALID和ACREADY:
- 主设备必须等待ACVALID和ACREADY都被断言后,才能断言CRVALID。
- 在断言CDVALID之前,主设备也必须等待ACVALID和ACREADY都被断言。
-
3.9.3CRVALID、CRREADY和CDVALID:
- 主设备在断言CRVALID时不需要等待互联结构断言CRREADY或CDREADY。
- 如果snoop操作需要数据传输来完成,主设备在断言CDVALID之前不需要等待互联结构断言CRREADY或CDREADY。
-
3.9.4CRVALID、CRREADY、CDVALID和CDREADY:
- 互联结构可以在CRVALID被断言前等待CRREADY或CDREADY的断言。
- 如果需要数据传输,互联结构可以在CDVALID被断言前等待CRREADY或CDREADY的断言。
推荐阅读:
ACE(AXI Coherency Extensions) 协议学习记录1:ACE协议总览
ACE(AXI Coherency Extensions) 协议学习记录2:ACE接口信号
ACE(AXI Coherency Extensions) 协议学习记录3:Channel Signaling(上)