UCIE协议1.0(三)--中文翻译版

3.0 Die-to-Die Adapter

Die-to-Die适配器的职责包括:
• 可靠的数据传输(在适用时执行CRC计算和重传,或进行奇偶校验计算)
• 管理仲裁和多路复用(针对多个协议层)
• 链路状态管理
• 与远程链路伙伴进行协议和参数协商。
图21展示了适配器功能的高级描述。

适配器通过一个或多个Flitaware Die-to-Die接口(FDI)与协议层进行接口连接,并通过原始Die-to-Die接口(RDI)与物理层进行接口连接。有关接口细节和操作,请参阅第8.0章。
D2D适配器必须遵循与协议层相同的规则,以满足协议互操作性的要求。图22显示了协议层和适配器的示例配置,其中协议标识符(例如PCIe)仅表示协议,而不表示Flit格式。为了提供成本和效率的权衡,UCIe允许在同一物理链路上多路复用两个协议栈。当每个协议栈需要物理层提供带宽的一半时,支持在同一物理链路上多路复用两个协议栈。如果支持并协商了此功能,则适配器必须保证不会在链路上连续发送来自同一协议栈的Flit。为了避免由于物理链路速度和RDI接口带宽之间的速率不匹配而引起的突发,如果第二个协议层没有插入Flit,或者在适配器暂停数据流之前,适配器需要在协议Flit之后插入一个NOP Flit。请注意,没有来自不同协议层的Flit交替的固定模式;例如,来自协议栈0的Flit后跟一个NOP Flit,再跟一个来自协议栈0的Flit是一种有效的传输模式。NOP Flit被定义为Flit头中的协议标识符对应于D2D适配器,并且Flit的主体填充有全0数据(NOP Flit适用于适配器支持的所有Flit格式,包括68B Flit)。只要适配器保证不会连续发送任何协议层的Flit,NOP Flit可以绕过重传缓冲区。在接收端,适配器不能将这些NOP Flit转发到协议层。接收的协议层必须能够以相同的速率接收;即,它可以以最大链路速度接收连续的相同Flit块,但不会接收连续的Flit。除了传输速率外,两个协议栈必须使用相同的协议和Flit格式,并且此配置仅适用于适配器插入Flit头字节的格式。每个协议栈都被赋予一个单一的位协议栈标识符,该标识符随Flit头一起传递,用于在接收端对Flit进行解复用。所示的Stack Mux为每个协议栈维护独立的链路状态机。与链路状态转换相关的旁路消息也具有唯一的消息代码,以标识受该消息影响的哪个协议栈的链路状态管理。
以下各节详细描述了适配器的功能细节。

3.1 Link Initialization

链路初始化在主通道上开始协议Flit传输之前需要经过四个阶段。图23显示了UCIe链路初始化流程中涉及的高级步骤。第0阶段是特定于每个芯片的,并且独立进行;图23中的相应方框大小不同,表示不同的芯片完成第0阶段所需的时间可能不同。第1阶段涉及旁路检测和训练。第2阶段涉及主通道训练和修复。第1和第2阶段的详细信息在第4.0章中给出。第3阶段涉及适配器之间的参数交换,以协商协议和Flit格式,并在第3.1.1节中进行了介绍。

3.1.1 Stage 3 of Link Initialization: Adapter Initialization

当RDI状态机转移到Active状态时,第2阶段完成。将状态从Reset转换到Active的RDI初始化流程在第8.1.6节中描述。一旦第2阶段完成,适配器必须按照一系列步骤来确定本地能力,完成参数交换,并将FDI状态机置为Active状态。

3.1.1.1 Part 1: Determine Local Capabilities

适配器必须确定物理层训练的结果,以及在给定的链路速度和配置下是否需要进行重传。请参考第3.7节,了解何时必须为链路操作启用重传的规则。如果适配器支持重传,它必须在参数交换过程中向远程链路告知此功能。对于UCIe Retimers,适配器还必须确定要为Retimer接收缓冲区的credit数。每个credit对应于256B的主通道数据存储空间。

3.1.1.2 Part 2: Parameter Exchange with remote Link partner

