Post

UCIE协议

UCIE协议

3.0 Adapter

这是链路的初始化,stage2是RDI -> Active结束。

stage3主要在参数Exchange阶段协商在给定phy速率下是否需要retry;其余参数交换参考3.2.1.2;FDI bring up

link_initial

3.3 68B flit的对齐问题

Adapter在RDI / 链路侧传输连续flit时按 256B 倍数组织数据

如果 Retry 或者 Retrain,都要插入PDS 然后对齐到 256B 的边界

PDS和普通的 Flit Head可能会产生混淆。

  1. 错把PDS认为是Regular FH的可能性很小,即使发生也会触发CRC
  2. 错把Regular FH认为是FDS的可能存在,当不满足四个条件(见3.3.2.1)的时候,检查后面第一个收到的有效flit是否满足预期的sequence number,并且CRC需要通过,不通过触发retry

3.5 状态机的变化

Active / Retrain / LinkError :RDI SM -> Adapter LSM Active -> vLSM Active(PCIE/CXL)

PM的顺序和上面的反过来,RDI最后进PM

LinkReset / Disabled : Adapter LSM 先和远端协商,所有相关 Adapter LSM都同意进入,最后让 RDI SM 进入 LinkReset / Disabled

3.6 PM

FDI定义了统一flow进入PM—-based on Link idle time. 判定链路空闲时间的具体算法与迟滞效应(hysteresis)由实现方案自行定义。

如果打开这个 feature,Adapter 会在业务数据流中:每隔一大段数据,插入一小段 parity bytes

该机制通过软件向位于UCIe链路两端适配器中的使能位寄存器写入1b来启用(寄存器详情参见第7.5.3.9节)。软件必须在两个适配器上完成使能位写入后触发UCIe链路重训练

Parity_test

4.0 Logical Phy

  • 链路初始化,链路训练 ,PM

  • 把上层数据字节分配到不同 lane 上发送: 一条lane的传输单位是按Byte,单个Byte内部是LSB first。Valid Framing是做Byte边界的

lane_byte

如果链路中间有 Retimer,那么 valid 这根线不只是做分帧,还顺带承载了 credit release 信息。每个 credit 对应 256B 数据,编码形式请查看4.1.2.1

validframing_retimer


Valid=0 后,还要继续输出一段固定的 postamble clock才允许关闭时钟,见4.1.3

clock_gate


  • sideband传输

sideband message 格式是:64-bit header后跟 • 32-bit 或 64-bit data • 如果只有 32-bit data,仍按 64-bit serial packet 发,高位补 0。

两个 sideband serial packet 之间,至少插入32 bit low的间隔

4.1 Sideband Performant Mode (PMO)

协商好 PMO bit=1之后,PMO模式下可以按64UI连续发送,而不需要等待32UI

4.2 Lane Reversal

reversal就是本地 lane 0 可能接到远端 lane N-1,本地 lane 1 接远端 lane N-2 …
只在发送端实现,发送端负责把 logical lane 顺序反过来映射到 physical lane
只有数据 lane 和冗余数据 lane 能反转:Track,Valid,Clock,sideband这些都不能反转。 Track是 时钟跟踪/采样对齐辅助信号

Lane ID 的作用就是:在训练阶段识别“我现在接到的物理 lane,到底对应哪一条逻辑 lane”


  • 4.3在讲repair的mapping,包含data lane repair、Data Lane repair with Lane reversal、Clock and Track Lane repair以及Valid Repair

如果链路做了 lane reversal,再发生单条 lane 坏掉时,修复方向要反过来

4.4 Data to Clock Training and Test Modes

PHY 训练/测试模式下,怎么用伪随机测试图样去检查链路质量:

发送端和接收端的 pattern generator 同步启动,发送端和接收端都实现同一个 LFSR. 接收端必须支持两种比较方式: 1️⃣逐 lane 比较(每条通道的比较结果可通过sideband读取) 2️⃣ Aggregate comparison(聚合比较)

tran_test_logic aggregate_compare


UCIe 用 LFSR 做两件事,每条 Lane 可以各自有一个独立 LFSR,不同 lane 的 LFSR seed 不一样

  1. Scrambling
  2. Training/Test pattern generation(训练/测试图样生成)

不同 lane 的 LFSR seed 不一样,按 lane number modulo 8 复用的。lane 0 用一套 seed;lane 1 用一套 seed;lane 8 再回到 lane 0 那套 你不一定真的要“每条 lane 一个完整 LFSR”

LFSR_Tap

4.5 Link的initial和training

  • 训练里的 PI 指的是“采样时钟相位选择/生成方法”
  • 除 RESET 和 TRAINERROR 外,每个训练状态/子状态超时都是 8ms
  • 如果收到 sideband 的 Stall,超时计数要清零
  • 训练失败若达到实现定义次数,PHY 回到 RESET
  • 如果是软件触发或 RDI 触发训练而失败 或者 由于物理层超时,link up -> link down。PHY 要在 RDI 上报 fatal error

链路训练可以由以下三种触发:(UCIE v1.1)

  1. 软件把 Start UCIe Link Training 位置 1
  2. Adapter 在 RDI 上发起 Reset → Active 请求
  3. 任意 sideband 接收口检测到 SBINIT pattern(two consecutive iterations of 64 UI clock pattern and 32 UI low)
