第12章 链路层
本章描述了链路层,它提供了节点和互连之间通过链路进行基于数据包的通信的简化机制。它包含以下部分:
• 第12-312页的 12.1 引言。
• 第12-313页的 12.2 链路。
• 第12-314页的 12.3 微片。
• 第12-315页的 12.4 通道。
• 第12-317页的 12.5 端口。
• 第12-318页的 12.6 节点接口定义。
• 第12-320页的 12.7 通道接口信号。
• 第12-324页的 12.8 微片数据包定义。
• 第12-329页的 12.9 协议微片字段。
• 第12-353页的 12.10 链路微片。
12.1 引言
链路层提供了节点和互连之间基于数据包的通信的简化机制。
链路层定义了:
• 数据包和微片格式。
• 跨链路的流量控制。
图12-1显示了一个使用基于链路通信的典型系统。

图12-1 使用基于链路通信的系统
图12-1描述: 一个互连接着节点1到节点6。每个节点和互连之间通过链路连接,链路由发送(Tx)和接收(Rx)信号组成。
本章不包含接口奇偶校验信号,这些信号在第9-292页的"接口奇偶校验的使用"中讨论。
12.2 链路
微片通信发生在发送器和接收器对之间。
发送器和接收器之间的连接称为链路。
节点和互连之间的双向通信需要一对链路。图12-2显示了链路需求。

图12-2 双向链路通信
图12-2描述: 一个发送器(TX)连接到一个接收器(RX)形成链路1。另一个接收器(RX)连接到另一个发送器(TX)形成链路2。链路1和链路2共同构成节点和互连之间的双向通信。
12.2.1 出站和入站链路
发送器用于发送数据包的链路被定义为出站链路。
接收器用于接收数据包的链路被定义为入站链路。
图12-3显示了节点处的出站和入站链路。互连接口具有互补的一对链路。

图12-3 出站和入站链路
图12-3描述: 节点包含一个发送器(TX)和一个接收器(RX)。从节点到互连的链路是出站链路,从互连到节点的链路是入站链路。
12.3 微片
微片是链路层中的基本传输单元。
数据包被格式化为微片并通过链路传输。有两种类型的微片:
-
协议微片: 协议微片在其有效载荷中携带一个协议数据包。在本规范中,每个协议数据包都被精确映射到一个协议微片中。
-
链路微片 : 链路微片携带与链路维护相关的消息。例如,在链路去激活序列期间,发送器使用链路微片向接收器返回链路层信用,也称为 L-Credit。
链路微片源自链路发送器,并在链路另一端的链路接收器处终止。
12.4 通道
在本规范中,链路层提供了一组用于微片通信的通道。
每个通道都有定义的微片格式,该格式具有多个字段,并且某些字段宽度具有多个可能的值。在某些情况下,定义的微片格式可以在入站和出站通道上使用。
表12-1显示了通道及其在RN和SN组件通道上的映射。
表12-1 通道在RN和SN组件通道上的映射
| 通道 | 描述 | 用法 | RN 通道 | SN 通道 |
|---|---|---|---|---|
| REQ 请求 | 请求通道传输与请求消息(如读取请求和写入请求)关联的微片。参见第12-320页的 REQ 通道。 | 所有请求 | TXREQ | RXREQ |
| RSP 响应 | 响应通道传输与没有数据有效载荷的响应消息(如写完成消息)关联的微片。参见第12-321页的 RSP 通道。 | 来自完成者的响应 监听响应和完成确认 | RXRSP TXRSP | TXRSP - |
| SNP 监听 | 监听通道传输与监听和 SnpDVMOp 请求消息关联的微片。参见第12-322页的 SNP 通道。 | 所有监听请求 | RXSNP | - |
| DAT 数据 | 数据通道传输与具有数据有效载荷的协议消息(如读完成和写数据消息)关联的微片。参见第12-323页的 DAT 通道。 | 来自 RN 的写数据和监听响应数据 读数据 | TXDAT RXDAT | RXDAT TXDAT |
12.4.1 通道依赖性
协议中通道之间允许存在以下依赖关系。
对于 RN:
-
RN 必须在入站 SNP 通道上推进,而不需要出站 REQ 通道的推进。
-
RN 允许在入站 SNP 通道上推进之前,等待出站 RSP 通道的推进。
-
RN 允许在入站 SNP 通道上推进之前,等待出站 DAT 通道的推进。
-
RN 必须在入站 RSP 通道上推进,而不需要任何其他通道的推进。
-
RN 必须在入站 DAT 通道上推进,而不需要任何其他通道的推进。
注意
RN 必须在入站 RSP 和 DAT 通道上推进,而不需要任何其他通道的推进,这意味着 RN 必须能够接受所有未完成事务的 Comp 和 CompData 响应,而无需发送任何 CompAck 响应。
对于 SN:
-
SN 允许在入站 REQ 通道上推进之前,等待出站 RSP 通道的推进。
-
SN 必须在入站 REQ 通道上推进,而不需要出站 DAT 通道的推进。
-
SN 必须在入站 DAT 通道上推进,而不需要任何其他通道的推进。
12.5 端口
端口定义为节点接口处所有链路的集合。
图12-4显示了链路、通道和端口之间的关系。具体节点要求请参见第12-318页的"节点接口定义",信号细节请参见第12-320页的"通道接口信号"和第13章"链路握手"。

图12-4 链路、通道和端口之间的关系
图12-4描述了一个RN-F节点的端口,包含出站链路和入站链路。 * 出站链路包含: * TXREQFLITPEND, TXREQFLITV, TXREQFLIT, TXREQLCRDV (REQ通道) * TXRSPFLITPEND, TXRSPFLITV, TXRSPFLIT, TXRSPLCRDV (RSP通道) * TXDATFLITPEND, TXDATFLITV, TXDATFLIT, TXDATLCRDV (DAT通道) * TXLINKACTIVEREQ, TXLINKACTIVEACK, TXSACTIVE * 入站链路包含: * RXSNPFLITPEND, RXSNPFLITV, RXSNPFLIT, RXSNPLCRDV (SNP通道) * RXRSPFLITPEND, RXRSPFLITV, RXRSPFLIT, RXRSPLCRDV (RSP通道) * RXDATFLITPEND, RXDATFLITV, RXDATFLIT, RXDATLCRDV (DAT通道) * RXLINKACTIVEREQ, RXLINKACTIVEACK, RXSACTIVE 所有链路集合构成RN-F的端口。
12.6 节点接口定义
节点通过使用节点接口交换链路微片进行通信。本节描述节点接口:
• 请求节点。
• 第12-319页的 从节点。
注意
每个节点用于链路管理的 LINKACTIVE 接口引脚和信号在第13章"链路握手"中描述。
12.6.1 请求节点
本节描述请求节点接口:
• RN-F
• RN-D
• 第12-319页的 RN-I
RN-F
RN-F 接口使用所有通道,并由完全一致的请求者(如核心或集群)使用。图12-5显示了RN-F接口。