以下是链路之间必须协商的能力列表。如果启用了这些能力,则使用辅助带宽消息将它们传输给远程链路。在下面的部分中,“广播”表示相应的位在{AdvCap.Adapter}辅助带宽消息中为1b。

  1. "Raw_Mode":如果UCIe链路控制寄存器中的相应位为1b,则广播此参数。软件/固件根据系统使用情况来启用此功能。如果不支持PCIe或CXL协议,并且要协商不带任何供应商特定扩展的流媒体协议,则"Raw_Mode"必须为1b并进行广播。
  2. "68B Flit Mode":这是一个协议参数。如果适配器和协议层支持CXL 68B Flit Mode或PCIe非Flit Mode,则必须广播此参数。如果PCIe非Flit Mode是最终协商的协议,则将使用CXL 2.0规范中定义的CXL.io 68B Flit Mode格式。
  3. "CXL 256B Flit Mode":这是一个协议参数。如果适配器和协议层支持CXL 256B Flit Mode,则必须广播此参数。
  4. "PCIe Flit Mode":这是一个协议参数。如果适配器和协议层支持PCIe Flit Mode,则必须广播此参数。
  5. "Streaming":这是一个协议参数。如果适配器和协议层支持原始模式下的流媒体协议,并且启用了此能力,则必须广播此参数。
  6. "Retry":如果适配器支持重传,则必须广播此参数。如果适配器确定需要重播,但未广播或协商"Retry",则链路无法运行,除非链路在"Raw_Mode"下运行。
  7. "Multi_Protocol_Enable":仅当适配器连接到对应于两组协议层的多个FDI实例时,才必须广播此参数。仅当适配器(或链路初始化的第0阶段中的SoC固件)确定UCIe链路必须以此模式运行时,才能广播此参数。如果广播了此位,则"Stack0_Enable"和"Stack1_Enable"必须为1b。
  8. "Stack0_Enable":如果对应于Stack 0的协议层存在并已启用以支持广播的协议,则必须广播此参数。
  9. "Stack1_Enable":如果对应于Stack 1的协议层存在并已启用以支持广播的协议,则必须广播此参数。
  10. "CXL_LatOpt_Fmt5":如果适配器和协议层支持第3.2.4节中定义的格式5,则必须广播此参数。协议层不利用此Flit格式中的多余字节。如果不支持或未启用CXL协议和CXL的256B Flit Mode,则不得广播此参数。
  11. "CXL_LatOpt_Fmt6":如果适配器和协议层支持第3.2.4节中定义的格式6,则必须广播此参数。协议层利用此Flit格式中的多余字节。如果不支持或未启用CXL协议和CXL的256B Flit Mode,则不得广播此参数。
  12. "Retimer":如果UCIe Retimer的适配器正在与其封装内的UCIe Die进行参数交换,则必须广播此参数。
  13. "Retimer_Credits":这是一个9位值,用于广播Retimer接收缓冲区中可用的总信用数。每个信用对应于256B的数据。
  14. "DP":下游端口设置此位,以通知远程链路它是一个下游端口。对于Retimers来说,这对于识别它们是否连接到下游端口的UCIe Die非常有用。目前,它仅适用于PCIe和CXL协议,但流媒体协议不排除使用此位。如果"Retimer"设置为1b,则此位必须设置为0b。
  15. "UP":上游端口设置此标志,以通知远程链路它是一个上游端口。这对于Retimer来说很有用,可以识别它们是否连接到上游端口的UCIe芯片。目前,这仅适用于PCIe和CXL协议,但不排除流媒体协议利用此位。如果"Retimer"设置为1b,则此位必须设置为0b。

一旦确定了本地能力,适配器会发送{AdvCap.Adapter}辅助带宽消息,向远程链路广告其能力。如果要广告PCIe或CXL协议支持,上游端口(UP)适配器必须等待下游端口(DP)适配器的第一条消息,查看DP广告的能力,然后发送自己的广告能力的辅助带宽消息。UP可以根据DP的能力更改其广告的能力。一旦下游端口接收到来自UP的能力广告消息,它会用{FinCap.Adapter}辅助带宽消息作为最终配置向UP响应,如图24所示。请参考第6.1.2.3节,了解相关辅助带宽消息的消息格式。

