ACE(AXI Coherency Extensions) 协议学习记录3:Channel Signaling(下)

本章节对应手册中Chapter D3 Channel Signaling章节,详细阐述了ACE接口上的基本信道信令要求。

由于篇幅原因Channel Signal章节计划分为上下两篇内容,

上篇连接:ACE(AXI Coherency Extensions) 协议学习记录3:Channel Signaling(上)

本片为ACE(AXI Coherency Extensions) 协议学习记录3:Channel Signaling(下),主要包括如下内容:

目录

3.2读数据通道信号

3.2.1 read response signaling

3.3读确认信号

3.4写响应通道信号

3.5写确认信号

3.6监听地址通道信号

3.6.1snoop address channel简介

补充信息

3.6.2Snoop address channel signaling

监听地址通道握手规则:

3.7监听响应通道信号

3.7.1监听响应通道握手规则:

3.7.2监听响应位的含义和使用限制

DataTransfer位

错误位(Error bit)

传递脏位(PassDirty bit)

IsShared位

WasUnique位

汇总:

3.8监听数据通道信号

3.8.1监听数据通道握手规则:

3.8.2监听数据通道的约束:

3.9监听通道依赖性


3.2读数据通道信号

3.2.1 read response signaling

接下来的部分将详细说明在读取数据通道上的额外响应和确认信号以及相关约束。


首先,读取数据通道包括以下几个关键信号:

  1. RDATA:包含从内存或缓存返回的数据。
  2. RRESP:响应信号,指示数据传输的状态,例如是否成功或是否有错误发生。
  3. RLAST:指示突发传输的最后一个数据字。
  4. RVALID:有效信号,表明数据和响应有效且可供读取。
  5. RREADY:就绪信号,表明接收器准备好接收数据和响应。

此外,还有一些额外的信号可能用于特定的一致性操作或事务类型:

  • RACK:确认信号,用于确认接收器已经接收并处理了RDATA和RRESP。
  • RERR:错误信号,指示在数据传输过程中发生了错误。

表D3-14展示了读响应信号RRESP的额外位,这些位提供了关于读取操作的状态和缓存行属性的额外信息。以下是这些信号的详细描述:

信号来源名称意义
RRESP[2]互连PassDirty当此位为HIGH时,表示缓存行与主内存相比是脏的(Dirty),发起主设备必须确保缓存行在某个时刻被写回主内存。发起主设备可以自己执行写操作,或者将执行写操作的责任传递给另一个主设备。
当此位为LOW时,表示发起主设备没有责任确保缓存行被写回主内存。
RRESP[3]互连IsShared当此位为HIGH时,表示可能在另一个缓存中持有相关数据的副本,缓存行必须保持在共享(Shared)状态。
当此位为LOW时,表示这是相关数据的唯一缓存副本,缓存行可以保持在唯一(Unique)状态。

IsSharedPassDirty响应具有以下限制条件,这些条件对于确保ACE协议中缓存一致性和数据传输的正确性至关重要:

  1. 突发传输内的一致性

    • 在一个突发传输中的所有数据传输必须保持IsSharedPassDirty响应的恒定性。这意味着,对于一个给定的突发传输,这些响应值从开始到结束都应该是相同的。
  2. 移除其他缓存副本的事务

    • 对于那些要求移除所有其他缓存副本的事务,IsShared响应必须为LOW。这表示这些事务期望操作的数据在缓存中是唯一的,不允许其他缓存持有该数据的副本。
    • 这类事务包括:ReadUniqueCleanUniqueMakeUniqueCleanInvalidMakeInvalid
  3. 不允许传递脏数据的事务

    • 对于那些不允许传递脏数据的事务,PassDirty响应必须为LOW。这表示这些事务要求数据在缓存中是干净的,或者不允许脏数据被传递给其他缓存。
    • 这类事务包括:ReadOnceReadCleanCleanUniqueMakeUniqueCleanSharedCleanInvalidMakeInvalid
  4. 无意义的响应

    • 对于某些事务,IsSharedPassDirty响应必须为LOW,因为这些事务对这些响应没有定义。这些事务包括:ReadNoSnoop、屏障事务(Barrier transactions)和分布式虚拟内存事务(DVM transactions)。
  5. 单个读数据通道传输的事务

    • 有些事务在单个读数据通道传输中完成,这些事务包括:CleanUniqueMakeUniqueCleanSharedCleanInvalidMakeInvalid、屏障事务(Barrier)和分布式虚拟内存事务(DVM)。
    • 这些事务在单个读数据通道传输中完成,并且必须断言RLAST信号。RDATA信号的值可以是任意的,并且应该被忽略。
  6. 响应值的一致性

    • 在一个突发传输中,RRESP[3:2]的值必须保持一致。