图12-5 RN-F 接口
图12-5描述: RN-F节点与ICN(互连)之间的接口。RN-F发送TXREQ、TXRSP、TXDAT,接收RXRSP、RXSNP、RXDAT。ICN相应地接收RXREQ、TXRSP、RXDAT,发送TXRSP、TXSNP、TXDAT。接口包含REQ、RSP、SNP、DAT通道。
RN-D
RN-D 接口使用所有通道,并由处理 DVM 消息的 IO 一致性节点使用。SNP 通道的使用仅限于 DVM 事务。详细信息请参见第8-258页的"DVM事务流"。图12-6显示了RN-D接口。

图12-6 RN-D 接口
图12-6描述: RN-D节点与ICN之间的接口。RN-D发送TXREQ、TXRSP、TXDAT,接收RXRSP、RXSNP、RXDAT。ICN相应地接收RXREQ、TXRSP、RXDAT,发送TXRSP、TXSNP、TXDAT。接口包含REQ、RSP、DAT通道,以及仅用于DVM的SNP通道。
RN-I
RN-I 接口使用除 SNP 通道外的所有通道,并由 IO 一致请求节点(如 GPU 或 IO 桥)使用。由于 RN-I 节点不包含硬件一致性缓存或 TLB,因此不需要 SNP 通道。图12-7显示了RN-I接口。

图12-7 RN-I 接口
图12-7描述: RN-I节点与ICN之间的接口。RN-I发送TXREQ、TXRSP、TXDAT,接收RXRSP、RXDAT。ICN相应地接收RXREQ、TXRSP、RXDAT,发送TXRSP、TXDAT。接口包含REQ、RSP、DAT通道。
12.6.2 从节点
本节描述从节点接口:
• SN-F
• SN-I
SN-F 和 SN-I
SN-F 和 SN-I 接口相同,使用 RX 请求通道、TX 响应通道、TX 数据通道和 RX 数据通道。SN-F 和 SN-I 从互连接收请求消息,并向互连返回响应消息。但是,SN-F 和 SN-I 接收不同类型的事务。图12-8显示了SN-F和SN-I接口。

图12-8 SN-F 和 SN-I 接口
图12-8描述: ICN与SN-F/SN-I节点之间的接口。SN-F/SN-I接收RXREQ、RXDAT,发送TXRSP、TXDAT。ICN相应地发送TXREQ、TXDAT,接收RXRSP、RXDAT。接口包含REQ、RSP、DAT通道。
12.7 通道接口信号
本节描述通道接口。它包含以下部分:
• REQ 通道
• 第12-321页的 RSP 通道
• 第12-322页的 SNP 通道
• 第12-323页的 DAT 通道
12.7.1 REQ 通道
图12-9显示了 REQ 通道接口引脚,其中 R 是 REQFLIT 的宽度。

图12-9 REQ 通道接口引脚
图12-9描述: 发送器和接收器之间的REQ通道接口信号。发送器输出REQFLIT\[(R-1):0\]、TXREQFLITV、TXREQFLITPEND,输入TXREQLCRDV。接收器输入RXREQFLIT、RXREQFLITV、RXREQFLITPEND,输出RXREQLCRDV。
表12-2显示了 REQ 通道接口信号。
表12-2 REQ 通道接口信号
| 信号 | 描述 |
|---|---|
| REQFLITPEND | 请求微片等待。早期指示可能在下一个周期传输请求微片。参见第13-359页的"微片级时钟门控"。 |
| REQFLITV | 请求微片有效。发送器将此信号置为高电平,以指示 REQFLIT[(R-1):0] 何时有效。 |
| REQFLIT[(R-1):0] | 请求微片。请求微片格式的描述请参见第12-324页的"请求微片"。 |
| REQLCRDV | 请求 L-Credit 有效。接收器将此信号置为高电平,以向发送器返回一个请求通道 L-Credit。参见第13-357页的"L-Credit 流量控制"。 |
12.7.2 RSP 通道
图12-10显示了 RSP 通道接口引脚,其中 T 是 RSPFLIT 的宽度。相同的接口用于入站和出站 RSP 通道。

图12-10 RSP 通道接口引脚
图12-10描述: 发送器和接收器之间的RSP通道接口信号。发送器输出RSPFLIT\[(T-1):0\]、TXRSPFLITV、TXRSPFLITPEND,输入TXRSPLCRDV。接收器输入RXRSPFLIT、RXRSPFLITV、RXRSPFLITPEND,输出RXRSPLCRDV。
表12-3显示了 RSP 通道接口信号。
表12-3 RSP 通道接口信号
| 信号 | 描述 |
|---|---|
| RSPFLITPEND | 响应微片等待。早期指示可能在下一个周期传输响应微片。参见第13-359页的"微片级时钟门控"。 |
| RSPFLITV | 响应微片有效。发送器将此信号置为高电平,以指示 RSPFLIT[(T-1):0] 何时有效。 |
| RSPFLIT[(T-1):0] | 响应微片。响应微片格式的描述请参见第12-325页的"响应微片"。 |
| RSPLCRDV | 响应 L-Credit 有效。接收器将此信号置为高电平,以向发送器返回一个响应通道 L-Credit。参见第13-357页的"L-Credit 流量控制"。 |
12.7.3 SNP 通道
图12-11显示了 SNP 通道接口引脚,其中 S 是 SNPFLIT 的宽度。

图12-11 SNP 通道接口引脚
图12-11描述: 发送器和接收器之间的SNP通道接口信号。发送器输出SNPFLIT\[(S-1):0\]、TXSNPFLITV、TXSNPFLITPEND,输入TXSNPLCRDV。接收器输入RXSNPFLIT、RXSNPFLITV、RXSNPFLITPEND,输出RXSNPLCRDV。
表12-4显示了 SNP 通道接口信号。
表12-4 SNP 通道接口信号
| 信号 | 描述 |
|---|---|
| SNPFLITPEND | 监听微片等待。早期指示可能在下一个周期传输监听微片。参见第13-359页的"微片级时钟门控"。 |
| SNPFLITV | 监听微片有效。发送器将此信号置为高电平,以指示 SNPFLIT[(S-1):0] 何时有效。 |
| SNPFLIT[(S-1):0] | 监听微片。监听微片格式的描述请参见第12-326页的"监听微片"。 |
| SNPLCRDV | 监听 L-Credit 有效。接收器将此信号置为高电平,以向发送器返回一个监听通道 L-Credit。参见第13-357页的"L-Credit 流量控制"。 |
12.7.4 DAT 通道
图12-12显示了 DAT 通道接口引脚,其中 D 是 DATFLIT 的宽度。相同的接口用于入站和出站 DAT 通道。