协议参数的最终配置确定:

  • 如果两个链路都广告了"68B Flit Mode",则在{FinCap.Adapter}消息中将其设置为1b。如果两个链路都广告了"CXL 256B Flit Mode",则在{FinCap.Adapter}消息中将其设置为1b。
  • 如果两个链路都广告了"PCIe Flit Mode",则在{FinCap.Adapter}消息中将"PCIe Flit Mode"位设置为1b。
  • 如果两个链路都广告了"Streaming",则在{FinCap.Adapter}消息中将其设置为1b。

如果在{FinCap.Adapter}消息中设置了"68B Flit Mode"或"CXL 256B Flit Mode",则必须使用{AdvCap.CXL}和{FinCap.CXL}消息进行另一个参数交换的握手,以确定与此模式相关的详细信息。这个额外的握手在图25中显示。{FinCap.CXL}和{FinCap.Adapter}的组合确定了协议和Flit格式。请参考第6.1.2.3节,了解相关辅助带宽消息的消息格式。请参考第3.3节,了解如何确定协议和Flit格式。

其他参数的最终配置确定:

  • 如果两个链路都广告了"Raw_Mode",则在{FinCap.Adapter}消息中将其设置为1b。
  • 如果两个链路都广告了"Retry",则启用适配器重传,并在{FinCap.Adapter}消息中将"Retry"设置为1b。
  • 如果两个链路都广告了"Multi_Protcol_Enable",则适配器启用了Stack0和Stack1,并在{FinCap.Adapter}消息中将这三个参数("Multi_Protcol_Enable"、"Stack0_Enable"和"Stack1_Enable")设置为1b。
  • 如果未协商"Multi_Protocol_Enable",则使用最低公共分母确定是否启用Stack0或Stack1,并在{FinCap.Adapter}消息中将相应的位设置为1b。如果两个Stack使能都被广告,则选择Stack0作为操作模式,并且只在{FinCap.Adapter}消息中将Stack0_Enable设置为1b。
  • 如果两个链路都广告了"CXL_LatOpt_Fmt5",则在{FinCap.Adapter}消息中将其设置为1b。
  • 如果两个链路都广告了"CXL_LatOpt_Fmt6",则在{FinCap.Adapter}消息中将其设置为1b。

如果没有广告PCIe或CXL协议,并且要协商流媒体协议,那么没有DP和UP的概念,每一方独立地广告其能力。如果需要为流媒体协议协商供应商特定的扩展,可以允许交换额外的供应商定义的辅助带宽消息。如果没有协商供应商特定的扩展,最终配置将隐式确定为原始模式。对于流媒体协议,不发送{FinCap.*}消息。适配器必须事先确定供应商特定的要求,例如在设计集成或链路启动的Stage 0期间。

适配器必须实现8ms的超时以完成参数交换。计时器只在RDI处于活动状态时递增。如果适配器从远程链路伙伴接收到{AdvCap..Stall}或{FinCap..Stall}消息,则计时器必须复位。UCIe Retimer必须确保在与其封装内的UCIe芯片进行参数交换之前,解决与远程Retimer伙伴的能力广告(并与其自己的能力合并)。在解决过程中,它们必须每4ms发送一次相应的停顿消息,以确保UCIe封装内的UCIe芯片不会超时。

3.1.1.3 Part 3: FDI bring up

一旦参数交换成功完成,适配器将结果反映到FDI上的协议层,并按照第8.2.7节中定义的FDI启动流程进行操作。一旦FDI处于活动状态,就完成了链路初始化的第3阶段,协议Flit传输可以开始。在同一个UCIe链路上协商了两个协议栈用于操作的情况下,必须针对每个协议栈独立执行FDI启动流程。

FDI上的数据宽度是UCIe协议栈操作频率和通过UCIe物理链路传输的总带宽的函数(后者取决于Lane的数量和Lane操作的速度)。RDI上的数据宽度固定为由适配器控制的每个物理Lane每个模块至少一个字节。本章中的格式示例显示了RDI映射到UCIe物理层上的64个Lane模块的高级封装配置的示例配置。

3.2 Modes of operation and Protocols

3.2.1 Raw Mode for all protocols

