• 正文
  • 相关推荐
申请入驻 产业图谱

UCIe 2.0协议:逻辑物理层

07/22 10:41
224
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

UCIe协议的概述、协议层和Adapter层介绍见以下链接:

UCIe(Universal Chiplet Interconnect Express) spec 1.0(第一章)

UCIe2.0协议学习 -- 协议层

UCIe 2.0协议(三)-- Die-to-Die Adapter

本文主要介绍UCIe的逻辑物理层,逻辑PHY包括以下功能:

链路初始化、训练和电源管理状态

通过Lane将传输数据的字节映射到Lane

互连冗余重映射(必要时)

发送和接收边带消息

Scrambling和训练模式生成

Lane reversal

宽度降级

1. Data and Sideband Transmission Flow

UCie规范定义了时钟、有效和数据,用于在物理通道上发送和接收数据。传输的数据由有效信号构成帧。

Byte to Lane Mapping

数据包以字节为单位进行传输。在每个字节内,首先传输bit[0]。图4-1展示了在通道0的一个字节传输中位的排列。

每个字节在单独的Lane上传输。字节0 (B0)在Lane 0上传输,字节1在Lane 1上传输,以此类推。

图4-2以x64接口(1个x64高级封装模块或2个x32高级封装模块或4个标准封装模块)传输CXL延迟优化flit (Format 5)为例。当I/O宽度变为x32或x16接口(标准封装)时,每通道仍保留1字节的传输。

Valid Framing

有效信号用于传输数据的帧。对于每个8-bit数据包,对前4个UI assert valid,对4个UI deassert UI。这样就可以使用一个或多个有效帧以原始格式或各种Flit格式传输数据。如图4-6所示,Transfer 1和Transfer 2可以来自同一个flit,也可以来自不同的flit。

注意:8-UI block assertion是由发送端强制执行的,并由接收端在active状态下跟踪。

如表4-1,UCIe Retimer使用valid信号将credit释放到其本地UCIe die。每个credit跟踪256字节的数据(包括任何FEC, CRC等)。有效的帧编码保证了三比特翻转检测。

Clock Gating

在为半速率时钟提供固定的16 UI(8个周期)和为四分之一速率时钟提供固定的32 UI(8个周期)后,主带时钟必须在有效信号为低时进行门控,除非协商free running clock模式或远程链路伙伴要求运行时重新校准。

注意,只要时钟可以通过Valid assertion进行切换,就需要时钟postamble,而且无论LTSM状态如何,时钟都需要停止切换。

Free Running Clock Mode

Free running clock模式定义为即使在发送端保持valid低电平且接口上没有数据传输时,时钟仍保持翻转。必须支持此模式,以允许禁用动态时钟门控以进行正常操作或调试。这必须在主带链路训练之前通过参数交换进行协商。

边带传输

每个模块支持一个带有串行数据和时钟引脚对的边带接口。

边带消息格式被定义为带有32位或64位数据的64位header。在远端die的I/O接口上定义了一个64位串行数据包,如图4-8。32位数据使用64位串行数据包发送,MSB用0填充。如图4-9,在I/O接口上,两个边带串行包之间的距离至少为32位。带有数据的边带消息将以64位报头后跟32位low,64位数据后跟32位low的形式传输。

2. Lane Reversal

UCIe规范使用以下命名法:

TD_P: Physical Lane for Data Transmitter

RD_P: Physical Lane for Data Receiver

TRD_P: Physical Lane for Redundant Data Transmitter

RRD_P: Physical Lane for Redundant Data Receiver

TD_L: Logical Lane for Data Transmit

RD_L: Logical Lane for Data Receive

TCKP_P, TCKN_P and TTRK_P: Physical Lane for Clock and Track Transmitter

TCKP_L, TCKN_L and TTRK_L: Logical Lane for Clock and Track Transmitter

RCKP_P, RCKN_P and RTRK_P: Physical Lane for Clock and Track Receiver

RCKP_L, RCKN_L and RTRK_L: Logical Lane for Clock and Track Receiver

TRDCK_P: Physical Lane for Redundant Clock/Track Transmitter

RRDCK_P: Physical Lane for Redundant Clock/Track Receiver

TRDCK_L: Logical Lane for Redundant Clock/Track Transmitter