UCIE 2.0更新:sideband training 和 mainband training
  • sideband training
    1. 软件写Retrain Link
    2. Management Port Gateway自动发起(比如Management reset之后自动触发train)
    3. 被动检测触发(SB_MGMT_UP= 0,接收端在某个sideband的 clock / data pin上看到了SBINIT pattern
  • mainband training
    1. (同1.1的1和2)
    2. 如果该 UCIe link 支持 Management Transport,软件也可以通过 Sideband 或 Mainband 的 Management Port Structure 去写 Retrain Link = 1
    3. 如果不支持 Management Transport,或者SB_MGMT_UP=0,就靠检测 SBINIT pattern。如果支持就靠接受SBINIT done req

UCIe 在做链路训练时反复调用的基础测试原语,这些操作会被后续的 mainband initialization、training、margining 复用

lphy_test

  • 单点测试:固定一个PI相位,发测试图样,接收端逐UI比较。用于测试某一个采样点是否可用
  • 眼宽扫描:扫多个PI相位,持续记录各相位下的通过 / 失败结果。用于找出passing phase range
1
2
3
4
5
6
7
8
9
10
11
12
1. 发起方先通过 sideband 通知对端:我要开始测了,请把本地训练参数配好。  
2. 双方清 LFSR / 清错误统计。    
3. 发送端在 mainband 上发一个已知测试 pattern。  
4. 接收端把收到的数据和本地期望 pattern 比较,并记录结果。  
5. 通过 sideband 把比较结果取回来,判断 pass / fail。  
6. 如果是 sweep,就重复多次,换不同 PI phase 扫描。  
7. 双方交换结束消息,完成这一轮的训练。  

用 sideband 做控制协调,用 mainband 发训练码型,用比较结果来校准采样时钟位置。

Point test: 在当前这个 PI 相位下,接收是否正确?
Eye width sweep:哪些 PI 相位是能工作的?通过区间有多宽?

当链路中间插了 UCIe Retimer 之后,需要彼此协商一下用什么速度和配置

train_retimer

训练时可配置的参数:

data2clk_train_parameter

  1. Tx Pattern Generator Setup:发送图样
  2. Tx Pattern Mode Setup:这些pattern怎么发送

PHY 在链路从“没起来”到“真正可用”之间,必须按什么状态顺序推进,以及运行中掉速、重训、低功耗、报错时怎么回到这些状态。它给的是一套 PHY 级 bring-up 状态机

link_train_SM

1
2
3
4
5
6
1. SBINIT 把 sideband 建好,随后 MBINIT/MBTRAIN 做 mainband 初始化与训练.  
之后在 LINKINIT 交换 Adapter/Link management 消息,最后进入 ACTIVE 收发正常事务  

2. SBINIT 是 sideband 初始化与修复,MBINIT 是最低速率下的 mainband 初始化和 on-die calibration / interconnect repair,MBTRAIN 是把 mainband 提到协商出的最高速率并做 data-to-clock 居中训练,LINKINIT 用于交换Adapter 和 link management 消息,ACTIVE 才是正式传事务的状态
   
3. 如果训练或运行中出现 fatal / non-fatal 事件,就进 TRAINERROR,再回 RESET
Reset

Reset停留至少4ms。推出Reset之前要满足:

  1. sideband clock 800MHz
  2. mainband clock设到最低速率
  3. Phy不在保持RESET
  4. 出现mainband的training trigger

在RESET中,Tx的Data / Valid / Clock / Track是三态;Rx允许关闭;Sideband的Transmitter保持low

LTSM处于RESET状态时,对于新发或者待发未传输的sideband register access可以直接返回UR,然后返还credit。
对于completion,Phy Layer可以直接丢掉,completion不消耗credit

SBINIT

初始化工作在800MT/s,sideband时钟为800MHz。

LTSM处于SBINIT状态时,Phy Layer可以等待一个实现决定的时间,以观察SBINIT是否推进或者完成,之后基本情况和应对方式和RESET一样。
Advanced Package还有冗余的Sideband的Lane,修复详情见4.5.3.2

standard package下,整个流程如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
发送固定 Sideband Pattern(101010...共64UI,期间TXCKSB输出strobe)
  ↓
检测到对端 Pattern?(128UI的clock pattern)
  ├─ 否:1ms发/1ms停重试,最多8ms,失败→TRAINERROR
  └─ 是:再发4轮后切到消息模式
              ↓
        发送/接收 {SBINIT Out of Reset} (收到对方发来的Out of reset进入下一步)
              ↓
        发送 {SBINIT done req}
              ↓
        收到 {SBINIT done resp}?
              └─ 是:进入 MBINIT

对于Management Transport protocol支持性,有三条异常/特殊规则。见4.5.3.2,page134
MBINIT

对于standard package,no Lane Repair is needed。Sub-states在两种不同的package中有不同的用法。

MB_init_repair

4.6 Runtime Recalibration

链路已经在 ACTIVE 正常跑的时候,接收端还能利用 Track 信号做在线重新校准,而且 mainband 数据不用停。

1
2
3
4
5
6
7
校准时:mainband 数据仍然继续采样和处理,只是额外用 Track pattern 去微调接收端时序  

过程靠 sideband 协商:
1. 本端发 {RECAL.track pattern init req}  
2. 对端回 resp,开始发 Track pattern + clock  
3. 本端完成校准后发 done req     
4. 对端停止 pattern,回 done resp  

6.0 Sideband

  • Protocol Layer 不能直接通过 sideband 去访问远端 Protocol Layer,必须走 mailbox 间接访问

Append

  • TX/RX data to clock training:调节采样时刻 / 相位,-找 左边界 / 右边界 / eye center
  • RX reference voltage training
  • Build-in eye monitor
This post is licensed under CC BY 4.0 by the author.