原始模式只能用于不需要适配器支持重传的场景。如果针对CXL或PCIe协议协商了原始模式,那么适配器将在协议层和物理层之间传输数据而不进行任何修改。图26显示了在FDI和RDI上使用64B数据路径的示例。在参数协商过程中,这被标识为格式1。

3.2.2 CXL 2.0 or "CXL 68B-Enhanced Flit Mode"

在UCIe上,这个Flit格式被标识为格式2或格式7。当支持CXL 2.0(格式2)或"CXL 68B-Enhanced Flit Mode"(格式7)协议时,对此的支持是强制性的。

协议层发送64字节的协议信息。适配器在其前面添加了两个字节的Flit头部和两个字节的CRC后缀。当需要来自适配器的重传时,表12给出了格式2或格式7的Flit头部格式;如果不需要来自适配器的重传,则Flit头部格式在表11中提供。即使不需要重传,适配器仍然计算并驱动CRC字节 - 接收器强烈建议在这种情况下将CRC错误视为不可纠正的内部错误。CRC是在66字节上计算的(协议层的64字节数据和适配器的2字节Flit头部)。与之前的格式一样,使用相同的128字节CRC计算,但发送方和接收方默认假设字节127到67为0。

重传是在这个68字节的Flit上执行的。

由于D2D适配器添加了四个字节,Flit的对齐方式与物理链路的Lane数(始终是16的倍数)不完全匹配。这要求适配器对连续的Flit进行四字节的移位。当发送适配器没有更多的Flit要发送时,它会用数据流暂停(PDS)令牌和两个随后的全0值数据传输来终止数据流。两个随后的全0数据传输存在的目的是为了给接收器至少提供几个64字节的传输来重置接收字节移位器。PDS令牌及其后面的0字节不得转发到协议层。PDS令牌是一个可变大小的Flit,它携带两个字节的特殊Flit头部,并在RDI接口的剩余字节上填充0字节。PDS的发送者在Flit头部上驱动以下内容:
• 字节0的第4位为1'b1
• 字节1的第7位为1'b1
• 字节1的第6位为1'b1
• 字节1的第5到4位为2'b00,序列号[7:0]为预期序列号的按位取反值
如果上述四个条件中的任意两个条件为真,则接收器必须将此Flit头部解释为PDS。这保证了如果Flit头部中的位错误少于三个,则会检测到PDS。对于三个位错误,可能会导致重传,但这将通过重传规则无缝处理。

3.2.3 PCIe 6.0 or "CXL 256B Flit Mode" with Standard 256B Flit

这些是PCI Express Base Specification Revision 6.0中定义的PCIe Flit Mode和Compute Express Link 3.0 Specification中定义的"CXL 256B Flit Mode"的标准Flit格式,分别被标识为Format 3和Format 4。当协商使用PCIe 6.0或"CXL 256B Flit Mode"协议时,支持这些格式是强制性的。协议层以256B Flit的形式发送数据,但在适配器保留的字节上驱动0(在图29、图30和图31中以灰色显示)。PCI Express Base Specification中定义的6个字节的DLP也存在于Format 3和Format 4中。然而,由于在PCIe和CXL.io协议中要求绕过TX Retry缓冲区,因此DLP字节最终是唯一的,因为它们部分由协议层填充,部分由适配器填充。对于UCIe,DLP0和DLP1被替换为Flit头部,并由UCIe适配器驱动。然而,如果Flit携带Flit Marker,协议层必须将Flit头部字节0的第4位填充为1b,并在Flit_Marker位中填充相关信息(按照PCI Express Base Specification中定义的方式驱动)。协议层还必须为其生成的Flit在Flit头部中填充协议标识位。

FDI为来自协议层到适配器以及逆向传输的DLLP提供了单独的接口。如果不存在Flit Marker,适配器负责将DLLP插入到DLP字节2:5中。信用更新信息通过FDI从协议层传输到适配器,作为常规的Update_FC DLLP。适配器还负责在可能的情况下将这些更新格式化为Optimized_Update_FC格式,并将其驱动到相关的DLP字节上。适配器还负责遵守PCI Express Base Specification中定义的Flit Mode的所有DLLP规则。在接收路径上,适配器负责从Flit中提取DLLP或Optimized_Update_FC,并将其驱动到FDI上提供的专用DLLP接口上。