RRDCK_L: Logical Lane for Redundant Clock/Track Receiver

TVLD_P, RVLD_P: Physical Lane for Valid Transmitter and Receiver

TRDVLD_P, RRDVLD_P: Physical Lane for Redundant Valid Transmitter and Receiver

TVLD_L, RVLD_L: Logical Lane for Valid Transmitter and Receiver

TRDVLD_L, RRDVLD_L: Logical Lane for Redundant Valid Transmitter and Receiver

设备必须支持模块内数据通道的Lane反转。Lane反转的一个例子是,local die上的物理数据通道0连接到remote die上的物理数据通道N-1 (通道1连接到通道N-2,依此类推),其中x8标准封装的N=8,x16标准封装的N=16,x32高级封装的N=32,x64高级封装的N=64。在Advanced Package情况下,冗余Lane也被反转。Lane反转只能在发送端上执行。发送端在数据和冗余通道上反转逻辑通道顺序。

Track、Valid、时钟和边带信号不能反转。Lane反转是在初始化和训练过程中发现并应用的。

Lane ID

为了允许Lane反转发现,给模块内的每个逻辑数据和冗余Lane分配一个唯一的Lane ID。Advanced Package和Standard Package模块分配的Lane ID分别如表4-2和表4-3所示。注意,表中的逻辑Lane号表示逻辑的发送Lane和接收Lane。例如,“Logical Lane Number = 0”表示TD_L[0]/RD_L[0],以此类推。

3. Interconnect redundancy remapping

高级封装模块需要冗余重映射以从故障lane中恢复。本节提供重映射的详细信息。在重映射/修复成功后,未使用的修复通道必须使其发送端三态和接收端禁用。

Data Lane repair

本规范支持为每组32个数据通道重映射(修复)最多两个数据通道。TD_P[31:0] (RD_P[31:0])和TD_P[63:32] (RD_P[63:32])被视为两个独立的32 Lanes组,可以分别使用冗余Lane进行独立修复,TRD_P[1:0](RRD_P[1:0])和TRD_P[3:2](RRD_P[3:2])。TD_P[63:32] (RD_P[63:32])和TRD_P[3:2] (RRD_P[3:2])不适用于x32 Advanced Package。

Lane重映射是通过“左移”或“右移”操作完成的。左移是指TD_P[n]上的逻辑Lane TD_L[n]的数据流量被多路复用到TD_P[n-1]上。左移会把TD_L[0]放到TRD_P0上,或者把TD_L[32]放到TRD_P2上。右移操作是指将数据流量TD_L[n]复用到TD_P[n+1]。右移会把TD_L[31]放到TRD_P1上,或者把TD_L[63]放到TRD_P3上。参考4.3.3.1和4.3.3.2节中显示修复后映射变化的伪代码。

数据通道被重映射后,与损坏的物理通道相关联的发送端被三态,接收端被禁用。用于修复的冗余通道的发送器和接收器使能。

图4-12为第一组32 Lane的重映射的传输bump side。左移和右移都需要重映射,以最优地修复组内的任意两条Lane。

注意:为了清晰起见,给出了TD_P[31:0]的修复实现示例。值得注意的是,同样的方案也适用于TD_P[63:32]。

Data Lane repair with Lane reversal

如果Lane反转,则发送端(TD_P[0])的物理Lane 0与接收端(RD_P[N-1])的物理Lane N-1相连。对于x64和x32的Advanced Package模块,N分别为64和32。

Data Lane repair实现

Single Lane repair

必须使用TRD_P[0](RRD_P[0])作为冗余Lane来重映射TD_P[31:0](RD_P[31:0])的任何单个物理Lane故障。对于TD_P[63:32] (RD_P[63:32]),必须使用TRD[2](RRD[2])作为冗余Lane来重映射任何单Lane故障。

TD_P[31:0](RD_P[31:0]) (0<= x <=31)中用于修复的伪代码:

TD_P[63:32](RD_P[63:32]) (32<= x <=63)中用于修复的伪代码(不适用于x32高级封装):

如图4-14,TD_P[29]方向重映射,使用TRD_P[0]作为修复资源。

Two Lane repair

