UCIE Specification详解(七)
文章目录
- 4.5.3 Link Training State Machine
- 4.5.3.1 RESET
- 4.5.3.2 Sideband Initialization (SBINIT)
- 4.5.3.3 MBINIT
- 4.5.3.3.1 MBINIT.PARAM
- 4.5.3.3.1.1 Management Transport Path Negotiation
4.5.3 Link Training State Machine
高级初始化流程如图4-33 所示。每个状态的高级描述如表4-6 所示。以下各节描述了每个状态中执行的详细信息和操作。
4.5.3.1 RESET
每次进入复位时,物理层必须在RESET 状态保持至少4 ms,以使锁相环稳定以及满足任何其他链路训练初始化要求。退出复位的最低必要条件如下:
电源稳定
边带时钟可用且以800 MHz 运行
如果{
— 物理层和Die-to-Die 适配器内部时钟稳定且可用
— 主带时钟速度设置为最慢的I/O 数据速率(对于4 GT/s 为2 GHz)
— 本地SoC/固件未将物理层保持在RESET 状态
— 主带的链路训练触发已发生(触发在4.5 节开头定义)
} 或者{
— 支持边带Management Transport 协议
— SB MGMT UP = 0
— 本地SoC/固件未将边带保持在RESET 状态
— 管理端口网关表明其已准备好进行管理传输路径初始化
— 管理传输路径的链路训练触发已发生(触发在4.5 节开头定义)}
Data、Valid、Clock 和Track 发送器处于三态
Data、Valid、Clock 和Track 接收器允许被禁用
如果[Management Transport protocol is not supported]或者[SB_MGMT_UP = 0],边带发送器保持低电平
Sideband 接收器已启用
如果[Management Transport protocol is supported]并且[SB_MGMT_UP = 1],则物理层在RESET 状态下可用于边带数据包(包括管理端口消息的任何边带数据包)的发送/接收。
如果[Management Transport protocol is not supported]或者[SB_MGMT_UP = 0]:
当LTSM 处于RESET 状态时,允许物理层实现将任何新的或待处理的未发送边带寄存器访问请求作为不支持的请求处理,如果这样做,它必须返回相应的完成以及端到端信用和RDI 信用给适配器。同样,对于寄存器访问完成,允许物理层实现丢弃任何新的或待处理的未发送完成,并且由于完成不消耗信用,因此不会为这些向适配器返回信用。
当LTSM 处于RESET 状态时,实现可以以依赖于实现的方式处理任何新的或待处理的未发送供应商定义的消息。这可能包括丢弃消息并记录错误。
4.5.3.2 Sideband Initialization (SBINIT)
在此状态下,边带(SB)接口被初始化和修复(在适用时)。如果支持管理传输并且SB_MGMT_UP 标志设置为1:
边带的初始化和修复(本节后面所示的先进封装的步骤1 至步骤9 以及标准封装的步骤1 至步骤7)被跳过,并且在此状态下仅执行SBINIT Done Req/Resp 握手(请参阅本节后面所示的先进封装流程的步骤10 和标准封装流程的步骤8);否则,遍历所有步骤
在此状态下,物理层边带可用于边带数据包(包括管理端口消息的任何边带数据包)的发送/接收当不执行与该状态相关的动作时:
Data、Valid、Clock 和Track 发送器保持三态
Data、Valid、Clock 和Track 接收器允许被禁用
如果[Management Transport protocol is not supported]或者[SB_MGMT_UP 标志被清除为 0]或者[a Sideband Packet is not being sent],SB 发送器继续保持低电平
SB 接收器继续启用
SB 初始化过程在800 MT/s 下使用800 MHz 边带时钟执行。
如果[Management Transport protocol is not supported]或者[SB_MGMT_UP = 0]:
当LTSM 处于SBINIT 状态时,允许物理层实现等待特定的实现时间量,以查看SBINIT是否正在进行或完成,随后将任何新的或待处理的未发送边带寄存器访问请求作为不支持的请求处理,如果将请求视为不支持的请求,它必须返回相应的完成以及端到端信用和RDI 信用给适配器。同样,对于寄存器访问完成,允许物理层实现等待特定的实现时间量,以查看SBINIT 是否正在进行或完成,随后丢弃任何新的或待处理的未发送完成,并且由于完成不消耗信用,因此不会为这些向适配器返回信用。当LTSM 处于SBINIT 状态时,实现可以以依赖于实现的方式处理任何新的或待处理的未发送供应商定义的消息。这可能包括丢弃消息并记录错误。
先进封装除了DATASB 和CKSB 之外,还有冗余的SB 时钟和SB 数据通道(DATASBRD、CKSBRD)。可能需要互连修复的先进封装的SBINIT 序列如下:
1. UCIe 模块必须启动并持续发送64 个UI 时钟模式的迭代(时钟模式定义为从1 开始,在每次传输的UI 进行切换,即1010…),并且在两个边带数据发送器(TXDATASB 和TXDATASBRD)上发送32 个UI 低电平。在64 个UI 时钟模式传输期间,UCIe 模块必须在TXCKSB 和TXCKSBRD 上发送选通,否则选通被门控(保持低电平)。
2. UCIe 模块Partner必须使用其传入的两个边带时钟在其Sideband 接收器上对每个传入的数据模式进行采样(这形成了四个接收器/时钟组合)。
3. 如果检测到128 个UI 时钟模式,则边带数据-Clock 接收器组合检测被认为成功。
4. 如果UCIe 模块Partner在其至少一个边带数据-Clock 接收器组合上成功检测到该模式,则在再进行四次64-UI 时钟模式和32-UI 低电平的迭代后,必须停止在其边带发送器上发送数据和时钟。这将考虑到UCIe 模块和UCIe 模块Partner从RESET 状态出来的任何时间差异。UCIe模块上的边带发送器和接收器现在必须启用,以发送和接收边带消息
5. 如果在其Sideband 接收器上未检测到该模式,UCIe 模块必须继续在其边带发送器上交替发送该模式1 ms 和保持低电平1 ms,总共持续8 ms。在此期间,UCIe 模块的Sideband 接收器必须保持启用。8 ms 后超时。如果发生超时,UCIe 模块进入TRAINERROR 状态。
6. 如果在多个边带数据/时钟组合上检测成功,设备可以根据优先级顺序选择一个组合。边带分配的伪代码:
7. 如果UCIe 模块上的边带被启用以发送和接收边带消息(步骤4),UCIe 模块必须开始并继续在TXDATASB 和TXDATASBRD 上发送{SBINIT Out of Reset}边带消息,同时发送TXCKSB 和TXCKSBRD,直到在其Sideband 接收器中检测到相同的消息或在8 ms 时发生超时。
8. 如果在其Sideband 接收器上成功检测到{SBINIT Out of Reset}边带消息,UCIe 模块停止发送边带消息。在发送任何进一步的边带消息之前,UCIe 模块和UCIe 模块Partner都必须根据{SBINIT Out of Reset}边带消息中包含的信息应用边带数据/时钟分配(称为功能边带,functional sideband)。
9. 任何进一步的边带消息必须在功能边带上发送和接收。现在可以执行任何边带消息交换。
10. UCIe 模块发送{SBINIT done req}边带消息并等待响应。如果成功接收到此消息,UCIe模块Partner用{SBINIT done resp}边带消息进行响应。当UCIe 模块已发送并接收到{SBINIT done resp}边带消息时,UCIe 模块必须退出到MBINIT。当发送/接收芯粒支持Management Transport 协议时,以下附加规则适用。这些附加规则是为了在管理传输路径先前已建立(即,SB_MGMT_UP 标志设置为1)且在RESET 状态下的链路训练状态机发生了其中一个主带链路训练触发(见第4.5 节)的情况下启动主带链路训练所必需的。
— 如果正在接收{SBINIT done req}边带消息的模块Partner处于RESET 状态并且准备进行主带初始化,该模块Partner必须转换到SBINIT 状态,用{SBINIT done resp}边带消息进行响应,然后发送{SBINIT done req}边带消息。
— 如果模块Partner要么[in RESET state but not yet ready to proceed with mainband initialization]要么[in a state machine state other than RESET/SBINIT],则必须忽略接收到的{SBINIT done req}边带消息。
— 发送{SBINIT done req}边带消息的UCIe 模块如果在常规的8 ms 时间窗口内未收到响应,则必须转换到RESET 状态(通过TRAINERROR 状态)。在这种情况下,UCIe模块可以选择在再次从RESET 状态转换到SBINIT 状态后重新发出{SBINIT done req}边带消息。UCIe 模块可以在RESET 状态等待新的训练触发之前重复此过程N 次(N的值取决于实现)。UCIe 模块Partner必须合并多个未处理的{SBINIT done req}边带消息,并仅用单个{SBINIT done resp}边带消息进行响应。
如果边带消息交换成功,下一个状态是主带初始化(MBINIT)。
不支持互连通道冗余和修复的标准封装的SBINIT 序列如下:
1. UCIe 模块必须启动并持续发送64 UI 时钟模式的迭代(时钟模式定义为从1b 开始,在每次传输的UI 进行切换,即1010…),并且在其边带发送器(TXDATASB)上发送32 UI 低电平。在64 UI 时钟模式持续期间,UCIe 模块必须在其边带时钟(TXCKSB)上发送选通,否则选通被门控(保持低电平)。
2. UCIe 模块Partner必须用传入的时钟对传入的数据模式进行采样。
3. 如果检测到128 UI 时钟模式,则边带模式检测被认为成功。
4. 如果UCIe 模块成功检测到该模式,在步骤1 中的模式再进行四次迭代后,它将停止在其边带发送器上发送数据和时钟。这将考虑到两个UCIe 模块从RESET 状态出来的任何时间差异。UCIe 模块的边带发送器和接收器现在必须分别启用以发送和接收边带消息。
5. 如果在其Sideband 接收器上未检测到该模式,UCIe 模块继续在其发送器上交替发送该模式1 ms 和保持低电平1 ms,总共持续8 ms。在此期间,Sideband 接收器必须启用。8 ms 后超时。如果发生超时,UCIe 模块必须退出到TRAINERROR。如果如步骤3 所述在任何时候成功检测到模式,UCIe 模块按照步骤4 所述启用边带消息传输,并继续到步骤6。
6. 一旦边带检测成功(步骤5),UCIe 模块必须开始并持续在TXDATASB 上发送{SBINIT Out of Reset}边带消息,同时发送TXCKSB,直到在其Sideband 接收器中检测到相同的消息或发生超时。
7. 如果{SBINIT Out of Reset}边带消息检测成功,UCIe 模块必须停止发送该消息。现在可以进行任何边带消息交换。
8. UCIe 模块必须发送{SBINIT done req}边带消息。如果此消息成功接收,UCIe 模块Partner用{SBINIT done resp}边带消息响应。当UCIe 模块已发送并接收到{SBINIT done resp}边带消息时,UCIe 模块必须退出到MBINIT。当发送/接收芯粒支持Management Transport 协议时,以下附加规则适用。这些附加规则是为了在管理传输路径先前已建立(即,SB_MGMT_UP标志设置为1)且在RESET 状态下的链路训练状态机发生了其中一个主带链路训练触发(见第4.5 节)的情况下启动主带链路训练所必需的。
— 如果正在接收{SBINIT done req}边带消息的模块Partner处于RESET 状态并且准备进行主带初始化,该模块Partner必须转换到SBINIT 状态,用{SBINIT done resp}边带消息进行响应,然后发送{SBINIT done req}边带消息。
— 如果模块Partner要么[in RESET state but not yet ready to proceed with mainband initialization]要么[in a state machine state other than RESET/SBINIT],则必须忽略接收到的{SBINIT done req}边带消息。
— 发送{SBINIT done req}边带消息的UCIe 模块如果在常规的8 ms 时间窗口内未收到响应,则必须转换到RESET 状态(通过TRAINERROR 状态)。在这种情况下,UCIe模块可以选择在再次从RESET 状态转换到SBINIT 状态后重新发出{SBINIT done req}边带消息。UCIe 模块可以在RESET 状态等待新的训练触发之前重复此过程N 次(N的值取决于实现)。UCIe 模块Partner必须合并多个未处理的{SBINIT done req}边带消息,并仅用单个{SBINIT done resp}边带消息进行响应。
如果边带消息交换成功,下一个状态是主带初始化(MBINIT)。在初始化和操作的剩余部分,当不发送边带数据包时,边带发送器保持低电平,Sideband 接收器启用。
4.5.3.3 MBINIT
在此状态下,主带(MB)接口被初始化、修复或宽度降级(如适用)。主带上的数据速率设置为支持的最低数据速率(4 GT/s)。
对于先进封装,可能需要进行互连修复。MBINIT 中的子状态允许检测和修复Data、Clock、Track 和Valid 通道。对于不需要通道修复的标准封装,子状态用于以最低数据速率检查功能,并在需要时进行宽度降级。
4.5.3.3.1 MBINIT.PARAM
此状态用于执行交换设置最大协商速度和其他PHY 设置所需的参数。主带发送器保持三态,并且允许禁用主带接收器。以下参数通过边带与UCIe 模块合作Partner进行交换:
“Voltage swing”:五位值,表示到UCIe 模块合作Partner的发送器电压摆幅。UCIe 模块合 作Partner必须使用此值及其接收器端接信息来为其接收器设置参考电压(Vref)。{MBINIT.PARAM configuration resp}边带消息中的相应位被保留。
“Maximum Data Rate”:四位值,表示到UCIe 模块合作Partner的最大支持数据速率。此值 必须考虑该数据速率下的所有所需功能(BER、CRC/Retry、正交时钟相位支持等)。UCIe 模块合作Partner必须将此值与其支持的最大数据速率进行比较,并且必须在{MBINIT.PARAM configuration resp} 边带消息中以最大公共数据速率编码进行响应。例如,如果UCIe 模块能够支持8 GT/s,而UCIe 模块合作Partner通告为16 GT/s,则UCIe模块必须选择8 GT/s 并作为响应发送回去。
“Clock Mode”:一位值,表示UCIe 模块向UCIe 模块合作Partner请求的选通或连续时钟。 UCIe 模块合作Partner必须使用此信息在其Clock 发送器上设置时钟模式。{MBINIT.PARAM configuration resp}边带消息必须反映相同的值。连续时钟模式要求时钟自由运行,并在从UCIe 模块合作Partner接收到{MBTRAIN.RXCLKCAL start req} 边带消息后强制执行。在MBTRAIN 的剩余部分(除非由于错误退出
MBTRAIN.LINKSPEED)和ACTIVE 中,时钟保持自由运行。
“Clock Phase”:一位值,表示UCIe 模块向UCIe 模块合作Partner请求对UCIe 模块转发时 钟的时钟相位支持。只有在通告的最大数据速率允许的情况下(见表5-8),此值才应 设置为1b。如果提出了此请求且操作数据速率允许,则{MBINIT.PARAM configuration resp} 边带消息中的相应位必须设置为1b。
“Module ID”:UCIe 模块发送其“Module ID”。如果在多模块配置中,UCIe 模块合作伙 伴可使用此ID 用于字节映射、模块启用/禁用信息等。{MBINIT.PARAM configuration resp}边带消息中的相应位被保留。
“UCIe-A x32”:当DVSEC UCIe Link Capability 寄存器中的APMW 位(见第9.5.1.4 节) 设置为1b(或)PHY Control 寄存器中的“Force x32 width mode in x64 Module”(见第 9.5.3.23 节)设置时,此位设置为1b;否则,该位设置为0b。如果x64 Advanced Package 模块支持宽度缩减以与x32 Advanced Package 模块互操作,则它在 MBINIT.REVERSALMB 期间使用来自其链路合作Partner的此信息来调整结果。{MBINIT.PARAM configuration resp}边带消息中的相应位被保留。
“UCIe-S x8”:当DVSEC UCIe Link Capability寄存器(见第9.5.1.4节)中的第20位SPMW 设置为1(或)PHY Control 寄存器(见第9.5.3.23 节)中的“Force x8 Width”位设置为1 时,此位在消息{MBINIT.PARAM configuration req} 中设置为1。否则,此位设置为0。
有关如何使用此位,请参阅第4.5.3.3.6 节。{MBINIT.PARAM configuration resp}边带消息中的相应位被保留。
“Sideband Feature Extensions”:如果发送器支持边带功能扩展(见第4.5.3.3.1.1 节), 则此位设置为1。
以下是参数交换的顺序:
1. UCIe 模块向UCIe 模块合作Partner发送{MBINIT.PARAM configuration req} 边带消息以交换参数。
2. 在收到{MBINIT.PARAM configuration req} 边带消息后,UCIe 模块合作Partner进行解析并以{MBINIT.PARAM configuration resp} 边带消息进行响应。
3. 在UCIe 模块发送并接收{MBINIT.PARAM configuration resp} 边带消息后,UCIe 模块必须退出到MBINIT.CAL。
强烈建议,如果未协商互操作参数,则硬件将此情况映射到Error Log 1 寄存器中的内部错误,并将LTSM 转换为TRAINERROR,将RDI 转换为LINKERROR,并在RDI 上使pl_trainerror 有效。对于多模块链路,除“Module ID”外的所有参数对于所有模块必须相同,如果不是这种情况,强烈建议硬件将此情况映射到相同的错误升级路径。
当支持管理传输时,链路训练状态机从MBINIT.PARAM 状态退出到MBINIT.CAL 所需的附加条件为:
管理传输未协商。
(或者)管理传输已协商,并且初始化成功或者在初始化期间检测到错误。
(或者)在进入MBINIT 状态时,SB_MGMT_UP 标志已设置
且
不存在MBINIT 停滞条件(见第4.5.3.3.1.2 节)
且
端口准备好训练主带。
4.5.3.3.1.1 Management Transport Path Negotiation
边带上的Management Transport 协议是可选的,芯粒使用本节中描述的机制来协商对其的支持。图4-35 展示了针对单个模块设计的示例协商流程。边带功能扩展支持(Sideband Feature Extensions Supported,SFES)是{MBINIT.PARAM configuration req} 边带消息中的第14 位
(见表7-11)。请注意,本节中描述的与管理路径协商相关的MBINIT.PARAM 状态握手,在通过MBINIT 状态的所有转换中执行。如果在进入MBINIT 状态时设置了SB_MGMT_UP标志(有关何时发生这种情况,请参阅第8.2.3.1.2 节),则管理传输流量在MBINIT.PARAM状态下继续而不会中断。
除非另有规定,芯粒可以选择检查任何协商阶段规则(在后续项目中讨论)的违反情况,当检测到违反时,芯粒启动TRAINERROR 握手(见第4.5.3.8 节)将LTSM 返回到RESET状态。
{MBINIT.PARAM configuration req} 边带消息中的边带功能扩展支持(Sideband Feature Extensions Supported,SFES)位(见表7-11,在消息中它是第[14]位)被定义为在链路 训练的MBINIT.PARAM 状态期间指示对扩展边带功能(其中管理传输是其中之一)的支持。
— 0 => 边带功能扩展不受支持,1 => 边带功能扩展受支持。
— 在多模块设计中,所有模块在请求消息中此位的值必须相同。
— 设置SB_MGMT_UP 标志后,在通过MBINIT.PARAM 状态的所有后续转换中,此位的值必须保持相同,直到该标志被清除。
如果远程链路Partner支持边带功能扩展,并且在{MBINIT.PARAM configuration req} 边带消息中接收到设置为1 的SFES 位,远程链路Partner将在其发出的{MBINIT.PARAM configuration resp} 边带消息中设置SFES 位;
否则,在响应消息中该位将被清除为0。
— 在多模块设计中,所有模块在响应消息中此位的值必须相同。
如果在所有模块中接收到的{MBINIT.PARAM configuration resp} 边带消息中的SFES 位被设置为1,那么芯粒与远程链路Partner协商支持的扩展边带功能的下一级细节。如果 在任何模块中接收到的{MBINIT.PARAM configuration resp} 边带消息中的SFES 位被 清除为0,那么从MBINIT.PARAM 状态退出到MBINIT.CAL 状态。
— {MBINIT.PARAM SBFE req} 边带消息(见表7-11)在所有模块上发送给远程链路Partner,然后远程链路Partner在所有模块上回送{MBINIT.PARAM SBFE resp} 边带消息。
此握手在每个方向上独立进行。
SBFE Req[0]/Resp[0](也称为MTP 位)表示对管理端口消息的发送/接收的支持。如果{MBINIT.PARAM SBFE req} 边带消息中设置了MTP 位,并且远程链路Partner支持接收管理封装消息,则它必须在{MBINIT.PARAM SBFE resp} 边带消息中设置MTP 位。
在SB_MGMT_UP 标志设置为1 之后,在通过MBINIT.PARAM 状态的所有后续转换中,此位的值必须保持相同,直到该标志被清除为0。
在{MBINIT.PARAM configuration req/resp} 中协商SFES 时,如果芯粒在请求消息中通 告了SFES 支持,那么只要相关请求消息通告了该能力,芯粒在响应消息中也必须通告 该支持。如果芯粒在请求消息中未通告SFES 支持,那么芯粒在响应消息中不得通告该支持。
对于多模块UCIe 链路,协商是每个模块独立进行的。
— 物理层实现可能仅在模块的子集上在SBFE 请求消息中通告MTP 位。
注意:在给定Module ID 上发送的消息可能会在PartnerSideband 接收器的不同Module ID 上接收。因此,多模块设计中的所有边带链路都必须能够接收MPM,即使它们仅限于在边带链路的子集上仅支持这些消息的发送。有关说明这一点的多模块发送/接收场景示例,请参见图4-37 和图4-38。
在所有模块的MBINIT.PARAM 期间,向远程链路Partner发送{MBINIT.PARAM SBFE resp} 边带消息并且从远程链路Partner接收{MBINIT.PARAM SBFE resp} 边带消息完成(成功或不成功)之后,PHY 将以下内容通知管理端口网关:
— 在协商阶段结束时,使用pm_param_local_count[N-1:0]信号(更多详细信息见第10.1 节)在发送侧具有管理传输支持的协商链路数量。这是值RxQ-Local。如果链路发送的{MBINIT.PARAM SBFE req} 边带消息中MTP 位设置为1,并且接收到相应的{MBINIT.PARAM SBFE resp} 边带消息中其MTP 位也设置为1,则该链路被认为在发送侧协商了管理传输支持。
— 在接收侧具有管理传输支持的协商链路数量,使用
pm_param_remote_count[N-1:0]信号(更多详细信息见第10.1 节)。这是值RxQ-Remote。如果链路接收到的{MBINIT.PARAM SBFE req} 边带消息中MTP 位设置为1,并且发送了相应的{MBINIT.PARAM SBFE resp} 边带消息中其MTP 位也设置为1,则该链路被认为在接收侧协商了管理传输支持。
一旦模块发送了{MBINIT.PARAM SBFE resp},它必须能够接收初始化阶段相关的消 息(见第8.2.3.1.2 节)。
当{MBINIT.PARAM SBFE resp} 已在所有模块中发送和接收时,协商阶段结束。
在SBINIT 状态下,如果SB_MGMT_UP 标志从1 转变为0,芯粒必须将LTSM 移至 TRAINERROR 状态-> RESET 状态。
在MBINIT状态下,如果SB_MGMT_UP标志从1转变为0,芯粒必须执行TRAINERROR 握手并将LTSM 移至TRAINERROR 状态-> RESET 状态。