计算两组CRC(CRC0和CRC1)。使用与之前格式相同的128B Flit上的2B CRC计算。

对于PCIe:CRC0在Flit的前128B上进行计算(包括Flit Chunk 0和Flit Chunk 1)。CRC1在Flit Chunk 2和Flit Chunk 3以及Flit Hdr和DLP字节上进行计算,并且对于CRC计算,将114B在MSB上进行零扩展以达到128B。

对于CXL:CRC0在Flit的前128B上进行计算(包括Flit Hdr、Flit Chunk 0和Flit Chunk 1)。CRC1在Flit Chunk 2、Flit Chunk 3以及对于CXL.io,DLP字节也包括在CRC计算中,并且对于CRC计算,将114B在MSB上进行零扩展以达到128B。

如果不需要重传,适配器仍然计算并驱动CRC字节,接收方强烈建议在这种情况下将CRC错误视为不可纠正的内部错误(UIE)。

当需要重传时,Flit头部字节的格式如表14所示;否则,如表13所示。

3.2.4 "CXL 256B Flit Mode" with Latency-Optimized 256B Flit

这种模式定义了两种Flit格式:Format 5和Format 6。强烈建议UCIe实现支持这两种格式,以获得最佳的延迟优势。

从适配器的角度来看,这两种格式看起来是相同的,唯一的区别是协议层是否填充可选的协议信息字节。Format 5是指协议层不填充可选字节,而Format 6是指协议层填充可选字节。

计算两组CRC。使用与之前格式相同的128B Flit上的2B CRC计算。CRC0是在Flit的前126B上进行计算(包括Flit头部、Chunk 0、Chunk 1和可选字节。保留位在CRC计算中被分配为0)- 对于CRC计算,将126B在MSB上进行零扩展以达到128B。CRC1是在Flit的Chunk 2和Chunk 3上进行计算(Format 6的可选字节也包括在CRC计算中)- 对于CRC计算,将122B在MSB上进行零扩展以达到128B。如果不需要重传,适配器仍然计算并驱动CRC字节 - 接收方强烈建议在这种情况下将CRC错误视为UIE。

3.3 Decision table for protocol and flit format

表16显示了决定使用哪种Flit格式的真值表。表15显示了确定操作协议的真值表。一旦在初始链路建立期间协商了协议和Flit格式,它们就不能在UCIe物理层转换为复位状态之前更改。

如果没有协商到有效的协议和Flit格式,适配器将关闭链路,升级错误。

  1. 如果协商了CXL 256B Flit Mode,则CXL.io capable/enable必须为1b。
  2. 对于CXL协议,确定Single Protocol vs Type 1 vs Type 2 vs Type 3的具体组合,除了使用{FinCap.CXL}中的CXL.io capable/enable位外,还使用CXL.cache和CXL.mem capable/enable位。相关规则遵循CXL规范。
  3. 如果PCIe Flit Mode为1b,但CXL 256B Flit Mode为0b,则PCIe capable/enable必须为1b。
  4. 如果协议是PCIe,并且使用了68B Flit Mode,则对应于PCIe非Flit模式协议。
  5. 对于Streaming协议的协商,不发送任何{FinCap.*}消息。如果未协商PCIe或CXL协议,但广告中有Streaming协议,则它将成为协商的协议。

3.4 State Machine Hierarchy

UCIe采用分层的链路状态管理方法,以实现不同层之间明确定义的功能划分,并在FDI和RDI上实现常见的状态转换或顺序。

图34展示了不同配置的状态机层次结构示例。对于CXL,ARB/MUX vLSMs在FDI pl_state_sts上公开。适配器LSM用于协调与远程链路的链路状态,并在所有配置中都是必需的。

每个协议栈都有相应的适配器LSM。对于PCIe或Streaming协议,适配器LSM在FDI pl_state_sts上公开。