32个Lane中的任意两个Lane都可以用两个冗余的bump来修复。对于TD_P[31:0] (RD_P[31:0])中的任意两个物理Lane故障,必须将下层Lane重映射为TRD_P[0](RRD_P[0]),将上层Lane重映射为TRD_P[1](RRD_P[1])。对于TD_P[63:32] (RD_P[63:31])中的任意两个物理Lane故障,必须将下层Lane重映射为TRD_P[2](RRD_P[2]),将上层Lane重映射为TRD_P[3](RRD_P[3])。

TD_P[31:0](RD_P[31:0]) (0<= x,y <=31)中双Lane修复的伪代码:

TD_P[63:32] (RD_P[63:32]) (32<= x,y <=63)中双Lane修复的伪代码(不适用于x32高级封装):

如图4-16为两个Lane重映射示例(物理Lane25和物理Lane26)。发送端和接收端都必须进行所需的重映射。

Clock and Track Lane重映射

本规范支持对TCKP_P/RCKP_P、TCKN_P/RCKN_P和TTRK_P/RTRK_P的一个物理Lane进行重映射。如图4-18。时钟通道重映射允许修复时钟接收端的差分和伪差分实现中的单通道故障。

重映射Lane后,发射端处于三态状态。物理冗余(RRDCK_P) Lane的接收端被关闭。

Clock and Track Lane repair实现

时钟和track修复的伪代码:

时钟和track重映射的实现如图4-21。注意,在检测阶段,CKRD Lane上的发射端和接收端都是必需的,如果不用于修复,可以处于三态并关闭。

Valid Repair and implementation

Valid lane有一个专用的冗余lane。当valid物理通道检测到故障时,使用冗余的valid物理通道发送Valid。valid故障检测和修复在链路初始化和训练期间进行。

valid通道和冗余valid通道的正常路径如图4-25。Valid Lane故障修复路径如图4-26。

标准封装的Width Degrade

对于不支持lane修复的标准封装x16模块,通过将链路配置为x8宽度(逻辑lane 0~7或逻辑lane 8 ~ 15,不包括故障lane),来提供lane修复功能。例如,逻辑lane 0 ~ 7中有一个或多个故障lane,则使用逻辑lane 8 ~ 15配置链路宽度为x8。配置在链路初始化或重训练时完成。被禁用的Lane的发送端是三态的,接收端被禁用。

对于x8标准封装模块,通过将链路配置为x4宽度(逻辑Lane 0~3或逻辑Lane 4~7,不包括故障Lane),来提供Lane修复功能。配置在链路初始化或重训练时完成。被禁用的Lane的发送端是三态的,接收端被禁用。

4. Data to Clock Training and Test Modes

注意:边带命令将标识为{SB command}。

接口训练和测试的基础架构如图4-27。发送die和接收die实现相同的线性反馈移位寄存器(LFSR)。将从发送端发送的与转发时钟同时有效的模式与本地生成的参考模式进行比较。发送和接收模式生成器必须同步启动和推进。比较电路检查每个UI是否匹配数据。任何接收到的模式与本地模式生成器预测的模式之间的不匹配都会被检测为错误。

接收die必须实现两种类型的比较方案:

Per-lane比较:每个lane比较用于识别两个die之间失败lane的数量。在每个lane上,如果接收到的模式与期望模式之间的不匹配超过设置的阈值,则将为每个lane设置一个内部错误检测位。一旦发现某条lane上的模式不匹配,就将该错误位设置为测试的剩余部分。图4-28展示了per-lane比较模式。此模式将指示模块内的每lane错误(N = 68 (64 + 4 RD)为x64高级封装模块,N=34 (32 + 2 RD)为x32高级封装模块和N=16为标准封装模块)。每个lane的比较结果可以通过边带读取。

聚合比较:在此模式下,模式不匹配模块内任意lane上的每个UI都会累积成一个16位的错误计数器。lane误差通过逻辑或OR生成模块级误差,统计结果如图4-29。该方案可用于模块级间隔和误码率。


Scrambling和训练模式生成

定义了用于Scrambling和测试模式生成的线性反馈移位寄存器(LFSR)。

LFSR使用与PCIe相同的多项式:G(X)=X^23 + X^21 + X^16 + X^8 + X^5 + X^2 + 1。每个发送端允许实现一个单独的LFSR用于扰乱和模式生成。允许每个接收端使用相同的多项式实现单独的LFSR,用于去扰乱和模式比较。其实现如图4-28。LFSR的种子与lane有关,lane数的种子值取模8,如表4-4。

