《AMBA 5 CHI Architecture Specification》
文章目录
- 2.1 Channels综述
- 2.2 Channel域段
- 2.2.1 request fields
- 2.2.2 Response fields
- 2.2.3 Snoop request fields
- 2.2.4 Data fields
- 2.3 事务结构
- 2.3.1 Read transactions
- 2.3.1.1 Allocating Read
- 2.3.1.2 Non-allocating Read
2.1 Channels综述
本节使用通道的简写命名来描述事务结构。表2-1显示了Request节点或Subordinate节点组件上存在的简写名称和物理信道名称。
节点之间的通信是基于通道的。表2-1显示了Request节点和Subordinate节点处的信道命名和信道指定。
图解:
2.2 Channel域段
2.2.1 request fields
Field | Description |
---|---|
QoS | Quality of Service priority,为事务指定16个可能的优先级之一,QoS的升序表示更高的优先级。 |
TgtID | Target ID,数据包所要到达的组件上端口的目标节点ID。 |
SrcID | Source ID,发送数据包的组件上端口的源节点ID。 |
TxnID | Transaction ID,每个源节点发起的事务有唯一的事务ID。当每笔响应回到请求节点时可以根据TxnID找到该笔响应对应的请求。 |
ReturnNID | Return Node ID,Data响应、Persist响应或TagMatch响应的接收方节点ID。 例如:节点A发送请求到节点B,正常情况下响应是从节点B到节点A,但是通过配置Return Node ID可以让响应从节点B返回到节点C(可以通过DMT事务了解)。 |
StashNID | Stash Node ID,Stash目标的节点ID。通过stash事务可以将数据送到被配置为Stash Node ID的对等RNF。 例如:系统预测到RNF1需要一笔数据,RNF0发起一个stash事务,Stash Node ID配置为RNF1的节点ID,该笔事务就可一笔送到RNF1。 |
SLCRepHint | System Level Cache Replacement Hint,将cache replacement hints从请求节点转发送到互联中的Cache。 |
StashNIDValid | Stash Node ID Valid,指示StashNID字段具有有效的Stash目标值。 |
Endian | Endianness,指示Atomic事务的数据包中数据的字节序 |
Deep | Deep persistence,指示在将所有早期Write写入最终目标之前,不得发送Persist响应。 |
Return TxnID | Return Transaction ID,唯一的事务ID,用于响应可以找到对应的请求,和ReturnNID一起使用。 |
StashLPIDValid | Stash Logical Processor ID Valid,指示StashLPID字段值必须被视为Stash目标。 |
StashLPID | Stash Logical Processor ID,Stash目标上的逻辑处理器的ID。 StashNID下细分了StashLPID,如果一个Cluster有多个处理器,StashNID指向Cluster,StashLPID指向具体的处理器。 |
Opcode | 请求操作码,指定事务类型,并且是确定事务结构的主要字段。 |
Size | Data size,指定与事务相关联的数据的大小。这决定了事务中数据包的数量。 |
Addr | Address,读取和写入请求所访问的内存位置的地址。 |
NS | Non-secure,结合NSE建立一个物理地址空间(PAS)的访问。 |
NSE | Non-secure Extension,结合NSE建立一个物理地址空间(PAS)的访问。 |
LikelyShared | 为下游cache提供分配提示。 |
AllowRetry | 确定是否允许目标提供“Retry”响应。 |
Order | Order requirement,确定此请求相对于来自同一agent的其他请求的排序要求。 例如:一个核发起读和写需要保证顺序,否则会影响结果。 |
PCrdType | Protocol Credit Type,指示已取消断言AllowRetry字段的请求所使用的协议信用的类型。 |
MemAttr | Memory attribute,确定与事务关联的内存属性。 例如:可以访问Normal Memory也可以访问Device Memory |
SnpAttr | Snoop attribute,指定与事务关联的Snoop属性。 0:Non-snoopable 1:Snoopable |
DoDWT | Do Direct Write Transfer,支持直接写入数据传输(DWT)和组合写入( Combined Writes)的处理。 |
LPID | Logical Processor ID,与SrcID字段一起使用,以唯一标识生成请求的逻辑处理器。 SrcID下细分了LPID,如果一个Cluster有多个处理器,SrcID指向Cluster,LPID指向具体的处理器。 |
PGroupID | Persistence Group ID,指示应用请求的CleanSharedPersistSep事务集。 |
StashGroupID | 指示StashOnceSep请求的事务集。 |
TagGroupID | TagGroupID,通常应包含异常级别、TTBR值和CPU标识符 |
Excl | Exclusive access,指示相应的事务是独占访问事务。 |
SnoopMe | 指示Home必须确定是否在Atomic事务期间向请求程序发送Snoop。 |
CAH | Copy At Home,在CopyBack请求中,向Home指示Requester是否修改了cache line或MTE标记,因为Home指示它保留了行的副本。 |
ExpCompAck | Expect CompAck,指示事务将包括一条完成确认消息。 该bit置位,指示RA收到来自下游的响应会向下游会发送CompAck相应。 |
TagOp | Tag Operation,表示要对相应DAT通道中的tag执行的操作。 |
TraceTag | 为系统的调试、追踪和性能测量( debug、trace、performance measurement)提供额外支持。 |
MPAM | Memory System Performance Resource Partitioning and Monitoring,有效地利用用户之间的内存资源,并监控其使用情况。 |
PBHA | Page-Based Hardware Attributes,来自硬件控制的translation tables的4位。 |
RSVDC | 自定义 |
2.2.2 Response fields
Field | Description |
---|---|
QoS | Quality of Service priority,为事务指定16个可能的优先级之一,QoS的升序表示更高的优先级。 |
TgtID | Target ID,数据包所要到达的组件上端口的目标节点ID。 |
SrcID | Source ID,发送数据包的组件上端口的源节点ID。 |
TxnID | Transaction ID,每个源节点发起的事务有唯一的事务ID。当每笔响应回到请求节点时可以根据TxnID找到该笔响应对应的请求。 |
Opcode | 请求操作码,指定事务类型,并且是确定事务结构的主要字段。 |
RespErr | Response Error status,响应错误状态。 |
Resp | Response status,响应状态。 |
FwdState | Forward State |
DataPull | 指示在数据响应中包含隐含的读取请求。 |
CBusy | Completer Busy,指示Completer的当前活动级别 |
DBID | Data Buffer ID,用作该消息的响应中的TxnID。 |
PGroupID | Persistence Group ID,指示应用请求的CleanSharedPersistSep事务集。 |
StashGroupID | 指示StashOnceSep请求的事务集。 |
TagGroupID | TagGroupID,通常应包含异常级别、TTBR值和CPU标识符 |
PCrdType | Protocol Credit Type,指示已取消断言AllowRetry字段的请求所使用的协议信用的类型。 |
TagOp | Tag Operation,表示要对相应DAT通道中的tag执行的操作。 |
TraceTag | 为系统的调试、追踪和性能测量( debug、trace、performance measurement)提供额外支持。 |
——Note-数字硬鉴——————
CHI-F没有定义Snoop请求的TgtID
——————————————
2.2.3 Snoop request fields
Field | Description |
---|---|
QoS | Quality of Service priority,为事务指定16个可能的优先级之一,QoS的升序表示更高的优先级。 |
SrcID | Source ID,发送数据包的组件上端口的源节点ID。 |
TxnID | Transaction ID,每个源节点发起的事务有唯一的事务ID。当每笔响应回到请求节点时可以根据TxnID找到该笔响应对应的请求。 |
FwdNID | Forward Node ID,通过Snp可以将数据转发到配置为FwdNID的对等RNF。 |
FwdTxnID | Forward Transaction ID,事务ID。 |
StashLPIDValid | Stash Logical Processor ID Valid,指示StashLPID字段值必须被视为Stash目标。 |
StashLPID | Stash Logical Processor ID,Stash目标上的逻辑处理器的ID。 StashNID下细分了StashLPID,如果一个Cluster有多个处理器,StashNID指向Cluster,StashLPID指向具体的处理器。 |
Opcode | 请求操作码,指定事务类型,并且是确定事务结构的主要字段。 |
VMIDExt | Virtual Machine ID Extension。用于DVM事务。 |
Addr | Address,Snoop请求访问的内存位置的地址。 |
NS | Non-secure,结合NSE建立一个物理地址空间(PAS)的访问。 |
NSE | Non-secure Extension,结合NSE建立一个物理地址空间(PAS)的访问。 |
DoNotGoToSD | Do Not Go To SD state,控制Snoopee使用SD状态。 |
RetToSrc | Return to Source,指示snoop的接收节点返回带有snoop响应的数据 |
TraceTag | 为系统的调试、追踪和性能测量( debug、trace、performance measurement)提供额外支持。 |
MPAM | Memory System Performance Resource Partitioning and Monitoring,有效地利用用户之间的内存资源,并监控其使用情况。 |
2.2.4 Data fields
Field | Description |
---|---|
QoS | Quality of Service priority,为事务指定16个可能的优先级之一,QoS的升序表示更高的优先级。 |
TgtID | Target ID,数据包所要到达的组件上端口的目标节点ID。 |
SrcID | Source ID,发送数据包的组件上端口的源节点ID。 |
TxnID | Transaction ID,每个源节点发起的事务有唯一的事务ID。当每笔响应回到请求节点时可以根据TxnID找到该笔响应对应的请求。 |
HomeNID | Home Node ID,要从Requester发送的CompAck响应的目标的节点ID。 |
Opcode | 请求操作码,指定事务类型,并且是确定事务结构的主要字段。 |
RespErr | Response Error status,指示与数据传输相关联的错误状态。 |
Resp | Resp,指示与数据传输关联的Cache line的状态。 |
FwdState | Forward State,指示与从Snoop的receiver到Requester的数据传输相关联的Cache line状态 |
DataPull | 指示在数据响应中包含隐含的读取请求。 |
DataSource | 该值指示读取数据响应中的数据源。 |
CBusy | CBusy,指示Completer的当前活动级别 |
DBID | Data Buffer ID,用作该消息的响应中的TxnID。 |
CCID | Critical Chunk Identifier,复制原始事务请求的地址偏移量。 |
DataID | Data Identifier,提供数据包中数据的地址偏移量。 |
TagOp | Tag Operation,表示要对相应DAT通道中的tag执行的操作。 |
Tag | Memory Tag,提供一组4bit tags,每bit标记与对齐的16字节数据相关联。 |
TU | Tag Update,指示必须更新哪些Allocation Tags |
TraceTag | 为系统的调试、追踪和性能测量( debug、trace、performance measurement)提供额外支持。 |
CAH | Copy At Home,在CopyBack请求中,向Home指示Requester是否修改了cache line或MTE标记,因为Home指示它保留了行的副本。 |
RSVDC | 自定义 |
BE | Byte Enable,对于数据写入,或响应于Snoop而提供的数据,指示哪些字节是有效的。 |
Data | Data payload. |
DataCheck | 检测DAT数据包中的数据错误。 |
Poison | 指示一组数据字节以前已损坏。 |
2.3 事务结构
本节介绍事务可以完成的方式。它显示了参与事务的各个组件可以使用的所有允许选项。
除PCrdReturn和PrefetchTgt外,所有事务类型都可以在事务开始时具有Retry序列。
从Home到Subordinate的一些事务支持使用单独的ReturnNID和ReturnTxnID字段,这允许将某些响应返回给原始Requester,而不是Home。
———Note-数字硬鉴————
本节中的某些消息被描述为“Optional”。这意味着特定message是否包括在事务流中取决于事务的特性,通常是请求中的字段或opcode。
——————————————
名词解释:
Issues:
仅用于事务中的第一条message,例如“请求者发出WriteNoSnp请求”。
Sends:
由agent向远离Requester的方向发送的消息。
Sends a downstream:
由中间agent向远离Requester的方向上中继的消息,例如“Home向下级发送下游Read请求”。
Returns:
由agent向Requester发送的消息。
Provides:
agent为响应Snoop而发送的消息,例如“…提供Snoop响应”。
Permitted, but not required :
这种行动既不鼓励也不抛弃,在任何一种情况下都是可以的。
Not permitted :
所描述的操作将导致不符合规范。例如,“不允许在发送…之前等待…”。
2.3.1 Read transactions
读事务分为以下几类:
- Allocating Read
- Non-allocating Read
2.3.1.1 Allocating Read
Allocating Read事务的顺序如下:
● 事务从Requester向Home发出一个 Allocating Read请求开始。
初始请求是下列请求之一:
— ReadClean
— ReadNotSharedDirty
— ReadShared
— ReadUnique
— ReadPreferUnique
— MakeReadUnique
● 选项1-6显示了Home处理事务的不同方式:
1:组合响应来自Home
Home向Requester返回一个组合的响应和读取的数据,CompData。
通常,当Home可以同时返回数据和响应时,会使用此选项。例如数据在本地Cache。
2:分离的数据和响应来自Home
Home返回一个单独的响应(RespSepData)和读取数据(DataSepResp)给Requester。
3:组合响应来自SN
● Home节点向SN节点发送一个读请求ReadNoSnp。
● 可选地,当Home节点需要ReadReceipt响应时(Order != 00时),SN返回ReadReceipt响应。
● SN返回一个组合的响应和读数据CompData。
通常Home节点使用此选项来减少Message数量或者降低设计的复杂性。(SN直接向RA返回了数据)
4:响应来自Home,数据来自SN
● Home向Requester返回一个单独的响应,RespSepData
● Home向SN发送一个ReadNoSnpSep
● SN向Home返回一个ReadReceipt
● SN返回DataSepResp给RN(Requester Node)。
通常,当Home可以快速返回响应,但它没有可用的数据并且需要SN返回数据时,会使用此选项。
——Note-数字硬鉴————
在许多情况下,RN接收到的RespSepData比接收到的DataSepResp要早得多。RN被允许(但不是必须)在接收到RespSepData后发送CompAck响应,而不需要等待DataSepResp。来自RN的快速响应,以及可能同时接收到的ReadReceipt,使得Home能够比使用来自SN的组合响应更快地完成事务。
————————————
5:Forwarding snoop
● Home请求Snoopee将读取的数据(通过Snp*Fwd)转发给RN。通常,当数据没有在本地缓存并且它确定Snoopee可能有副本时,Home使用此选项。
● Alt 5a: 响应返回至Home
Snoopee返回一个组合响应CompData至RN,返回一个SnpRespFwded至HN。通常,当Snoopee可以将数据转发给RN而不需要向Home提供数据副本时,使用此选项。
● Alt 5b: 数据返回至Home
Snoopee返回一个组合响应CompData至RN,返回一个SnpRespDataFwded至HN。通常,当Snoopee可以将数据转发给RN,但它也必须向Home提供数据副本时,它会使用此选项。例如,当Snoopee持有缓存行的脏副本,但返回给RN的数据必须是干净的时,就会发生这种情况。当Home请求数据副本时也可能发生这种情况。
● Alt 5c: 失败,必须使用alternative
Snoopee向Home提供一个snoop响应,SnpResp。Home必须使用本节中描述的另一种备选方案来完成与RN的事务。(上述1-4)
● Alt 5d: 失败,必须使用alternative
Snoopee向Home提供一个带有数据SnpRespData或SnpRespDataPtl的snoop响应。Home必须使用本节中描述的另一种备选方案来完成与RN的事务。(上述1-4)
6:MakeReadUnique only
Home向RN返回一个完成响应Comp。
此选项仅适用于不需要读取数据消息时的MakeReadUnique事务。
当请求者向Home发送完成确认(CompAck)时,事务结束。CompAck必须在收到CompData或RespSepData后才发送。允许(但不是必须)在发送CompAck之前等待dataseprep。
2.3.1.2 Non-allocating Read
Non-allocating Read transactions顺序如下:
● 事务从RN向Home发出读请求开始。
Non-allocating Read transactions有:
— ReadNoSnp
— ReadOnce
— ReadOnceCleanInvalid
— ReadOnceMakeInvalid
请求包含以下影响事务流的字段:
—Order
—ExpCompAck
1.组合响应来自于Home
● 可选地,当原始请求具有保序要求时(Order!=0),Home将读取收据ReadReceipt返回给请求者。
● Home向RN返回一个组合响应CompData。
2.分离的数据和响应来自于Home
Home返回一个单独的响应(RespSepData)和读取数据(DataSepResp)给RN。
如果请求具有Order需求(Order!=0)并且不需要CompAck,则不能使用此替代方法。
3.组合响应来自于SN
● 可选地,当RN具有保序需求(Order!=-00)时,Home将ReadReceipt返回给RN。
● Home节点向SN发送一个下行读请求ReadNoSnp。
● 可选地,当Home请求ReadReceipt响应时(有Order要求),SN将ReadReceipt返回给Home。当不需要CompAck时,Home必须这样做。允许(但不是必需的)Home在返回ReadReceipt给Requester之前等待从SN的ReadReceipt。
● SN向RN返回一个组合响应CompData。
如果请求具有保序需求并且不需要CompAck,则不能使用此替代方法
4.响应来自于Home,数据来自于SN
● Home向RN返回一个单独的响应RespSepData,并向SN发送一个readnosnp请求。
● 可选地,当Home请求ReadReceipt响应时(有保序要求),SN将向Home返回一个ReadReceipt。Home必须请求一个ReadReceipt,除非原始请求表明对order和CompAck都有要求。
允许(但不是必需的)Home在向请求者返回RespSepData之前等待从从属的ReadReceipt
● SN将读取的数据(DataSepResp)返回给RN。
如果请求具有保序需求并且不需要CompAck,则不能使用此替代方法
5.Forwarding snoop
● 可选地,当原始请求具有order需求时,Home将ReadReceipt返回给RN。
● Home请求Snoopee将读取的数据(通过Snp*Fwd)转发给请求者RN。
● 备选方案5a-5d显示了Snoopee如何处理事务:
Alt 5a 响应返回至Home
● Snoopee向RN提供一个组合响应(CompData)。
● Snoopee向Home提供一个snoop响应SnpRespFwded。
Alt 5b 数据返回至Home
● Snoopee向请求者提供一个组合响应(CompData)。
● Snoopee向Home提供带有SnpRespDataFwded数据的Snoop响应。
Alt 5c 失败,必须使用备选方案
● Snoopee向Home提供一个snoop响应,SnpResp。
● Home必须使用本节中描述的另一种替代方案来完成与RN的事务。
Alt 5d 失败,必须使用备选方案
● Snoopee向Home提供一个带有数据SnpRespData或SnpRespDataPtl的snoop响应。
● Home必须使用本节中描述的另一种替代方案来完成与RN的事务。
● 如果原始请求断言了ExpCompAck,则RN必须在以下内容之后提供一个CompAck响应:
— 至少收到一个CompData报文。
— RespSepData,如果请求没有Order需求。在本例中,允许但不要求等待dataseprep。
— RespSepData和至少一个DataSepResp包,如果请求有Order需求。
如果原始请求有Order需求,则允许(但不是必需)RN在发送CompAck之前等待ReadReceipt。
下表列出来自请求节点的ReadNoSnp和ReadOnce*允许的DMT和DCT事务。
Order [1:0] | ExpCompAck | DMT | DCT | Notes |
---|---|---|---|---|
00 | 0 | Y | Y | Home不需要在事务完成时收到通知。 对于DMT, Home必须从SN获得ReadReceipt,以确保对SN的请求不被给予RetryAck响应。 |
00 | 1 | Y | Y | 当不使用DMT时,不需要通知Home事务完成。 对于DMT,为了确保从HN到SN的请求不被给予RetryAck响应: ●当对SN使用ReadNoSnp时,Home必须从SN获得ReadReceipt,或者等待来自请求节点的CompAck响应 ●当对SN使用readnosnp时,Home必须从SN获得一个ReadReceipt。 |
01 | - | - | - | 不允许 |
10/11 | 0 | N | Y | 对于DCT, Home使用SnpRespFwded或SnpRespDataFwded Snoop响应来确定事务的完成情况。 |
10/11 | 1 | Y | Y | 对于DMT, Home使用CompAck响应来确定事务是否完成。 对于DCT, Home使用SnpRespFwd或SnpRespDataFwded Snoop响应来确定事务的完成情况。 |
对于部分(partial)ReadNoSnp或ReadOnce*事务,即大小小于64B的事务:
● Home不能使用DCT流
● 如果使用DMT流将数据直接从SN转发到RN,则HN必须使用partial ReadNoSnp请求到SN。
● 如果Home不请求DMT流,它可以使用完整Cache line或partial Cache line ReadNoSnp。
Home必须只向RN返回所请求的数据大小。