此外,RDI状态机(SM)用于为上层抽象物理层状态。适配器数据路径和RDI数据宽度可以针对多模块配置进行扩展;然而,对于所有模块只有一个RDI状态机。多模块PHY逻辑创建了抽象,并在RDI状态和各个模块之间进行协调。以下规则适用:

  • vLSM状态转换通过主通道数据路径上的ALMPs与远程链路进行协调。状态转换的规则遵循CXL 256B Flit Mode的规则。
  • 适配器LSM状态转换通过{LinkMgmt.Adapter*}辅助带消息与远程链路进行协调。这些消息由D2D适配器发起和接收。
  • RDI SM状态转换通过{LinkMgmt.RDI*}辅助带消息与远程链路进行协调。这些消息由物理层发起和接收。

以下是链路状态转换层次结构的一般规则。有关具体的顺序,请参考第8.0章中概述的规则。

  • 激活状态转换:在Adapter LSM开始协商转换到激活状态之前,RDI SM必须处于激活状态。在vLSMs开始协商转换到激活状态之前,Adapter LSM必须处于激活状态。

  • 重新训练状态转换:在传播重新训练到Adapter LSM之前,RDI SM必须处于重新训练状态。如果RDI SM处于重新训练状态,则必须将重新训练传播到所有处于激活状态的Adapter LSM。在所有相关的Adapter LSM转换到重新训练状态之前,Adapter不能要求RDI退出重新训练状态。

  • 电源管理状态转换(L1和L2):在相应的Adapter LSM可以转换到电源管理状态之前,CXL.io和CXL.cachemem vLSMs(如果是CXL)必须转换到电源管理状态。在将RDI SM转换为电源管理状态之前,所有的Adapter LSM(如果启用了多协议栈)必须处于电源管理状态。

  • 链路错误状态转换:在Adapter LSM可以转换到链路错误状态之前,RDI SM必须处于链路错误状态。RDI SM使用辅助带与远程链路伙伴协调链路错误转换,并将链路错误传播到所有启用的Adapter LSM。如果是CXL协议,Adapter LSM在将链路错误传播到两个vLSMs之前必须处于链路错误状态。链路错误转换优先于链路复位或禁用转换。在所有相关的Adapter LSM和CXL vLSMs转换为链路错误状态之前,Adapter不能要求RDI退出链路错误状态。

  • 链路复位或禁用状态转换:Adapter LSM使用辅助带消息与远程链路伙伴协商链路复位或禁用转换。只有与RDI SM关联的所有Adapter LSM都转换到链路复位或禁用状态时,链路复位或禁用才会传播到RDI SM。禁用转换优先于链路复位转换。如果RDI SM转换为链路复位或禁用状态,它必须传播到所有的Adapter LSM。如果Adapter LSM转换为链路复位或禁用状态,它必须将其传播到CXL协议的两个vLSMs。

对于UCIe Retimers,它是Retimer芯片的责任来与远程的Retimer协商状态转换,并确保不同的UCIe芯片保持同步,不会因为等待响应而超时。例如,参考图13,如果UCIe芯片0向UCIe Retimer 0发送了一个Adapter LSM的激活请求消息,UCIe Retimer 0必须与UCIe Retimer 1解析,指示已将激活请求消息转发给UCIe芯片1,并且UCIe芯片1已经用一个激活状态消息作出了响应,然后才能向UCIe芯片0发送激活状态消息。同样,除非UCIe芯片0和UCIe芯片1上的所有相关状态都达到了低功耗状态,否则无法将Off Package Interconnect转换为低功耗状态。UCIe Retimers在与远程Retimer解析时,必须每4ms响应“Stall”编码。

3.5 Power Management Link States

电源管理状态对于PCIe和CXL协议是强制性的。FDI支持L1和L2电源状态,遵循CXL 256B Flit Mode的握手规则和状态转换。RDI支持接口上的L1和L2,以执行物理层的电源管理优化,但物理层允许将L1和L2映射到一个共同的内部状态。这些特性共同实现了全局时钟门控,并启用了系统级流程,如Package-Level Idle(C状态)。其他协议可以通过始终为来自远程链路伙伴的PM请求发送PMNAK来禁用PM流程。