另外,实现方式也可以选择实现一个LFSR,为多个通道设置不同的抽头点。这相当于每个lane具有不同种子的LFSR。

5. 链路初始化和训练

链路初始化和训练在模块级别进行描述。在本节中使用的术语描述如下:

UCIeModule Partner:UCIe模块伙伴是该模块所连接的远程UCIe die上对应的UCIe模块。例如,如果两个UCIe Die A和B在标准Die rotate配置中通过一个2-module UCIe Link连接,模块0和1;UCIe Die A的模块0 (UCIe Module A0)连接到UCIe Die B的模块1 (UCIe Module B1);那么A0是B1的UCIe模块伙伴,反之亦然。

本规范中的相位插值器(PI)用于指任何产生和选择采样时钟相位的方法。

超时:链路训练状态机中除RESET和TRAINERROR外的所有状态都有8ms的常驻超时时间。对于具有子状态的状态,超时时间按子状态计算(即,如果物理层处于一个状态的时间大于8ms,则它转换到TRAINERROR并最终到RESET)。与远程链路伙伴的RDI状态转换的物理层边带握手也在8ms后超时。如果接收到带有“Stall”编码的边带消息,则必须复位超时计数器。除非另有明确说明,否则所有指定的超时值都是-0%和+50%。退出Domain Reset后,所有超时时间必须设置为指定的值。Domain Reset后,所有计数器值必须设置为指定值。

当在链路初始化期间进行训练时(即物理层从复位状态转换出来),硬件允许多次尝试训练。触发链路训练的触发器有:

软件写1到UCIe链路控制的Start UCIe Link Training bit

Adapter在RDI上触发链路训练(RDI处于Reset状态并且有NOP到活跃的状态转换请求)

SBINIT模式(连续两次迭代64个UI时钟模式和32个UI低)观察到任何边带接收端时钟/数据对

一旦硬件在实现特定次数的尝试后训练失败,它必须过渡到复位,等待后续的链路训练触发。如果软件触发或RDI触发的链路训练失败,或者由于物理层超时导致link up到Link down转换,物理层必须在RDI上升级致命错误。

链路训练基本操作

本节定义了链接训练中的一些基本操作。这些将用于主带初始化、训练和margining。

Transmitter initiated Data to Clock point test

在这种模式下,发送端在单个PI阶段启动数据对模块中所有通道进行时钟训练。当不执行与此状态相关的操作时:

数据、Valid和Track发送端驱动低

时钟发送端保持差分低(对于差分时钟)或同时低(对于正交时钟)

启用数据、有效和时钟接收器

允许禁用跟踪接收器

UCIe链路的每个UCIe模块的测试步骤如下:

UCIe模块设置发送器参数,向其UCIe模块伙伴发送{Start Tx Init D to C point test req}边带消息,并等待响应。该消息的data字段包含所需的参数。UCIe模块上的接收器必须使模式比较电路能够将输入的主频带数据与本地生成的期望模式进行比较。一旦接收器的数据到时钟训练参数设置完毕,UCIe模块伙伴就会以{Start Tx Init D to C point test resp}边带消息作为响应。

UCIe模块复位其主带发射机上的LFSR(扰频器),并发送边带消息{LFSR clear error req}。UCIe模块的合作伙伴会复位LFSR,并在其主带接收器上清除之前的所有比较结果,并以{LFSR clear error resp}边带消息作为响应。

UCIe模块将pattern(通过“Tx Pattern Generator Setup”选择)发送到其主带发射器上,以选择的周期数(“Tx Pattern Count Setup”)。

UCIe模块合作伙伴在模式传输期间基于“Rx compare setup”对每个UI的接收器执行比较,并记录结果。

UCIe模块向其UCIe模块合作伙伴发送{Tx Init D to C results req}边带消息,以获取步骤4中记录的结果。UCIe模块合作伙伴停止在其主频带接收器上进行比较,并以记录的结果{Tx Init D to C results resp}边带消息进行响应。

UCIe模块停止在其发射器上发送模式,并发送{End Tx Init D to C point test req}边带消息,UCIe模块伙伴以{End Tx Init D to C point test resp}作为响应。当UCIe模块收到{End Tx Init D to C point test resp}边带消息时,对应的序列完成。