通过遵循这些限制,系统可以确保在执行缓存事务时,数据的一致性和缓存行的状态得到正确管理,从而维护数据的完整性和缓存的效率。

表D3-15展示了不同事务类型允许的IsSharedPassDirty响应值。这些响应值对于确定缓存行的共享状态和脏状态非常重要。以下是表格的内容:

事务类型IsSharedPassDirty
ReadNoSnoop00
ReadOnce00
10
ReadClean00
10
ReadNotSharedDirty00
01
10
ReadShared00
01
10
11
ReadUnique00
01
CleanUnique00
MakeUnique00
CleanShared00
10
CleanInvalid00
MakeInvalid00
Read Barrier00
DVM Message00
DVM Complete00

请注意,表中的“(1)”和“(0)”表示在某些情况下,事务类型可能会有不同的IsSharedPassDirty响应值。这通常取决于事务的特定属性或系统的设计要求。

IsShared响应指示是否有其他缓存可能持有数据的副本,而PassDirty响应指示是否允许传递脏数据。这些响应值帮助系统维护缓存一致性,并确保数据的完整性。例如,对于ReadUnique事务,IsSharedPassDirty都为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)是必要的:

  1. 持有共享数据的缓存副本

    • 主设备需要监听地址通道来跟踪和维护它所持有的共享数据的缓存副本。这包括监听其他主设备对这些共享数据的访问和修改,以确保缓存一致性和数据的准确性。
  2. 支持DVM事务

    • 分布式虚拟内存(DVM)事务要求主设备能够跨系统的多个节点管理内存资源。监听地址通道使得主设备能够监听和响应其他节点发起的内存访问请求,从而协调和管理分布式内存系统中的数据共享和一致性。

监听地址通道(AC通道)对于持有共享数据缓存副本、支持DVM(分布式虚拟内存)事务的主设备来说是必需的。

监听地址通道(Snoop Address Channel)是一个输入通道,用于连接到具有缓存的主设备(Cached Master)。该通道的主要作用是传递其他组件发起的监听(Snoop)事务到该缓存主设备,以便主设备能够根据这些事务来决定需要采取的行动。

当缓存主设备接收到监听事务时,它可以根据不同的情况进行响应,这些响应包括但不限于:

  1. 提供数据:如果缓存主设备拥有请求的缓存行,它可以将这些数据提供给发起监听事务的组件。

  2. 更新缓存状态:根据监听事务的类型,缓存主设备可能需要更新其缓存行的状态,例如,将其标记为脏(Dirty)或无效(Invalid)。

  3. 不采取行动:在某些情况下,缓存主设备可能不需要对监听事务做出任何响应,例如,当它没有所请求的数据副本时。

缓存主设备的响应将指导互连(Interconnect)完成监听过程所需的具体行动。例如,如果缓存主设备提供了数据,互连可能需要将这些数据传输给请求的组件。如果缓存主设备表示它拥有唯一的干净副本,互连可能需要确保其他缓存中的相应副本被标记为无效。


补充信息

控制信息在监听地址通道(snoop address channel)是正常地址通道(normal address channel)上控制信息的子集。它提供了足够的信息以进行一致性操作,但不提供不必要的信息。监听地址通道不提供以下信息:

  • 突发类型(Burst type):指明了突发传输的模式,例如固定长度或可变长度。
  • 突发长度(Burst length):指示突发传输中数据项的数量。
  • 事务大小(Transaction size):指明了事务处理的数据量。
  • 事务的可修改性或共享性(Modifiable or Shareable nature of the transaction):表明事务是否允许数据被修改或是否是共享的。
  • 事务ID(Transaction ID):用于标识事务的唯一标识符。