电源管理状态的进入按照以下步骤顺序进行:

  1. 协议层PM进入请求:FDI在接口上定义了一种基于链路空闲时间的PM进入请求的通用流程。所有使用UCIe的协议在需要支持PM时必须遵循该流程。对于CXL协议,D2D Adapter实现了ARB/MUX功能,并遵循Compute Express Link 3.0规范中定义的握手协议(对应于“CXL 256B Flit Mode”,因为所有的ALMP也经过UCIe中的重传缓冲区)。即使是CXL 2.0和“CXL 68B-Enhanced Flit Mode”通过UCIe使用“CXL 256B Flit Mode” ALMP格式和流程(但对于它们,Flit被截断为64B)。在RDI上,L1和L2映射到一个共同的PM状态。对于UCIe Flit Mode中的PCIe协议,不使用PM DLLP握手协议。协议层根据链路空闲时间在FDI上请求PM进入。确定链路空闲时间的具体算法和滞后性是实现特定的。

  2. Die-to-Die Adapter Link State Machine(LSM)的PM进入。此过渡通过辅助带与远程链路协调。在Adapter在两个协议栈之间复用的场景中,每个协议栈的链路状态机必须独立地转换到PM状态。

  3. RDI接口上的PM进入。一旦所有Adapter的LSM都处于PM状态,它会根据第8.2.8节的定义,在RDI接口上启动PM进入。

  4. 物理层进入更深的PM状态并采取必要的电源管理操作。请注意,辅助带接口必须保持活动状态,因为PM退出是使用该接口初始化的。

PM退出按照以下唤醒的相反顺序进行,如下所述:

  1. 协议层的激活请求通过FDI和RDI接口传输到本地物理层。

  2. 物理层使用辅助带来协调物理链路的唤醒和重新训练。

  3. 一旦物理链路重新训练完成,RDI接口在两侧都处于激活状态,然后从两侧触发Adapter LSM的PM退出(通过Adapter之间的辅助带消息协调,如FDI PM流程中所述)。对于PCIe或流式传输协议的场景,这也将协议层在FDI上转换为激活状态。

  4. 对于CXL协议,此步骤后跟ALMP交换,将所需的协议转换为激活状态,然后协议Flit传输可以开始。

3.6 CRC Computation

CRC(循环冗余校验)生成多项式是(x+1)*(x^15 + x + 1) = x^16 + x^15 + x^2 + 1。这提供了对随机位错误的3位检测保证:2位检测保证是因为原始多项式(x^15 + x + 1),另外1位错误检测保证是通过使其为奇校验,这是多项式中的(x+1)项提供的。CRC总是在消息的128字节上计算。对于较小的消息,消息在最高有效位(MSB)上进行零扩展。

CRC LFSR计算的CRC位的初始值为0000h。CRC计算从消息的字节0的第0位开始,从每个字节的第0位到第7位依次进行,如图36所示。在图中,C[15]是CRC字节1的第7位,C[14]是CRC字节1的第6位,依此类推;C[7]是CRC字节0的第7位,C[6]是CRC字节0的第6位,依此类推。

附录B中提供了CRC代码生成的Verilog代码,必须将其用作在编码或解码过程中实现CRC的标准。该代码提供给发送方使用。它以1024位(第1023位是消息字节127的第7位,1022位是消息字节127的第6位,依此类推;第1015位是消息字节126的第7位,依此类推,直到第0位是消息字节0的第0位)作为输入消息,并输出16位的CRC。在接收方,使用接收到的Flit字节计算CRC,并在MSB中适当填充零以形成128B的消息。如果接收到的CRC与计算的CRC不匹配,则该Flit被声明为无效,并且必须请求重新传输。

3.7 Retry Rules

对于大于8GT/s的链路速度,除非仅支持原始模式,否则适配器必须支持重试。如果适配器不支持重传,则在链路训练期间物理层不能宣传大于8GT/s的链路速度,除非操作模式是原始模式。一旦在初始链路建立期间协商了重传,即使在运行时链路速度降低,也不能禁用重传。只能在下一次链路建立时重新协商(即RDI转移到复位状态)。