Retimer链路训练

下图解释了UCIe Retimer的初始化流程。如图4-32,允许外部和UCIe (UCIe Die to UCIe Retimer)链路独立出现。当UCIe链路训练到本地速率和宽度时,远程的UCIe信息通过外部链路(external link)被请求。如果存在数据速率和宽度的差异,每个UCIe链路都被允许重训练以达到速度和宽度的匹配(如果UCIe Retimer要求这样操作,它必须从LinkSpeed状态发起重训练)。这可能会在初始链路启动或重训练期间发生多次。一旦UCIe Retimer确定UCIe链路配置适合与远程Retimer伙伴成功操作,UCIe链路通过协议层链路初始化(LINKINIT)进到Active状态。

链路训练状态机

高层次的初始化流程如图4-33。表4-6给出了各个状态的描述。在接下来的小节中,将描述每种状态下执行的详细信息和操作。

RESET

物理层每次进入RESET状态时必须保持在RESET状态至少4ms,以允许锁相环稳定和任何其他链路训练初始化要求得到满足。退出RESET状态的最低要求如下:

电源供应稳定

边带时钟是可用的,并运行在800 MHz

Mainband和D2D Adapter的时钟是稳定可用的

Mainband时钟被设置为最慢的I/O数据速率(2 GHz for 4 GT/s)

本地SoC /固件不保持物理层RESET状态

链路训练触发发生

Mainband发射器三态

允许禁用主带接收器

边带发射器保持低电平

边带接收器启用

Sideband Initialization (SBINIT)

在这种状态下,边带(SB)接口被初始化和修复(当适用时)。当不执行与此状态相关的动作时:

UCIe模块主带(MB)发射器保持三态

MB接收器允许禁用

SB发射器继续保持低电平

SB接收器继续启用

SB初始化流程中数据的速率维持在800MT/s,时钟速率为800MHz。

高级封装除了DATASB和CKSB外,还有冗余的SB时钟和SB数据通道(DATASBRD, CKSBRD)。可能需要进行互连修复的高级封装的SBINIT顺序如下:

MBINIT

在这种状态下,主带(MB)接口被初始化、修复或宽度降级(当适用时)。主带数据速率设置为支持的最低数据速率(4GT/s)。

对于高级封装互连可能需要修复。MBINIT中的子状态允许检测和修复数据、时钟、track和valid lane。对于标准封装,不需要lane修复,子状态用于检查功能在最低数据率和宽度降级。

MBTRAIN

MBTRAIN状态用于设置操作速度并且调整时钟沿到数据的中央。在较高的速度下,可能需要额外的校准,如Rx时钟校正,发送和接收偏斜,以确保链路性能。MBTRAIN使用子状态来执行所有所需的校准和训练。UCIe模块必须进入各个子状态,各子状态的退出由各UCIe模块合作伙伴通过边带握手进行协调。如果不需要某个子状态中的特定操作,UCIe模块可以通过相关的边带握手退出该子状态,而无需在该子状态中执行所描述的操作。

在MBINIT完成后,设备进入此状态。这种状态在高级和标准封装中是相同的。

LINKINIT

此状态用于允许D2D Adapter在RDI进入active状态之前完成初始链路管理。track,数据和valid发射器都处于低位。时钟变送器保持差分低电平(用于差分时钟)或同时低电平(用于正交时钟),如果协商Strobe模式。时钟接收器已使能。

一旦RDI处于active状态,PHY将从UCIe链路控制寄存器清除其“Start UCIe Link training”位的副本。进入该状态后必须进行LFSR复位。

这种状态在高级和标准封装中是相同的。

ACTIVE

物理层初始化完成,RDI处于active状态,可以在两个die之间交换来自上层的packet。

使用扰乱器LFSR对处于这种状态的所有数据进行扰乱。5.11节描述的门控时钟规则适用。

这种状态在高级和标准封装中是相同的。

PHYRETRAIN

由于多种原因,一个die可以进入PHYretrain状态。track,数据和valid发射器都处于低位。时钟发送器保持差分低(用于差分时钟)或同时低(用于正交时钟)。进入PHY retrain的触发条件是以下场景之一:

Adapter导致的PHY retrain:Adapter可以导致PHY retrain。

PHY发起的PHY retrain:本地PHY必须在检测到有效的帧错误时发起retrain。