本质上,监听地址通道提供了与正常读写地址通道相同的事务。然而,有一些例外:

不在监听地址通道上呈现的事务包括:

  • 非监听类型的事务,例如:ReadNoSnoopWriteNoSnoopWriteBackWriteCleanWriteEvictEvict。
  • 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)。以下是关于握手过程的详细说明:

  1. 握手规则

    ACVALID信号被断言时,监听地址通道上的监听地址和控制信号(ACADDRACPROTACSNOOP)不得更改,直到主设备断言ACREADY信号。一旦ACVALID被断言,它必须保持断言状态,直到ACREADY被断言。允许在ACVALID相同周期或之前断言ACREADY。如果ACREADYACVALID之前被断言,那么即使ACVALID没有被断言,ACREADY也可以被取消断言。
  2. 地址对齐

    ACADDR必须根据监听数据总线的宽度(以字节为单位)对齐到数据传输大小。
  3. 保护属性

    ACPROT[1]指示监听事务的安全或非安全性质。对于一致性事务,ACPROT[1]可以被视为定义了两个地址空间:安全地址空间和非安全地址空间,并可以被视为一个额外的地址位。必须正确处理安全和非安全地址空间之间的任何别名。
  4. 安全和非安全地址空间的一致性

    硬件一致性不管理安全和非安全地址空间之间的一致性。
  5. 监听事务类型

    并非在读取地址通道或写入地址通道上观察到的所有事务类型都可以在监听地址通道上观察到。表D3-19显示了可以在监听地址通道上观察到的事务的ACSNOOP编码。所有未使用的编码都是保留的。

表D3-19展示了ACSNOOP信号的编码和对应的监听事务类型。ACSNOOP[3:0]是一个四位信号,用于指示在监听地址通道上的监听事务类型:

ACSNOOP[3:0]事务类型
0b0000ReadOnce
0b0001ReadShared
0b0010ReadClean
0b0011ReadNotSharedDirty
0b0111ReadUnique
0b1000CleanShared
0b1001CleanInvalid
0b1101MakeInvalid
0b1110DVM Complete
0b1111DVM 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)。以下是关于握手过程的详细说明:

  1. 握手规则

    CRVALID信号被断言时,监听响应必须保持不变,直到互连设置CRREADY为高电平。一旦CRVALID被断言,它必须保持断言状态,直到CRREADY被断言。允许在CRVALID相同周期或之前断言CRREADY。如果CRREADYCRVALID之前被断言,那么即使CRVALID没有被断言,CRREADY也可以被取消断言。
  2. 监听响应要求

    对于在监听地址通道上呈现给缓存主设备的每个监听地址,都需要在监听响应通道上有一个监听响应。
  3. 事务排序

    所有监听事务都是有序的。监听响应通道上的响应必须与监听地址通道上的地址顺序相同。

表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:不允许响应,即该事务不允许产生响应

一些非法配置:

  1. IsShared, CRRESP[3] = 1 for: ReadUnique, CleanInvalid, MakeInvalid 这意味着在写响应通道中,如果CRRESP[3]位被设置为1,那么对于ReadUnique、CleanInvalid和MakeInvalid这些事务来说,这是非法的。CRRESP[3]位通常用于指示写操作是否成功,如果设置为1,通常表示写操作失败。而ReadUnique、CleanInvalid和MakeInvalid这些事务通常要求写操作能够成功完成,因此这种组合是不被允许的。
  2. 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数据通道中各个信号的来源和描述:

SignalSourceDescription
CDVALIDMaster指示snoop数据通道信号有效。当主设备有snoop请求或响应时,此信号被断言。
CDREADYInterconnect指示当前周期内snoop数据可以被接受。由互联结构产生,表明其准备好接收snoop数据。
CDDATA[cd-1:0]MasterSnoop数据,由主设备提供。cd表示snoop数据总线的宽度。
CDLASTMaster指示当前snoop事务中的最后一次数据传输。由主设备控制,表明数据传输是否结束。