UCIe上的重试方案是PCI Express基本规范修订版6.0中定义的Flit模式重试机制的简化版本。下面列举了不适用的规则和相应的参数更改:

  • 选择性Nak和相关规则不适用,不得实现。RX Retry缓冲区相关规则也不适用,不得实现。
  • 在整个链路操作期间,显式序列号Flit和Ack/Nak Flit交替发送。如果没有要发送的Ack/Nak Flit(或者遵循连续显式序列号Flit的规则),允许连续发送显式序列号Flit。
  • 所有10位计数器被8位计数器替换,允许的最大序列号为255(因此在所有计算中为1023,并且初始值被替换为255)。
  • REPLAY_TIMEOUT_FLIT_COUNT是一个9位计数器,饱和值为1FFh。
  • NAK_WITHDRAWAL_ALLOWED始终设置为0b。
  • 空闲Flit握手阶段不适用。这是因为通过辅助带上的握手来管理到链路激活的过渡(相当于PCIe中的LTSSM处于L0状态),并且不需要交换空闲Flit的要求。
  • 序列号握手阶段超时并退出到链路重新训练是指在未退出序列号握手阶段的情况下传输了128个Flit。
  • "Prior Flit was Payload"始终设置为1b。这个位在Flit头部中不存在,因此从重传的角度来看,实现必须假设它始终设置为1。

3.8 Runtime Link Testing using Parity

在UCIe中,当启用时,定义了一种在运行时通过定期在数据流中插入奇偶校验字节来检测链路健康状态的机制。接收方会检查和记录与奇偶校验字节相关的奇偶校验错误。

当启用该机制时,适配器会在每256*256*N字节的数据中插入64*N字节,其中N是从错误和链路测试控制寄存器(字段名称为Number of 64 Byte Inserts)中获取的,软件根据当前操作的链路宽度设置该值,包括与适配器相连的活动模块的总数。插入的字节中只有第0位包含奇偶校验信息,计算方法如下:

奇偶校验字节X,第0位 = ^((DataByte [X]) ^ (DataByte [X + 64N]) ^(DataByte [X + 128N])^....^(DataByte [X + (256256N - 64*N)]))

插入字节的其余7位保留。

适配器中的发送方和接收方必须跟踪已传输的数据字节数以计算或检查奇偶校验信息。如果RDI状态从Active状态移开,数据计数和奇偶校验将被重置,双方必须在下一次从Retrain进入Active之前重新协商启用奇偶校验插入(如果在错误和链路测试控制寄存器中仍然启用了该机制)。

只有通过软件监视链路的方式,才能启用此机制,当软件写入UCIe链路上两个适配器的寄存器中的启用位时。在写入两个适配器的启用位之后,软件必须触发UCIe链路重新训练。在适配器LSM处于Retrain状态时,适配器通过辅助带交换侧带消息,以确保远程链路伙伴的接收方准备好在状态转换为Active后接收数据流中的额外奇偶校验字节。在奇偶特性交换完成之前,适配器不能请求本地RDI退出Retrain。在初始链路建立期间允许启用此功能,通过使用辅助带访问远程链路伙伴的寄存器或其他实现特定的方法,但是软件必须触发链路重新训练以使该功能生效。

如果适配器的发送方启用了发送奇偶校验字节,它会向远程链路伙伴发送{ParityFeature.Req}辅助带消息。如果远程适配器的接收方已启用并准备好接收奇偶校验字节,则会回复{ParityFeature.Ack}辅助带消息。图37显示了一个成功的协商示例。如果Die 0适配器的发送方启用了插入奇偶校验字节,它必须从Die 0发送{ParityFeature.Req}到Die 1。

如果适配器尚未准备好接收奇偶校验字节,或者尚未为其启用该功能,它会回复{ParityFeature.Nak}。请求方的适配器必须在状态寄存器中记录Nak,以便软件可以确定是否发生了Nak。图38显示了一个协商失败的示例。

注意:如果启用了奇偶校验功能,允许适配器转换到更高延迟的数据路径。显式的Ack/Nak握手提供了确保双方有足够时间转换到备用数据路径的机制。

奇偶校验字节不消耗Retimer接收缓冲区的缓冲区点数。Retimer接收方不能将奇偶校验字节写入其接收缓冲区或将其转发给远程Retimer伙伴。该机制仅用于帮助表征本地UCIe链路。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值