Remote die请求PHY retrain:本地PHY在收到remote die的请求时必须进入PHY retrain。

如果在MBTRAIN.LINKSPEED状态时在Runtime Link Testing Control寄存器中检测到更改。

当进入PHYRETRAIN时,必须设置变量PHY_IN_RETRAIN。

TRAINERROR

当任何致命或非致命事件需要将状态机恢复到复位状态时,此状态用作过渡状态。这可能发生在初始化和训练期间,或者当状态机未复位时,设置了UCIe链路控制寄存器的“Start UCIe Link training”位。它也用于将链路从Link Up条件转换为Link Down条件的任何事件。所有主带(track、data和valid)和时钟发送端都是三态的,它们的接收端允许被禁用。

从TRAINERROR到RESET取决于具体的实现。对于没有错误升级的情况(即RDI不在LinkError中),建议尽快退出TRAINERROR。对于错误升级(即RDI在LinkError中)的情况,只要RDI在LinkError中,就要求物理层在TRAINERROR中。

这种状态在高级和标准封装中是相同的。

L1/L2

PM状态允许比动态门控状态更低的功耗。所有主带(track、data和valid)和时钟发送端都是三态的,它们的接收器允许被禁用。

在RDI转换到PM状态时,将进入该状态。这种状态下的PHY节能特性是特定于实现的。

当本地Adapter请求active状态或远程链路伙伴请求L1退出时,PHY必须退出到MBTRAIN.SPEEDIDLE。L1退出与RDI上相应的L1状态出口转换相协调。

当本地Adapter请求active或远程链路伙伴请求L2退出时,PHY必须退出到RESET状态。L2退出与RDI上相应的L2状态出口转换相协调。

6. Runtime Recalibration

在active状态下,接收端可以使用Track信号进行周期性的运行校准。在重校准期间,主带数据必须继续采样和处理。对于unterminated的链路,当不发送所需的模式时,track信号必须在连续的lane重校准迭代中交替保持低电平和高电平(为了抗老化)。对于terminated链路,当没有发送所需的模式时,track发送端必须转到Hi-Z。

以下顺序用于请求track模式:

UCIe模块使能其接收器上的track信号缓冲区,并发送一个{RECAL.track pattern init req}边带消息,然后等待响应。

UCIe模块伙伴发送{RECAL.track pattern init resp},并使能其track信号发射器。随后,UCIe模块伙伴的track发射器开始发送5.5.1节中描述的模式,以及转发的时钟。如果链路处于时钟门控模式,UCIe模块伙伴应使能时钟,并管理链路在Track更新完成后是否返回时钟门控模式。

接收器上的UCIe模块执行所需的重校准,并发送{RECAL.track pattern done req}边带消息。

收到此信息后,UCIe模块伙伴的track发射器停止发送模式,并发送{RECAL.track pattern done resp}边带消息。

允许UCIe模块在收到{RECAL.track pattern done resp}边带消息后禁用Track Receiver。

7. Multi-module Link

多模块链路允许的配置有单模块、双模块和四模块配置。在多模块链路中,每个模块分配一个模块标识符(模块ID),该标识符在MBINIT.PARAM期间发布给远程链路伙伴。第5.0章定义了多模块必须支持的多模块实例化的不同场景下允许的模块ID分配组合。

Multi-module initialization

多模块配置中的每个模块必须使用其边带独立初始化和训练。如果使用两个或四个模块,则一个单独的Multi-module PHY Logic跨模块进行协调。MMPL(Multi-module PHY Logic)负责协调跨多个模块的发送端的数据传输和相关的字节切换,以便远程链路伙伴的接收器观察到正确的字节到lane的映射(即任何有效的传输时,从LSB到MSB的字节按照模块ID和lane ID的升序排列在所有的active lane上)。

图4-42到图4-45展示了对标准封装配置进行字节混合的例子。图中的M0、M1、M2、M3分别对应模块0、模块1、模块2、模块3。这些图提供了RDI字节到模块的映射。远端链路伙伴的模块ID相同的场景如图4-42。图4-43中以远端链路伙伴的模块ID不相同为例进行说明。图4-44是标准封装宽度下降的一个例子,其中远程链路伙伴的模块ID不同(注意,在所有情况下,字节都是按照模块ID和lane ID在接收端的所有active lane上升序排列的)。图4-45以禁用两个模块为例,禁用了M0和M2模块。RDI的剩余字节在随后的8-UI间隔中发送,使得远端链路上的M1接收到最低有效字节。