图12-12 DAT 通道接口引脚
图12-12描述: 发送器和接收器之间的DAT通道接口信号。发送器输出DATFLIT\[(D-1):0\]、TXDATFLITV、TXDATFLITPEND,输入TXDATLCRDV。接收器输入RXDATFLIT、RXDATFLITV、RXDATFLITPEND,输出RXDATLCRDV。
表12-5显示了 DAT 通道接口信号。
表12-5 DAT 通道接口信号
| 信号 | 描述 |
|---|---|
| DATFLITPEND | 数据微片等待。早期指示可能在下一个周期传输数据微片。参见第13-359页的"微片级时钟门控"。 |
| DATFLITV | 数据微片有效。发送器将此信号置为高电平,以指示 DATFLIT[(D--1):0] 何时有效。 |
| DATFLIT[(D-1):0] | 数据微片。数据微片格式的描述请参见第12-327页的"数据微片"。 |
| DATLCRDV | 数据 L-Credit 有效。接收器将此信号置为高电平,以向发送器返回一个数据通道 L-Credit。参见第13-357页的"L-Credit 流量控制"。 |
12.8 微片数据包定义
12.8.1 请求微片
本节定义微片格式。请参见:
-
请求微片。
-
第 12-325 页的响应微片。
-
第 12-326 页的侦测微片。
-
第 12-327 页的数据微片。
表 12-6 显示了 REQ 通道包中从位零开始的请求微片格式。
表 12-6 请求微片格式
| 字段 | 字段宽度 | 注释 |
|---|---|---|
| QoS | 4 | - |
| TgtID | 7 至 11 | 宽度由 NodeID_Width 决定 |
| SrcID | 7 至 11 | 宽度由 NodeID_Width 决定 |
| TxnID | 10 | - |
| ReturnNID | 7 至 11 | 用于 DMT |
| StashNID | 7 至 11 | 用于 Stash 事务 |
| StashNIDValid | 1 | 用于 Stash 事务 |
| Endian | 1 | 用于原子事务 |
| Deep | 1 | 用于 CleanSharedPersist* 事务 |
| ReturnTxnID[9:0] | 10 | 用于 DMT |
| {0b0000, StashLPIDValid, StashLPID[4:0]} | 6 | SBZ,用于 Stash 事务,用于 Stash 事务 |
| Opcode | 6 | - |
| Size | 3 | - |
| Addr | 44 至 52 | 宽度由 Req_Addr_Width 决定 |
| NS | 1 | - |
| LikelyShared | 1 | - |
| AllowRetry | 1 | - |
| Order | 2 | - |
| PCrdType | 4 | - |
| MemAttr | 4 | - |
| SnpAttr | 1 | - |
| LPID | 5 | 用于 Excl、ReadNoSnp 和 WriteNoSnp 事务 |
| PGroupID | 5 | 用于 CleanSharedPersistSep 事务 |
| Excl | 1 | 用于 Exclusive 事务 |
| SnoopMe | 1 | 用于原子事务 |
| ExpCompAck | 1 | - |
| TraceTag | 1 | - |
| MPAM | M = 0 或 11 | 无 MPAM 总线,- |
| RSVDC | X = 0, 4, 8, 12, 16, 24, 32 | 无 RSVDC 总线,允许的 RSVDC 总线宽度 - |
| 总计 | R = (121 至 141) + M + X | REQFLIT[(R-1):0] 格式 |
12.8.2 响应微片
表 12-7 显示了 RSP 通道包中从位零开始的响应微片格式。
表 12-7 响应微片格式
| 字段 | 字段宽度 | 注释 |
|---|---|---|
| QoS | 4 | - |
| TgtID | 7 至 11 | 宽度由 NodeID_Width 决定 |
| SrcID | 7 至 11 | 宽度由 NodeID_Width 决定 |
| TxnID | 10 | - |
| Opcode | 4 | - |
| RespErr | 2 | - |
| Resp | 3 | - |
| FwdState | 3 | 用于 DCT |
| DataPull | 3 | 用于 Stash 事务 |
| CBusy | 3 | - |
| DBID[9:0] | 10 | - |
| {0b00000, PGroupID} | 4 | SBZ,用于 CleanSharedPersistSep 事务 |
| PCrdType | 1 | - |
| TraceTag | 1 | - |
| 总计 | T = 58 至 66 | RSPFLIT[(T-1):0] 格式 |
12.8.3 侦测微片
表 12-8 显示了 SNP 通道包中从位零开始的侦测微片格式。
表 12-8 侦测微片格式
| 字段 | 字段宽度 | 注释 |
|---|---|---|
| QoS | 4 | - |
| SrcID | 7 至 11 | 宽度由 NodeID_Width 决定 |
| TxnID | 10 | - |
| FwdNID | 7 至 11 | 宽度由 NodeID_Width 决定 |
| FwdTxnID[9:0] | 10 | 用于 DCT |
| {0b0000, StashLPIDValid, StashLPID[4:0]} | 5 | SBZ,用于 Stash 事务,用于 Stash 事务 |
| {0b00, VMIDExt[7:0]} | 10 | SBZ,用于扩展 VMID 值 |
| Opcode | 5 | - |
| Addr | 41 至 49 | 宽度由 Req_Addr_Width 决定 |
| NS | 1 | - |
| DoNotGoToSD | 1 | - |
| DoNotDataPull | 1 | - |
| RetToSrc | 1 | - |
| TraceTag | 1 | - |
| MPAM | M = 0 或 11 | 无 MPAM 总线,- |
| 总计 | S = 88 至 104 + M | SNPFLIT[(S-1):0] 格式 |
12.8.4 数据微片
表 12-9 显示了 DAT 通道包中从位零开始的数据微片格式。
所需数据微片的数量取决于数据字节数和数据总线宽度。请参见第 2-120 页的数据打包。
数据通道接口支持 128 位、256 位和 512 位的数据总线宽度。定义了三种数据微片格式,分别对应数据通道接口支持的三种数据总线宽度。DataCheck (DC) 字段宽度为零或等于 Data 字段宽度除以 8。Poison (P) 字段宽度为零或等于 Data 字段宽度除以 64。
表 12-9 数据微片字段
| 字段 | 字段宽度 | 注释 |
|---|---|---|
| QoS | 4 | - |
| TgtID | 7 至 11 | 宽度由 NodeID_Width 决定 |
| SrcID | 7 至 11 | 宽度由 NodeID_Width 决定 |
| TxnID | 10 | - |
| HomeNID | 7 至 11 | 宽度由 NodeID_Width 决定 |
| Opcode | 4 | 此字段在 Issue C 之前为 3 位 |
| RespErr | 2 | - |
| Resp | 3 | - |
| {0b0, FwdState} | 4 | SBZ,用于 DCT |
| {0b0, DataPull} | 4 | SBZ,用于 Stash 事务 |
| DataSource[3:0] | 4 | 在响应中指示数据源 |
| CBusy | 3 | - |
| DBID[9:0] | 10 | - |
| CCID | 2 | - |
| DataID | 2 | - |
| TraceTag | 1 | - |
| RSVDC | Y = 0, 4, 8, 12, 16, 24, 32 | 无 RSVDC 总线,允许的 RSVDC 总线宽度 - |
| BE | 16, 32, 64 | - |
| Data | 128, 256, 512 | - |
| DataCheck | DC = 0, 16, 32, 64 | - |
| Poison | P = 0, 2, 4, 8 | - |
| 总计 | D = (210 至 222) + Y + DC + P | 128 位数据 |
| D = (354 至 366) + Y + DC + P | 256 位数据 | |
| D = (642 至 654) + Y + DC + P | 512 位数据 |
12.9 协议微片字段
协议微片由操作码字段中的非零值标识。本节定义的所有微片字段均适用于协议微片。以下各节描述了协议微片字段的编码:
-
TgtID (第 12-330 页)
-
SrcID (第 12-330 页)
-
HomeNID (第 12-330 页)
-
ReturnNID (第 12-330 页)
-
FwdNID (第 12-330 页)
-
LPID (第 12-330 页)
-
PGroupID (第 12-331 页)
-
StashNID (第 12-331 页)
-
StashNIDValid (第 12-331 页)
-
StashLPID (第 12-331 页)
-
StashLPIDValid (第 12-331 页)
-
TxnID (第 12-332 页)
-
ReturnTxnID (第 12-332 页)
-
FwdTxnID (第 12-332 页)
-
DBID (第 12-333 页)
-
Opcode (第 12-334 页)
-
Deep (第 12-338 页)
-
Addr (第 12-339 页)
-
NS (第 12-339 页)
-
Size (第 12-339 页)
-
MemAttr (第 12-340 页)
-
SnpAttr (第 12-340 页)
-
LikelyShared (第 12-341 页)
-
Order (第 12-341 页)
-
Excl (第 12-342 页)
-
Endian (第 12-342 页)
-
AllowRetry (第 12-342 页)
-
ExpCompAck (第 12-343 页)
-
SnoopMe (第 12-343 页)
-
RetToSrc (第 12-343 页)
-
DataPull (第 12-343 页)
-
DoNotGoToSD (第 12-344 页)
-
DoNotDataPull (第 12-345 页)
-
QoS (第 12-345 页)
-
PCrdType (第 12-345 页)
-
TraceTag (第 12-345 页)
-
MPAM (第 12-346 页)
-
VMIDExt (第 12-346 页)
-
Resp (第 12-346 页)
-
FwdState (第 12-348 页)
-
CBusy (第 12-348 页)
-
RespErr (第 12-349 页)
-
Data (第 12-349 页)
-
CCID (第 12-349 页)
-
DataID (第 12-349 页)
-
BE (第 12-351 页)
-
DataCheck (第 12-351 页)
-
Poison (第 12-351 页)
-
DataSource (第 12-351 页)
-
RSVDC (第 12-352 页)
12.9.1 TgtID
与消息关联的目标标识符。消息所指向组件的节点 ID。互连使用它来确定消息发送到的端口。请参见第 2-74 页的事务标识符字段详情。
12.9.2 SrcID
与消息关联的源标识符。发送消息的组件的节点 ID。互连使用它来确定消息发送自哪个端口。请参见第 2-74 页的事务标识符字段详情。
12.9.3 HomeNID
与原始请求关联的 Home 标识符。请求者使用此字段中的值来确定为响应 CompData 而要发送的 CompAck 的 TgtID。请参见第 2-74 页的事务标识符字段详情。
适用于来自从设备和 Home 的 CompData 和 DataSepResp。不适用于所有其他数据消息,且必须为零。
12.9.4 ReturnNID
返回 NID。标识从设备向其发送 CompData 响应、DataSepResp 响应或 Persist 响应的节点。该值可以是 Home 的 NID,也可以是发起事务的请求者的 NID。请参见第 2-74 页的事务标识符字段详情。
适用于从 Home 到从设备的 ReadNoSnp、ReadNoSnpSep、CleanSharedPersistSep 和非存储原子操作。
不适用于所有其他请求,且必须为零。对于 Stash 请求,包中的相同位用于 StashNID。
12.9.5 FwdNID
转发 NID。标识 CompData 响应可转发到的请求者。该值必须是发起事务的请求者的 NID。请参见第 2-74 页的事务标识符字段详情。
适用于 Forward 类型的侦测。
不适用于所有其他侦测请求,且必须为零。
12.9.6 LPID
逻辑处理器标识符。与 SrcID 结合使用,以唯一标识生成请求的逻辑处理器。请参见第 2-98 页的逻辑处理器标识符。
适用于以下请求:
-
用于 Exclusive、不可侦测、不可缓存或设备访问的 ReadNoSnp。
-
用于 Exclusive、不可侦测、不可缓存或设备访问的 WriteNoSnp。
-
用于 Exclusive 访问的 ReadClean、ReadNotSharedDirty 和 ReadShared。
-
用于 Exclusive 访问的 CleanUnique。
对于持久性 CMO 请求,包中的相同位用于 PGroupID。
12.9.7 PGroupID
持久性组 ID。请求者通过将不同的 CleanSharedPersistSep 事务集分组并使用 PGroupID 标识每个组来处理它们。
适用于 CleanSharedPersistSep 请求以及 Persist 和 CompPersist 响应。不适用于所有其他请求和响应,且必须设置为零。
在请求中,当适用时,包中的相同位用于 LPID。
在响应中,当适用时,包中的相同位用于 DBID。
12.9.8 StashNID
Stash NID。标识 stash 请求的目标。当相应的 StashNIDValid 位被断言时,提供有效的 stash 目标值。请参见第 7-255 页的 Stash 目标标识符。
适用于 Stash 请求。
不适用于所有其他请求,且必须为零。对于 ReadNoSnp 和 ReadNoSnpSep 请求,包中的相同位用于 ReturnNID。
12.9.9 StashNIDValid
Stash NID 有效。指示 StashNID 字段是否具有有效值。请参见第 7-255 页的 Stash 目标标识符。适用于 Stash 请求,不适用于所有其他请求,且必须设置为零。
表 12-10 显示了 StashNIDValid 值编码。
表 12-10 StashNIDValid 值编码
| StashNIDValid | 描述 |
|---|---|
| 0 | StashNID 字段值不适用,必须设置为零。 |
| 1 | 请求中的 StashNID 字段具有有效的 Stash 目标。 |
12.9.10 StashLPID
Stash 逻辑处理器 ID。在由 StashNID 指定的请求节点内提供有效的逻辑处理器目标值。请参见第 7-255 页的 Stash 目标标识符。
适用于 Stash 请求和 Stash 类型的侦测请求。
不适用于所有其他请求,且必须为零。对于 ReadNoSnp 请求,包中的相同位用于 ReturnTxnID。
不适用于所有其他侦测请求,且必须为零。对于 Fwd 侦测,包中的相同位用于 FwdTxnID;对于 SnpDVMOp 侦测,包中的相同位用于 VMIDExt。
12.9.11 StashLPIDValid
Stash LPID 有效。指示 StashLPID 字段是否具有有效值。请参见第 7-255 页的 Stash 目标标识符。适用于 Stash 请求和 Stash 类型的侦测请求,不适用于所有其他请求,且必须设置为零。
表 12-11 显示了 StashLPIDValid 值编码。
表 12-11 StashLPIDValid 值编码
| StashLPIDValid | 描述 |
|---|---|
| 0 | StashLPID 字段值不适用,必须设置为零。 |
| 1 | 请求中的 StashLPID 字段具有有效的 Stash 目标。 |
表 12-12 显示了有效的 StashNIDValid 和 StashLPIDValid 编码。
表 12-12 有效的 StashNIDValid 和 StashLPIDValid 编码
| StashNIDValid | StashLPIDValid | 注释 |
|---|---|---|
| 0 | 0 | 未指定 Stash 目标 |
| 0 | 1 | 保留 |
| 1 | 0 | 仅指定了目标 RN |
| 1 | 1 | 同时指定了目标 RN 和 LPID |
12.9.12 TxnID
与消息关联的事务标识符。当来自给定源节点有多个未完成事务时,每个事务将使用唯一的事务 ID。请参见第 2-74 页的事务标识符字段详情。
链路微片没有唯一 ID。表 12-13 显示了链路微片 TxnID 字段值编码。
表 12-13 链路微片 TxnID 编码
| TxnID | 描述 |
|---|---|
| 0x000 | L-Credit 返回 |
| 0x001 至 0x3FF | 保留 |
12.9.13 ReturnTxnID
返回 TxnID。标识从设备在 CompData 和 DataSepResp 响应的 TxnID 字段中必须使用的值。它可以是 Home 为此事务生成的 TxnID,也可以是发起事务的请求者的请求包中的 TxnID。请参见第 2-74 页的事务标识符字段详情。
仅适用于从 Home 到从设备的 ReadNoSnp、ReadNoSnpSep 和非存储原子操作。
不适用于所有其他请求,且必须设置为零。对于 Stash 请求,包中的相同位用于 StashLPID。
12.9.14 FwdTxnID
标识与侦测事务关联的原始请求的 TxnID。请参见第 2-74 页的事务标识符字段详情。
适用于 Forward 类型的侦测。
不适用于所有其他侦测请求,且必须设置为零。对于 Stash 侦测,包中的相同位用于 StashLPID;对于 SnpDVMOp 侦测,包中的相同位用于 VMIDExt。
12.9.15 DBID
数据缓冲区标识符。来自完成者的响应包中的 DBID 字段值用作从请求者发送的 CompAck 或 WriteData 的 TxnID。在带有数据拉取的侦测响应中,此字段值指示要在数据拉取响应消息的 TxnID 字段中使用的值。请参见第 2-74 页的事务标识符字段详情。
12.9.16 Opcode
指定要执行的操作。操作码编码特定于每个通道。请参见:
-
REQ 通道操作码。
-
第 12-336 页的 RSP 通道操作码。
-
第 12-337 页的 SNP 通道操作码。
-
第 12-338 页的 DAT 通道操作码。
REQ 通道操作码
表 12-14 显示了请求通道的操作码。
表 12-14 REQ 通道操作码
| Opcode[5:0] | 请求命令 |
|---|---|
| 0x00 | ReqLCrdReturn |
| 0x01 | ReadShared |
| 0x02 | ReadClean |
| 0x03 | ReadOnce |
| 0x04 | ReadNoSnp |
| 0x05 | PCrdReturn |
| 0x06 | 保留 |
| 0x07 | ReadUnique |
| 0x08 | CleanShared |
| 0x09 | CleanInvalid |
| 0x0A | MakeInvalid |
| 0x0B | CleanUnique |
| 0x0C | MakeUnique |
| 0x0D | Evict |
| 0x0E | 保留 (EOBarrier) |
| 0x0F | 保留 (ECBarrier) |
| 0x10 | 保留 |
| 0x11 | ReadNoSnpSep |
| 0x12 | 保留 |
| 0x13 | CleanSharedPersistSep |
| 0x14 | DVMOp |
| 0x15 | WriteEvictFull |
| 0x16 | 保留 (WriteCleanPtl) |
| 0x17 | WriteCleanFull |
| 0x18 | WriteUniquePtl |
| Opcode[5:0] | 请求命令 |
|---|---|
| 0x19 | WriteUniqueFull |
| 0x1A | WriteBackPtl |
| 0x1B | WriteBackFull |
| 0x1C | WriteNoSnpPtl |
| 0x1D | WriteNoSnpFull |
| 0x1E - 0x1F | 保留 |
| 0x20 | WriteUniqueFullStash |
| 0x21 | WriteUniquePtlStash |
| 0x22 | StashOnceShared |
| 0x23 | StashOnceUnique |
| 0x24 | ReadOnceCleanInvalid |
| 0x25 | ReadOnceMakeInvalid |
| 0x26 | ReadNotSharedDirty |
| 0x27 | CleanSharedPersist |
| 0x28 - 0x2F | AtomicStore |
| 0x30 - 0x37 | AtomicLoad |
| 0x38 | AtomicSwap |
| 0x39 | AtomicCompare |
| 0x3A | PrefetchTgt |
| 0x3B - 0x3F | 保留 |
表 12-15 显示了 AtomicStore 和 AtomicLoad 的子操作码。
表 12-15 AtomicStore 和 AtomicLoad 的子码
| Opcode[5:3] | AtomicStore | AtomicLoad | Opcode[2:0] | 操作 |
|---|---|---|---|---|
| 101 | 000 | ADD | ||
| 001 | CLR | |||
| 010 | EOR | |||
| 110 | 011 | SET | ||
| 100 | SMAX | |||
| 101 | SMIN | |||
| 110 | UMAX | |||
| 111 | UMIN |
RSP 通道操作码
表 12-16 显示了响应通道的操作码。
表 12-16 RSP 通道操作码
| Opcode[3:0] | 响应命令 |
|---|---|
| 0x0 | RespLCrdReturn |
| 0x1 | SnpResp |
| 0x2 | CompAck |
| 0x3 | RetryAck |
| 0x4 | Comp |
| 0x5 | CompDBIDResp |
| 0x6 | DBIDResp |
| 0x7 | PCrdGrant |
| 0x8 | ReadReceipt |
| 0x9 | SnpRespFwded |
| 0xA | 保留 |
| 0xB | RespSepData |
| 0xC | Persist |
| 0xD | CompPersist |
| 0xE - 0xF | 保留 |
SNP 通道操作码
表 12-17 显示了侦测通道的操作码。
表 12-17 SNP 通道操作码
| Opcode[4:0] | 侦测命令 |
|---|---|
| 0x00 | SnpLCrdReturn |
| 0x01 | SnpShared |
| 0x02 | SnpClean |
| 0x03 | SnpOnce |
| 0x04 | SnpNotSharedDirty |
| 0x05 | SnpUniqueStash |
| 0x06 | SnpMakeInvalidStash |
| 0x07 | SnpUnique |
| 0x08 | SnpCleanShared |
| 0x09 | SnpCleanInvalid |
| 0x0A | SnpMakeInvalid |
| 0x0B | SnpStashUnique |
| 0x0C | SnpStashShared |
| 0x0D | SnpDVMOp |
| 0x0E - 0x0F | 保留 |
| 0x10 | 保留 |
| 0x11 | SnpSharedFwd |
| 0x12 | SnpCleanFwd |
| 0x13 | SnpOnceFwd |
| 0x14 | SnpNotSharedDirtyFwd |
| 0x15 - 0x16 | 保留 |
| 0x17 | SnpUniqueFwd |
| 0x18 - 0x1F | 保留 |
DAT 通道操作码
表 12-18 显示了数据通道的操作码。
表 12-18 DAT 通道操作码
| Opcode[3:0] | 数据命令 |
|---|---|
| 0x0 | DataLCrdReturn |
| 0x1 | SnpRespData |
| 0x2 | CopyBackWrData |
| 0x3 | NonCopyBackWrData |
| 0x4 | CompData |
| 0x5 | SnpRespDataPtl |
| 0x6 | SnpRespDataFwded |
| 0x7 | WriteDataCancel |
| 0x8-0xA | 保留 |
| 0xB | DataSepResp |
| 0xC | NCBWrDataCompAck |
| 0xD-0xF | 保留 |
12.9.17 Deep
深度持久性。由请求者使用,指示在所有较早的写入被写入最终目的地之前,不得发送 Persist 响应。
适用于 CleanSharedPersist* 请求。
不适用于所有其他请求,且必须设置为零。
当 Deep 被取消断言时:
-
完成者必须在所有较早的写入到达持久点 (PoP) 后发送 Persist 响应。
-
PoP 是保证在断电后有足够时间使数据持久化的点。
当 Deep 被断言时:
-
-
完成者必须仅在所有较早的写入被写入最终目的地(而不仅仅是 PoP)后才发送 Persist 响应。
-
最终目的地是无需时间即可使数据在断电后持久化的点,从而即使在电池故障时也能保留数据。
如果请求的接收者不支持 Deep 属性,那么它可以忽略该属性值,并将该请求视为 Deep 属性被取消断言。
不得给出错误响应来指示不支持深度持久性。
-
12.9.18 Addr
地址。指定与消息关联的地址。
本规范支持 44 到 52 位的物理地址 (PA)。这允许 REQ 和 SNP 包在 DVM 操作中支持 49 到 53 位的虚拟地址 (VA)。
-
请求消息支持 44 到 52 位的地址字段 Addr[(43-51):0]。
-
侦测消息支持 41 到 49 位的地址字段 Addr[(43-51):3]:
-
Addr[(43-51):6] 指定 64 字节缓存行的对齐地址。
-
Addr[5:4] 指示缓存行内的 16 字节关键块。请参见第 2-123 页的关键块标识符。
-
Addr[3] 在 SnpDVMOp 中相关,对于所有其他侦测包,它是 Don't Care,可以取任何值。
-
12.9.19 NS
非安全。指示非安全访问或安全访问。请参见第 2-110 页的非安全位。
表 12-19 显示了 NS 字段值编码。
表 12-19 NS 值编码
| NS | 描述 |
|---|---|
| 0 | 安全访问 |
| 1 | 非安全访问 |
12.9.20 Size
大小。指定与事务关联的数据的大小。请参见第 2-118 页的数据大小。
表 12-20 显示了 Size 字段值编码。
表 12-20 Size 字段值编码
| Size[2:0] | 字节数 |
|---|---|
| 0b000 | 1 |
| 0b001 | 2 |
| 0b010 | 4 |
| 0b011 | 8 |
| 0b100 | 16 |
| 0b101 | 32 |
| 0b110 | 64 |
| 0b111 | 保留 |
12.9.21 MemAttr
内存属性。与事务关联的内存属性。表 12-21 显示了 MemAttr 值编码。
表 12-21 MemAttr 值编码
| MemAttr[3:0] | 描述 |
|---|---|
| [3] | 分配提示位。指示是否建议接收事务的缓存分配该事务: 0:建议不分配。 1:建议分配。 |
| [2] | 可缓存位。指示可缓存事务,在处理事务时,如果存在缓存,则必须查找该缓存: 0:不可缓存。不需要查找缓存。 1:可缓存。需要查找缓存。 |
| [1] | 设备位。指示与事务关联的内存类型是设备还是正常: 0:正常内存类型。 1:设备内存类型。 |
| [0] | 早期写确认位。指定事务的早期写确认状态: 0:不允许早期写确认。 1:允许早期写确认。 请参见第 2-110 页的内存属性。 |
12.9.22 SnpAttr
侦测属性。指定与事务关联的侦测属性。表 12-22 显示了 SnpAttr 值编码。
表 12-22 SnpAttr 值编码
| SnpAttr | 侦测属性 |
|---|---|
| 0 | 不可侦测 |
| 1 | 可侦测 |
请参见第 2-116 页的侦测属性。
12.9.23 LikelyShared
可能共享。指示请求的数据是否可能与其他 RN 共享。请参见第 2-115 页的可能共享。
表 12-23 显示了 LikelyShared 字段值编码。
表 12-23 LikelyShared 值编码
| LikelyShared | 描述 |
|---|---|
| 0 | 不太可能被另一个 RN 共享 |
| 1 | 可能被另一个 RN 共享 |
12.9.24 Order
指定事务的排序要求。有关排序要求的更多信息,请参见第 2-99 页的排序。
表 12-24 显示了 Order 字段值编码。
表 12-24 Order 值编码
| Order[1:0] | 描述 | 注释 |
|---|---|---|
| 0b00 | 无需排序 | 适用于从 HN-F 到 SN-F 以及 HN-I 到 SN-I 的读取请求。 |
| 0b01 | 请求已接受 | 在所有其他情况下保留 |
| 0b10 | 保留 | |
| 0b11 | 请求排序/有序写观察 | 不适用于从 HN-F 到 SN-F 的请求。 |
| 端点排序,也包括请求排序 | 不适用于从 HN-F 到 SN-F 的请求。 |
12.9.25 Excl
独占。指示相应事务是独占类型事务。Exclusive 位只能与以下事务一起使用:
-
ReadNotSharedDirty
-
ReadShared
-
ReadClean
-
CleanUnique
-
ReadNoSnp
-
WriteNoSnp
表 12-25 显示了 Excl 值编码。
请参见第 6-244 页的独占事务。
表 12-25 Excl 值编码
| Excl | 描述 |
|---|---|
| 0 | 正常事务 |
| 1 | 独占事务 |
12.9.26 Endian
字节序。指示原子事务中数据的字节序。请参见第 2-122 页的字节序。适用于原子请求,不适用于所有其他请求,且必须设置为零。
表 12-26 显示了 Endian 值编码。
表 12-26 Endian 值编码
| Endian | 描述 |
|---|---|
| 0 | 小端序 |
| 1 | 大端序 |
12.9.27 AllowRetry
允许重试。指定请求是在没有 P-Credit 的情况下发送的,并且目标可以确定是否给出重试响应。请参见第 2-131 页的事务重试机制。
表 12-27 显示了 AllowRetry 值编码。
表 12-27 AllowRetry 值编码
| AllowRetry | 描述 |
|---|---|
| 0 | 不允许 RetryAck 响应 |
| 1 | 允许 RetryAck 响应 |
12.9.28 ExpCompAck
期望 CompAck。指示事务将包括 CompAck 响应。表 12-28 显示了 ExpCompAck 值编码。
表 12-28 ExpCompAck 值编码
| ExpCompAck | 描述 |
|---|---|
| 0 | 事务不包括 CompAck 响应 |
| 1 | 事务包括 CompAck 响应 |
12.9.29 SnoopMe
侦测我。指示 Home 必须确定是否向请求者发送侦测。请参见第 2-62 页的原子操作。仅适用于原子请求。
表 12-29 显示了 SnoopMe 值编码。
表 12-29 SnoopMe 值编码
| SnoopMe | 描述 |
|---|---|
| 0 | Home 无需向请求者发送侦测。 |
| 1 | 如果 Home 确定缓存行可能存在于请求者处,则必须向请求者发送侦测。 |
12.9.30 RetToSrc
返回到源。请求被侦测者将缓存行的副本返回给 Home。适用于除 SnpDVMOp 之外的所有侦测。
有关 RetToSrc 位语义,请参见第 4-198 页的将数据与侦测响应一起返回。
12.9.31 DataPull
数据拉取。指示在侦测响应中包含读取请求(也称为数据拉取)。请参见第 7-250 页的侦测请求和数据拉取。
适用于对 Stash 请求的 SnpResp 和 SnpRespData 响应,不适用于所有其他侦测响应。当在 SnpRespData 消息中设置 DataPull 位时,必须在响应的所有包中设置它。
表 12-30 显示了 DataPull 字段值编码。
表 12-30 DataPull 值编码
| DataPull[2:0] | 描述 | 注释 |
|---|---|---|
| 0b000 | 无读取 | |
| 0b001 | 读取 | 在侦测响应中包含数据拉取 |
| 0b010-0b111 | - | 保留 |
12.9.32 DoNotGoToSD
不要转换到 SD 状态。侦测请求中的一个属性,指示是否要求被侦测者不转换到 SD 状态。请参见第 4-199 页的不要转换到 SD。
适用于除以下各项之外的所有侦测请求:
-
SnpUniqueStash 和 SnpMakeInvalidStash
-
SnpStashShared 和 SnpStashUnique
-
SnpDVMOp
当不适用时,必须设置为零。对于 Stash 侦测请求,包中的相同位用于 DoNotDataPull。
表 12-31 显示了 DoNotGoToSD 值编码。
表 12-31 DoNotGoToSD 值编码
| DoNotGoToSD | 描述 |
|---|---|
| 0 | 允许转换到 SD 状态。 |
| 1 | 不允许转换到 SD 状态。 如果已经在 SD 状态,则必须退出 SD 状态以响应侦测。 如果侦测请求是 SnpOnce 或 SnpOnceFwd,被侦测者可以忽略该位值。 |
12.9.33 DoNotDataPull
不要数据拉取。不要将读取请求与侦测响应组合在一起。
DoNotDataPull 与 DoNotGoToSD 共享 SNP 包字段。请参见第 12-326 页的侦测微片。
DoNotDataPull 适用于:
-
SnpUniqueStash
-
SnpMakeInvalidStash
-
SnpStashShared
-
SnpStashUnique
此字段不存在于非 Stash 侦测中。对于除 SnpDVMOp 之外的非 Stash 请求,包中的相同位用于 DoNotGoToSD。
该字段不适用于 SnpDVMOp,且必须设置为零。
表 12-32 显示了 DoNotDataPull 值编码。
表 12-32 DoNotDataPull 值编码
| DoNotDataPull | 描述 |
|---|---|
| 0 | 允许但不需要将数据拉取与 Stash 侦测响应结合。 |
| 1 | 不得将数据拉取与 Stash 侦测响应结合。 |
12.9.34 QoS
服务质量优先级级别。QoS 值递增表示更高的优先级级别。有关更多信息,请参见第 10 章服务质量。
12.9.35 PCrdType
协议信用类型。指示正在授予或返回的信用类型。请参见第 2-131 页的事务重试机制。
表 12-33 显示了 PCrdType 值编码。
表 12-33 PCrdType 值编码
| PCrdType | 描述 |
|---|---|
| 0x0 - 0xF | 分别为 P-Credit 类型 0 到 15。 |
12.9.36 TraceTag
跟踪标记。包中的一个位,用于标记与事务关联的包以进行跟踪。表 12-34 显示了 TraceTag 字段值编码。
请参见第 11 章系统调试、跟踪和监控。
表 12-34 TraceTag 值编码
| TraceTag | 描述 |
|---|---|
| 0 | 包未被标记。 |
| 1 | 包被标记。 |
12.9.37 MPAM
内存系统性能资源分区和监控。用于在用户之间有效利用内存资源并监控其使用情况。请参见第 11-305 页的 MPAM。
12.9.38 VMIDExt
虚拟机标识符扩展。用于将 VMID 值从 8 位扩展到 16 位。请参见第 8-268 页的 DVMOp 有效载荷。
12.9.39 Resp
响应状态。Resp 字段在多微片数据传输的所有数据微片中必须具有相同的值。表 12-35 显示了 Resp 值编码。
表 12-35 Resp 值编码
| Resp[2] | Resp[1:0] | 描述 |
|---|---|---|
| PassDirty。指示响应消息中包含的数据相对于内存是脏的,并且回写缓存行的责任正在传递给响应消息的接收者。 | ||
| 0 | 返回的数据不是脏的。 | |
| 1 | 返回的数据是脏的,并且回写缓存行的责任正在传递。 | |
| 对于侦测响应,此字段指示被侦测的 RN-F 的最终状态。对于完成响应,此字段指示 RN 中的最终状态。对于写数据响应,此字段指示发送数据时 RN 中数据的状态。 |
表 12-36 显示了不同消息类型的有效 Resp 值编码。
表 12-36 不同消息类型的有效 Resp 值编码
| 响应类型 | Resp[2:0] | 状态 | 注释 |
|---|---|---|---|
| 侦测响应 | 0b000 | I | 被侦测的 RN-F 的最终状态。 |
| 0b001 | SC | ||
| 0b010 | UC, UD | ||
| 0b011 | SD | ||
| 0b100 | I_PD | 被侦测的 RN-F 的最终状态。更新内存的责任传递给 Home。 | |
| 0b101 | SC_PD | ||
| 0b110 | UC_PD | ||
| 0b111 | - | 保留。 |
| 响应类型 | Resp[2:0] | 状态 | 注释 |
|---|---|---|---|
| 完成响应 | 0b000 | I | 请求的 RN-F 的最终状态。 |
| 0b001 | SC | ||
| 0b010 | UC | ||
| 0b011 | - | 保留。 | |
| 0b100 | - | ||
| 0b101 | - | ||
| 0b110 | UD_PD | 请求的 RN-F 的最终状态。更新内存的责任传递给请求者。 | |
| 0b111 | SD_PD | ||
| 写数据响应 | 0b000 | I | 发送数据时 RN-F 处缓存行的状态。 |
| 0b001 | SC | ||
| 0b010 | UC | ||
| 0b011 | - | 保留。 | |
| 0b100 | - | ||
| 0b101 | - | ||
| 0b110 | UD_PD | 发送数据时 RN-F 处缓存行的状态。更新内存的责任传递给 Home。 | |
| 0b111 | SD_PD |
12.9.40 FwdState
转发状态。指示从被侦测者发送给请求者的 CompData 中的状态。适用于 SnpRespFwded 和 SnpRespDataFwded,不适用于所有其他侦测响应,且必须设置为零。
表 12-37 显示了 FwdState 值编码。
表 12-37 FwdState 值编码
| FwdState[2:0] | 描述 |
|---|---|
| FwdState[2] | PassDirty。 |
| 0 | 转发的数据不是脏的。 |
| 1 | 转发的数据是脏的,并且回写缓存行的责任传递给请求者。 |
| FwdState[1:0] | 指示请求者处的最终状态。请参见表 12-38。 |
表 12-38 列举了 FwdState 值编码。
表 12-38 有效的 FwdState 值编码
| FwdState[2:0] | 状态 | 注释 |
|---|---|---|
| 0b000 | I | 请求者处的最终状态。 |
| 0b001 | SC | |
| 0b010 | UC | |
| 0b011 | - | 保留。 |
| 0b100 | - | |
| 0b101 | - | |
| 0b110 | UD_PD | 请求者处的最终状态。更新内存的责任传递给请求者。 |
| 0b111 | SD_PD |
12.9.41 CBusy
完成者忙碌。一种让事务完成者指示其当前活动级别的机制。CBusy 值编码由具体实现定义。请参见第 11-307 页的完成者忙碌。
12.9.42 RespErr
响应错误。此字段指示响应的错误状态。请参见第 9 章错误处理。
表 12-39 显示了 RespErr 值编码。
表 12-39 RespErr 值编码
| RespErr[1:0] | 描述 |
|---|---|
| 0b00 | 正常成功。指示: • 正常访问成功。 • 独占访问失败。 |
| 0b01 | 独占成功。指示独占访问的读取或写入部分成功。 |
| 0b10 | 数据错误。 |
| 0b11 | 非数据错误。 |
12.9.43 Data
数据有效载荷。这是在数据包中传输的数据有效载荷。
支持以下数据总线宽度:
-
128 位
-
256 位
-
512 位
请参见第 2-120 页的数据打包。
12.9.44 CCID
关键块标识符。CCID 指示正在请求的数据的关键 128 位块。请参见第 2-123 页的关键块标识符。
表 12-40 显示了 CCID 值编码。
表 12-40 CCID 值编码
| CCID[1:0] | 关键数据块 |
|---|---|
| 0b00 | Data[127:0] |
| 0b01 | Data[255:128] |
| 0b10 | Data[383:256] |
| 0b11 | Data[511:384] |
12.9.45 DataID
数据标识符。DataID 指示正在传输的 512 位缓存行内数据块的相对位置。请参见第 2-120 页的数据打包。
表 12-41 显示了 DataID 值编码。
表 12-41 不同数据宽度的 DataID 和包内的字节
| DataID | 数据宽度 128 位 | 256 位 | 512 位 |
|---|---|---|---|
| 0b00 | Data[127:0] | Data[255:0] | Data[511:0] |
| 0b01 | Data[255:128] | 保留 | 保留 |
| 0b10 | Data[383:256] | Data[511:256] | 保留 |
| 0b11 | Data[511:384] | 保留 | 保留 |
12.9.46 BE
字节使能。指示与此字节使能位对应的数据字节是否有效。BE 字段是为写数据、DVM 有效载荷和侦测响应数据传输定义的。对于读响应数据传输,此字段不适用,可以取任何值。它由 DAT 微片中每个数据字节的一个位组成。请参见第 2-119 页的字节使能。
表 12-42 显示了 BE 值编码。
表 12-42 BE 值编码
| BE | 字节使能 |
|---|---|
| 0 | 对应的数据字节无效。 |
| 1 | 对应的数据字节有效。 |
12.9.47 DataCheck
数据检查。用于为对应的数据字节提供 DataCheck 位。请参见第 9-291 页的数据检查。
12.9.48 Poison
毒化。指示与 Poison 位对应的 64 位数据块是否被毒化,即存在错误,并且不得被使用。请参见第 9-290 页的毒化。
表 12-43 显示了 Poison 值编码。
表 12-43 Poison 值编码
| Poison | 64 位块毒化 |
|---|---|
| 0 | 对应的 64 位块未被毒化。 |
| 1 | 对应的 64 位块被毒化。 |
12.9.49 DataSource
数据源。标识数据响应的发送者。请参见第 11-302 页的 DataSource 值分配。
适用于读取和原子事务中的 CompData 和 DataSepResp 响应,以及非 Stash 类型侦测事务中的 SnpRespData 和 SnpRespDataPtl 响应。DataSource 不适用于所有其他响应,且必须设置为零。
表 12-44 显示了 DataSource 值编码。
表 12-44 DataSource 值编码
| DataSource | 描述 | 注释 |
|---|---|---|
| 0b0000 | 不支持 DataSource | |
| 0b0001 | 由实现定义 | 仅适用于非内存组件 |
| 0b0110 | PrefetchTgt 有用 | 请参见第 11-303 页的建议 DataSource 值 |
| 0b0111 | PrefetchTgt 无用 | 来自内存的指示,表明先前发送的预取有用或内存收到了预取。 |
| 0b1000 | 由实现定义 | 来自内存的指示,表明先前发送的预取无用或内存未收到预取。 |
| - 0b0101 | ||
| - 0b1111 |
12.9.50 RSVDC
保留供客户使用。在协议微片中任何值都是有效的。该字段通过互连的传播由实现定义。
此字段适用于 REQ 和 DAT 通道,如下所示:
-
此字段的存在是可选的。
-
允许的字段宽度为 4 位、8 位、12 位、16 位、24 位和 32 位。
-
字段宽度:
-
REQ 和 DAT 通道之间可以不同。
-
在系统中不必在所有 REQ 通道上都相同。
-
在系统中不必在所有 DAT 通道上都相同。
当连接具有不匹配 RSVDC 宽度的 TX 和 RX 微片接口时:
-
-
接口两侧必须连接 RSVDC 字段的相应低位。
-
RX 接口上那些在 TX 接口上没有对应位的高位 RSVDC 位必须接低电平。
12.10 链路微片
链路微片用于在链路去激活序列期间向接收方返回 L-Credit。链路微片起源于链路发送端,终止于链路另一侧的链路接收端。
链路微片由操作码字段中的零值标识。链路微片的 TxnID 字段必须为零。其余字段未使用,可以是任何值。有关链路微片类型编码,请参见第 12-334 页的操作码。