3.8.1监听数据通道握手规则:

  1. CDVALID信号的作用和要求

    • 当CDVALID信号被主设备(Master)断言时,它表明snoop数据通道上的信号是有效的,包括CDDATA上的snoop数据值和CDLAST上的最后一次传输指示。
    • 一旦CDVALID被断言,CDDATA和CDLAST上的值就不能改变,直到互联结构(Interconnect)断言CDREADY信号,表示它已经接受了这些信息。
    • CDVALID信号必须保持断言状态,直到CDREADY信号也被断言。
  2. CDREADY信号的时机和行为

    • CDREADY信号由互联结构产生,用来指示它当前周期内可以接受snoop数据。
    • CDREADY信号的断言可以在CDVALID信号之前,或者与CDVALID信号在同一周期内发生。
    • 如果CDREADY在CDVALID之前被断言,那么即使CDVALID没有被断言,CDREADY也可以被取消断言。
  3. CDDATA信号的宽度和灵活性

    • CDDATA是snoop数据通道的数据总线,其宽度由cd参数定义。
    • CDDATA的宽度不需要与读数据和写数据通道的宽度相同。
    • 这种设计提供了灵活性,允许根据系统的需求和预期的缓存命中率来调整snoop数据总线的宽度。在缓存命中率较低且传输延迟不关键的场景中,可以实现比读数据和写数据通道更窄的snoop数据总线。

这些规则和设计选择有助于优化系统性能,特别是在需要处理大量数据和高带宽需求的情况下。通过合理配置snoop数据通道的信号和总线宽度,可以提高系统的效率和响应速度,同时确保数据的一致性和完整性。


3.8.2监听数据通道的约束:

在AXI协议中,snoop数据总线的宽度和使用受到一系列限制和规则的约束,以确保数据传输的正确性和一致性。以下是关于snoop数据总线宽度、事务类型、传输顺序以及snoop数据通道的可选性等方面的详细说明:

  1. snoop数据总线宽度

    snoop数据总线可以是32、64、128、256、512或1024位宽。对于所有缓存行大小的事务,必须使用完整的数据总线宽度,不允许部分宽度的传输。突发传输的长度必须是1、2、4、8或16,这决定了给定缓存行大小的最小和最大数据总线宽度。
  2. snoop数据传输要求

    当CDVALID信号被断言时,CDDATA的所有字节通道必须有效,因为snoop数据总线不支持字节脉冲。snoop数据不是每个snoop事务都需要的,只有在snoop响应中DataTransfer位被断言的事务才需要提供snoop数据。当需要提供snoop数据时,数据必须按照与snoop地址通道上呈现的关联snoop地址相同的顺序提供。
  3. 突发传输类型和顺序

    所有突发长度大于1的snoop事务被定义为WRAP突发类型。在snoop突发中提供数据传输的顺序与标准包裹突发的顺序相同。
  4. CDLAST信号的作用

    CDLAST信号必须在与snoop事务相关的最后一个数据传输期间被断言。
  5. snoop数据通道的可选性

    snoop数据通道是可选的。然而,任何不支持snoop数据通道的缓存主设备仍然必须在snoop地址通道上支持所有类型的snoop事务。
  6. 脏数据的处理

    缓存主设备不需要在完成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协议中,信号之间的依赖关系通常通过单向箭头和双向箭头来表示。这些箭头定义了信号的握手顺序,确保了数据传输和缓存一致性操作的正确性。以下是对这些依赖关系的详细解释:

  1. 单向箭头:表示信号可以在箭头起点的信号之前或之后被断言。这意味着信号的产生没有严格的顺序要求,可以灵活地根据当前的系统状态和需求来确定。

  2. 双向箭头:表示信号只能在箭头起点的信号被断言之后才能被断言。这通常用于确保某些操作的顺序性和依赖性,以避免潜在的冲突和错误。

  • 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的断言。

推荐阅读:

AMBA中一致性相关协议学习记录0:学习内容概述

ACE(AXI Coherency Extensions) 协议学习记录1:ACE协议总览

ACE(AXI Coherency Extensions) 协议学习记录2:ACE接口信号

ACE(AXI Coherency Extensions) 协议学习记录3:Channel Signaling(上)


  • 28
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值