多模块链路中的每个模块必须以相同的宽度和速度运行。在初始化或重训练期间,如果任何模块训练失败,MMPL必须确保多模块配置降级到下一个允许的宽度或速度降级配置。随后,不同模块之间的宽度和速度差异必须使用以下规则解决。

1. 对于标准封装多模块配置,如果其中任何一个模块报告宽度降级:

a)如果当前链路速度下报告宽度降级的模块数少于或等于一半,则相应的模块必须被禁用。MMPL必须确保多模块配置降级到下一个允许的宽度或速度降级配置。例如,如果4个模块中有3个处于active状态,则MMPL必须将链路降级为双模块配置。

b)如果在当前的链路速度下,大部分模块报告宽度退化,参考下面的伪代码:

2. 对于高级或标准封装多模块配置,如果有任何模块报告速度差异,参考下面的伪代码:

图4-46和图4-47以流程图的形式统一展示了上述两条规则,分别是高级和标准封装的实现必须遵循的。注意,HMLS/2 > CMLS问题的“Yes”条件是为了覆盖4 GT/s的基本情况。换句话说,如果一些模块通过了MBINIT,但在4GT/s的LinkSpeed失败,那么“Yes”将导致模块禁用而不是TrainError(因为CMLS将为0),并提供机会保持在4GT/s的操作模块仍然在4GT/s。

在链路初始化、训练和重训练期间,所有LTSM握手相关的边带消息都在各模块的边带接口上发送。

注意:对于来自上层或与RDI状态转换相关的所有其他边带消息,使用单个边带发送和接收边带消息。设备必须在LTSM处于Active状态的模块ID最小的边带接口上发送边带消息。通过给定的模块ID发送的消息可以在边带接收端通过不同的模块ID接收。

类似地,在LTSM处于Active状态的模块ID在数字上最小的valid信号上返回Retimer credit。通过给定的模块ID发送的credit可以在远程链接伙伴的不同模块ID上接收。

Multi-module Interoperability between x64 and x32 Advanced

Package

当多模块x64高级封装模块连接到相应的多模块x32高级封装模块时,MMPL负责适当的字节切换和宽度调整。多模块配置中的所有模块必须是相同的类型(在这里,多模块集合中的所有模块必须是x64 Advanced或x32 Advanced)。所有与模块命名约定和禁用配置相关的规则也适用于x32高级封装模块。

UCIe-A x64和UCIe-A x32互操作的一个例子是,UCIe-A x64栈(包括RDI和FDI最大吞吐量)通过远程链路伙伴对给定接口的最大吞吐量进行带宽匹配(全宽模式)。图4-48是两个x64模块的例子,它们可以作为两个具有独立Adapter和协议层的独立UCIe栈运行(bypass图4-48配置(a)中的MMPL逻辑),当连接到相应的x32高级封装的多模块配置时,也可以作为多模块配置运行,以实现与单个x64模块相当的带宽(图4-48配置(b))。在后一种配置中,禁用了一个适配器(显示为灰色)。

软件和固件允许使用UCIe DVSEC链路能力和控制寄存器来确定在哪种配置中训练链路。

UCIe-A x64和UCIe-A x32互操作的另一个例子是UCIe-A x64栈降低带宽(降级宽度模式)以匹配远程链路伙伴的最大吞吐量。图4-49展示了一个RDI字节到模块分配的例子,其中包含4个模块的x64高级封装模块集合与4个模块的x32高级封装模块集合互操作。这个例子是针对x64集的256B RDI宽度,以及x32集的128B RDI宽度。在x64模块的发送端,MMPL对RDI进行节流,因为MMPL只能通过8个UI发送一半的字节;在接收端,在通过RDI转发之前,MMPL会累积16 UI的数据(假设数据传输是256B的块,或者数据流中的MMPL/Adapter应用并检测到适当的数据流暂停指示)。

在图4-49的示例中,一个Adapter使用所有四个模块运行。D2D栈使用MMPL与4个模块,每个x64模块在降级宽度模式下工作,每个模块只有32条lane。

相关推荐