PCIE链路训练-状态机跳转

detect状态下的跳转:

detect quite -> detect active

12ms超时,或者再任何lane上检测到Electrical Idle Exit;

B(待补充):

1.发送receiver detection”之后没有一个lane的接收逻辑被rx检测到

2.不满足条件c比如两次detection出现差别 

detect active -> polling acive

如果所有通道上都正常检测到接收端,那么会进入下一个状态。注意如果是有个别lane被检测,但是这些lane的总数不是所有的lane数目, 那么等待12ms再次 un-configured上执行Receiver Detection sequence,如果结果和第一次相同就进入polling状态,否则进入detect状态;

---------------------------------------------------------------------------------------------------------------------------------

polling状态下的跳转:

polling active -> polling configuration(满足条件1或2之一即可)

1.满足条件(1)和(2

1TX向对端发送至少1024TS1序列(序列的link numlane num均为pad,针对所有lane

2)在detect阶段被detect到的任意lane,至少收到8个连续的training sequences,这些training sequences可以是(只要满足其中一个即可)

aTS1序列,lane numlink num均为padCompliance Receive bit (bit 4 of Symbol 5) 0

bTS1序列,lane numlink num均为padLoopback bit (bit 2 of Symbol 5)1

c:TS2序列,lane numlink num均为pad

2.如果经过24ms仍然不满足1,那么满足下列条件也可以进入Polling.Configuration状态:

1)任何一个被detectreceiverlane收到8个连续的序列,并且满足下列条件之一:

aTS1序列,lane numlink num均为padCompliance Receive bit (bit 4 of Symbol 5) 0

bTS1序列,lane numlink num均为padLoopback bit (bit 2 of Symbol 5)1

cTS2序列,lane numlink num均为pad

2)在收到一个TS1TS2之后的任意通道上至少发送了1024TS1.

2.如果任意lane仍然不满足条件2(实际上2和3是并行条件,满足其中一个即可),那么如果自进入 Polling.Active 状态以来,有一定数量的通道上检测到至少一次退出电气空闲的现象(这个数量是预先设定的,只有超过这个数目的lane满足条件才认为满足条件),那么也可以进入Polling.Configuration状态(这是为了防止一个或者多个失效的发送端或者接收端导致链路不能能进行配置)。

polling configuration -> config link width start

当任意收到连续的8TS2link nunlane num均为pad)并且自从收到TS2序列后至少发送了16TS2序列;

polling configuration -> detect

不满足E48ms超时;

J(待补充):

如果满足以下条件之一可以进入loopback状态:

1)所有发送TS1lane上,都收到了两个连续的Loopback1TS1-dsp/usp均满足

2)任意一共发送TS1lane上收到了两个连续的loopback1TS1,同时Enhanced Link Behavior Control比特为1-dsp/usp均满足

3)一个能支持64GT/sport收到了TS1,并且该TS1Flit Mode Supported bit1the Supported Link Speeds域为10111b-dsp/usp均满足

注意:任意发送 Loopback 比特置位的端口将变成 Loopback master而收到他们的端口将变成 Loopback slave

4)上层指示要求在detectreceiverlane上发送的TS1TS2,其中让loopback bit置为1-dsp/usp均满足

K(待补充):

Dsp:上层指示要求在detectreceiverlane上发送的TS1TS2,其中让disable bit置为1

Usp:任何TS1lane上收到了两个连续的TS1,并且TS1disable位为1

---------------------------------------------------------------------------------------------------------------------------------

config状态下的跳转:

config.linkwidth.start -> config.linkwidth.accept

dsp

1)crosslink configuration不支持的情况下:任意lane,如果先收到了一个或者多个TS1,其link numlane num都是pad,随后又收到两个连续的TS1,其中link num为具体数值,lane numpad,那么满足进入Configuration.Linkwidth.Accept状态的条件;

(2)crosslink configuration支持,dsp可能转变为usp,转变后的状态跳转完全遵循usp的准则。

Usp(有问题??)

如果一些通道接收到了两个连续的链路编号有效,通道编号为填充符号的 TS1,那么这个端口就会进入 Configuration.Linkwidth.Accept 子状态.

在这个阶段中usp是要做接收到dsp发过来的TS1(link num不为pad,lane num为pad),收到以后再将其其发给dsp,是不是可以理解为usp开始发这种ts1的时候,发了一段时间以后就会进入linkwidth.accept.

config.linkwidth.start -> detect

-dsp/usp均满足

24ms超时;

config.linkwidth.accept -> config.lanenum.wait

Dsp:

dsp不会在 Configuration.Linkwidth.Accept 子状态长时间停留。一旦dsp收到了usp发送的必须数量的TS1(至少两个连续的TS1),明确了链路宽度之后,DSP 会更新一些必须的内部状态,发送通道编号不为填充字符的TS1,并立刻转为 Configuration.Lanenum.Wait 状态,等待 USP 确认通道编号分配。

Usp:

usp必须对dsp提出的通道编号分配做出响应。如果一个链路可以由多个link num和非pad TS1的通道合并组成,并且它们接收到两个连续 TS1,其中链路编号相等,通道编号非pad,那么usp应该在可行的情况下,发送通道编号相同的TS1表示接受分配,或者在必要的时候回应不同的编号值提议。(比如应用了选配的通道顺序翻转特性时)。随后跳入下个状态。

config.linkwidth.accept -> detect

-dsp/usp均满足

2ms超时或没有链路可以配置或者所有lane上都收到了两个连续的TS1,其中link num或者lane num钧设为pad

config.lanenum.wait -> config.lanenum.accept

Dsp:

如果下述两个条件之一满足,那么跳转到 Configuration.Lanenum.Accept 状态:

(1)如果在所有通道上都接收到连续两个TS1,它们携带的链路和通道编号都和dsp在这些通道上发送的一致。

(2)如果在任意一个检测到接收方的通道上,接收到连续两个TS1,它们的通道编号和首次进入到Configuration.Lanenum.Wait接收到的TS1中的数值不一致,并且至少有一些通道接收到了有效的链路编号(其实我理解就是usp对dsp发过来的lane num改动了)。

Usp:

如果下述两个条件之一满足,那么跳转到 Configuration.Lanenum.Accept 状态:

(1)如果在所有通道上都接收到连续两个 TS2。

(2)如果在任意一个检测到接收方的通道上,接收到连续两个 TS1,它们的通道编号和首次进入到Configuration.Lanenum.Wait时接收到的 TS1 中的数值不一致,并且至少有一些通道接收到了有效的链路编号(dsp收到usp改变lane num的TS1之后再次发给usp)。

config.lanenum.wait -> detect

触发了上述的 2ms 超时事件,或者所有通道接收到两个连续的 TS1,其链路和通道编号都为填充符号。-dsp/usp均满足

config.lanenum.accept -> config.complete

dsp:

如果dsp在所有通道上都接收到连续两个TS1,它们携带的链路和通道编号都和 dsp在这些通道上发送的数值一致,那么代表usp同意了dsp通告的链路编号和通道编号,dsp随之进入 Configuration.Complete 状态。

usp:

如果 USP在所有通道上都接收到连续两个TS2,它们携带的链路和通道编号都和 USP 在这些通道上发送的 TS1 中的数值一致,那么USP 进入 Configuration.Complete 状态。

config.lanenum.accept -> detect

如果当前link不能被config或者说收到了所有lane收到了两个连续的TS1,其中link num和lane num是pad;

config.complete -> config.idle

(1)当所有发送 TS2 的通道都接收到 8 个满足条件的 TS2 时(TS2中data rate匹配等,比如link up configure),并且在接收到一个 TS2 后该通道已经发送至少 16 个 TS2 后,状态机将跳转至下一个状态:Configuration.Idle。-dsp/usp均满足

(2)2ms超时后,如果当前速率大于等于8GT/s,并且idle_to_rlock_transitioned小于'hff。-dsp/usp均满足

config.complete -> detect

2ms timeout并且当前速率是2.5GT/s或者说5GT/s。-dsp/usp均满足

config.idle -> L0

当在non-flit模式下使用8b/10b编码的时候,那么在全部已配置通道上接收到 8 个连续的idle data,并且在收到一个空闲符号后已经发送了 16 个idle data symbol,进入 L0 状态。

当在non-flit模式下采用 128b/130b 编码方式,那么在全部已配置通道上接收到 8 个连续idle data symbol,并且在收到一个idle data symbol后已经发送了 16 个idle data symbol,并且不是在 Configuration.Complete 状态超时后下进入的本状态,那么跳转至 L0 状态

config.idle -> detect或recovery

未满足上述条件,2ms 超时后:

如果变量 “idle_to_rlock_transitioned” 小于FFh,那么下一个跳转状态是 Recovery(Recovery.Rcvrlock)。跳转后:

(a)8.0 GT/s 时,变量 idle_to_rlock_transitioned 自增 1。

(b)2.5 或者 5.0 GT/s 时,变量 idle_to_rlock_transitioned 设置为 FFh。

注意:该变量记录了因为配置过程没有起作用,从而导致状态机从 Configuration.Idle 状态跳转到 Recovery 状态的次数。这可能是因为均衡设置不合适,或者当前选择的速率无法正常工作导致的,Recovery 状态内会采取措施尝试解决这些问题。该变量限制了从本状态跳转至 Recovery 状态的尝试次数,从而避免了永久的无限循环。如果链路在 256 次尝试后(变量计数至 FFh)仍然没法正常工作,那么跳转回 Detect 状态重新开始,并希望这次能有更好的结果。

否则,即 idle_to_rlock_transitioned 为 FFh 时,跳转至 Detect 状态。

---------------------------------------------------------------------------------------------------------------------------------

recovery状态下的跳转:

1. 不涉及equalization(eg gen1 -> gen2):

recovery.rcvrlock -> recovery.rcvrcfg -> recovery.speed -> recovery.rcvrlock -> recovery.rcvrcfg -> recovery.idle -> L0

2. 涉及equalization(eg: gen1 -> gen3):

gen1 L0 -> recovery.rcvrlock -> recovery.rcvrcfg -> recovery.speed -> recovery.rcvrlock -> recovery eq -> recovery.rcvrlock -> recovery.rcvrcfg -> recovery idle -> gen3 L0

3.Bypass equlization to highest rate

4.No equlization needed

5.Recovery.RcvrCfg -> Recovery.Idle

(1)8个连续的TS2在所有config的lane上都受到了,并且link num,lane num和tx发送的相同、data rate identidiers相同,并且满足下列条件之一:

rx收到的连续的TS2中的speed_change为0;

当前工作速率时2.5GT/s,rx收到的或者tx发送的TS2中没有5.0GT/s或更高的data rata;

(2)在收到一个TS2之后没有被任何EIEOS打断的情况下发送了16个TS2。

6.Recovery.RcvrCfg -> configuration

non-flit mode下,在config的lane上收到了八个连续的TS1,但是收到的TS1的link num或者lane num和自己的tx发送的不匹配,并且自从收到TS1之后已经发送16个TS2(无论使用8b/10b 还是128b/130b),并且满足以下条件之一:

(1)收到的TS1中的speed_change为0;

(2)当前的速率时2.5GT/s,但是rx收到的TS1中没有大于等于5.0GT/s的速率支持或者tx发送的TS2中没有大于等于5.0GT/s的速率支持;

6.Recovery.RcvrCfg -> Recovery.Speed

情况1:

(1)满足如下条件之一:

在任意config的lane上收到了8个连续的TS2,data rate identifiers相同+symbol6中的值相同+speed_change设为1,收到的TS2是标准的TS2(采用8b/10b或128b/130b编码);

在所有config的lane上收到了8个连续的EQ TS2或128b/130bEQ TS2,data rate identifiers相同+symbol6中的值相同+speed_change设为1;

在任意config的lane上收到了8个连续的EQ TS2或128b/130bEQ TS2,data rate identifiers相同+symbol6中的值相同+speed_change设为1,并且自从任意config lane上收到了8个连续的TS2之后已经过去1ms了;

(2)当前工作速率大于等于2.5GT/s,或者说在tx发送的TS2或者rx收到的TS2中,data rate identifiers 是大于2.5GT/s的;

(3)对于8b/10b编码,在收到speed_change为1的TS2之后,至少发送了32个TS2,并且speed_change为1(并且要求在所有config的lane上+这个过程没有被EIEOS打断);对于128b/130b编码来说,在收到speed_change为1的TS2之后,至少发送了32个TS2,并且speed_change为1(并且要求在所有config的lane上,没有EIEOS打断的要求);

情况2:

(1)如果当前速率自从L0/L1进入recovery状态切到双方协商的速率(changed_speed_recovery = 1b),并且EIOS已经被检测到了/Electrical Idle的条件在任意config的lane被检测到了,并且自从进入Recovery.RcvrCfg状态后没有config的lane收到了TS2,那么状态跳转到recovery.speed;

(2)如果当前速率自从L0/L1进入recovery状态没有切到双方协商的速率(changed_speed_recovery = 0b),并且EIOS已经被检测到了/Electrical Idle的条件在任意config的lane被检测到了,并且当前工作速率高于2.5GT/s,并且自从进入Recovery.RcvrCfg状态后没有config的lane收到了TS2,那么状态跳转到recovery.speed;

这张情况下双方速率要回到2.5GT/s?? 

 7.Recovery.RcvrCfg -> detect

 48ms timeout,并且当前工作速率在2.5GT/s或5.0GT/s;

8.Recovery.RcvrCfg -> recovery.idle

情况1:

(1)所有config的lane上收到连续8个TS2,TS2的link num,lane num和tx自己发送的相互匹配,data rate相互匹配,并且满足:

rx收到的TS2中speed_change为0;或者当前数据速率为2.5 GT/s且没有请求或支持更高的数据速率(tx和rx的TS2中均没有高于5.0GT/s的速率宣告);

(2)在收到TS2之后已经发送了16个TS2,并且这个过程没有被EIEOS打断;

此外注意,这个过程中changed_speed_recovery和directed_speed_change在进入到recovery.idle状态下会被复位成0;N_FTS值会被改变用于将来的L0s状态;当使用8b/10b编码的情况下,lane-to-lane deskew必须在离开recovery.rcvrcfg状态去完成;

情况2:

48ms timeout,idle_to_rlock_transitioned < 'hff,当前速率大于等于8.0GT/s;

5.一些异常情况:

(1)recovery.rcvrlock <-> recovery.speed

lock -> speed(满足两个条件中的一个):

  • 如果当前速率设置高于 2.5 GT/s,但是自从进入 Recovery 状态后,从来没能在该速率下正常工作过,(变量 changed_speed_recovery 被清除为 0 揭示了这种现象)。此时,待离开 Recovery.Speed 状态后,速率会重新降低为 2.5 GT/s。
  • 如果变量 changed_speed_recovery 被设置为 1,表示某个高于 2.5 GT/s 的速率已经能够正常工作,但是在切换到新的协商速率后,链路不能工作,这种情况下速率会被恢复为由 L0 或者 L1 进入 Recovery 状态前的数值。

speed -> lock:

通过timeout实现。

(2)recovery eq -> recovery speed(以down端举例)

6.整体recovery状态跳转: 

<think>好的,用户现在问的是“skew deskew”,需要详细介绍。首先,回顾之前的对话,用户之前问过差分信号的skew,也就是信号偏移的问题。现在这个“deskew”应该是解决skew的方法或者技术,也就是偏移校正。 首先,我需要确认用户的需求。用户可能是在高速电路设计或者信号完整性领域工作,遇到了信号偏移的问题,想要了解如何校正。用户可能是工程师,需要具体的技术细节和应用方法,所以回答要详细且专业,但也要保持结构清晰,便于理解。 接下来,要明确skew和deskew的关系。Skew是信号传输中的时间偏差,而deskew是校正这种偏差的技术。需要分点解释,包括产生原因、校正原理、实现方法、应用场景等。 可能需要从以下几个方面展开: 1. Deskew的基本概念和原理 2. 实现Deskew的技术方法(如硬件电路、软件算法) 3. 不同应用场景中的具体应用(如芯片设计、通信系统) 4. 相关设计规范和挑战 5. 实际案例或行业标准 需要注意的是,用户之前的问题是关于差分信号的skew,所以可能需要联系到差分信号的deskew技术,比如在SerDes中的使用。同时,用户可能希望了解具体的实现方式,比如延迟锁相环(DLL)、相位插值器、可编程延迟线等。 另外,用户可能需要了解不同协议中的deskew要求,比如PCIe、DDR、以太网等,这些标准中如何规定skew的容限以及如何通过deskew技术来满足这些要求。此外,生产测试中的补偿方法,比如激光修调或者EEPROM存储校正值,也可能是用户关心的内容。 在结构上,应该保持和之前的回答类似,分点详细说明,使用表格、公式等增强可读性。同时要确保使用正确的中文术语,避免翻译生硬。需要检查是否有遗漏的关键技术点,比如动态补偿与静态补偿的区别,或者数字deskew与模拟deskew的不同应用场景。 最后,要确认回答是否解决了用户的问题,是否需要进一步扩展某个部分,比如具体的仿真流程或者最新的研究方向,如AI在deskew中的应用。可能需要询问用户是否需要更深入的信息,但根据之前的回答风格,应该提供全面的信息,并在结尾邀请用户提出更具体的问题。</think>### **Skew Deskew技术详解** 差分信号Skew Deskew是消除差分对信号传输时延差异的关键技术,直接影响高速接口(如PCIe、DDR、SerDes)的误码率性能。以下是系统化解析: --- #### **一、Deskew基本原理** **核心目标**: $$ \Delta t_{corrected} = \tau_{skew} - \tau_{deskew} \rightarrow 0 $$ 通过动态或静态补偿使差分对正负信号相位对齐 **技术分类**: | 类型 | 补偿精度 | 典型响应时间 | 应用场景 | |------------|----------|--------------|-----------------------| | 模拟补偿 | ±1ps | <10ns | 高速SerDes接收端 | | 数字补偿 | ±5ps | 1~100μs | 网络交换芯片 | | 混合补偿 | ±2ps | 50ns | 光模块CDR电路 | --- #### **二、关键实现技术** **1. 延迟锁相环(DLL)** - **结构**:包含电压控制延迟线(VCDL)+相位检测器 - **公式**: $$ \tau_{step} = \frac{t_{VCO}}{N} \quad (N=64~256) $$ - **案例**:Xilinx UltraScale+ FPGA内建DLL,补偿范围±40ps **2. 相位插值器(PI)** - **原理**:混合正交时钟相位生成中间相位 $$ \theta_{out} = \alpha\theta_0 + (1-\alpha)\theta_{90} $$ - **参数**:Intel Stratix 10 TX PI步进0.7ps **3. 可编程延迟线** - **类型对比**: | 工艺 | 分辨率 | 最大延迟 | 功耗 | |-----------|--------|----------|---------| | CMOS反相器| 5ps | 500ps | 0.5mW | | 传输门 | 2ps | 200ps | 1.2mW | | 微带线 | 0.1ps | 50ps | 0.01mW | **4. 自适应算法** - **最小峰值搜索**:通过扫描延迟值寻找最佳眼图张开度 - **梯度下降法**:以BER为代价函数优化延迟量 --- #### **三、典型应用场景** **1. SerDes接收机** - **结构框图**: ``` 差分输入 → CTLE均衡 → 多路选择器 → 时钟数据恢复(CDR) ↑ Deskew控制 ``` - **参数示例**: - PCIe Gen5:要求deskew范围±0.3UI(1UI=15ps) - 112G PAM4:每通道集成3级可调延迟单元 **2. DDR存储器系统** - **写均衡**:补偿DQS与DQ信号间的飞行时间差 - **校准流程**: 1. 发送训练模式(如0xAA/0x55交替) 2. 接收端扫描延迟设置 3. 锁定最佳采样点(DDR5要求±7ps精度) **3. 光通信系统** - **相干接收**:校正I/Q两路光信号相位 - **关键技术**: - 偏振解复用算法 - 数字预补偿(Pre-Distortion) --- #### **四、设计挑战与解决方案** **1. PVT变异补偿** - **温度漂移**:-40℃~125℃导致延迟变化约15% - 解决方案:集成温度传感器+查找表补偿 - **工艺偏差**:28nm工艺下金属厚度波动引起±8%延迟变化 - 解决方案:片上自校准电路(启动时自动扫描) **2. 多通道同步** - **问题**:在400G以太网等系统中需同步48通道 - **方案**: - 全局参考时钟分布网络 - Daisy-chain级联校准(如QSFP-DD模块) **3. 功耗优化** - **低功耗设计**: - 采用bang-bang型相位检测器(功耗<5mW) - 动态电源缩放(非活动期关闭部分电路) --- #### **五、测量与验证** **1. 测试方法** - **眼图分析**:测量deskew后眼高改善比例 - **时间间隔分析仪**:直接测量正负信号边沿对齐度 - **BERT扫描**:以误码率拐点确定最佳补偿值 **2. 主要指标** | 参数 | 典型值 | 测试条件 | |--------------------|--------------|-----------------------| | 补偿范围 | ±50ps | 25Gbps NRZ信号 | | 建立时间 | <100ns | 温度跃变20℃ | | 残留抖动 | <0.1UI_RMS | PCIe Gen4合规测试 | **3. 自动化测试流程** ```mermaid graph TD A[启动自检模式] --> B{检测初始skew} B -->|>5ps| C[启动粗调模式] B -->|≤5ps| D[进入精调阶段] C --> D D --> E[扫描32个延迟点] E --> F[锁定最低BER点] F --> G[写入EEPROM] ``` --- #### **六、前沿技术发展** **1. 3D IC集成方案** - **TSV延迟匹配**:通过硅通孔深度控制实现<0.5ps差异 - **案例**:HBM2E存储器堆叠中deskew电路集成在逻辑层 **2. 光子辅助deskew** - **光延迟线**:利用光纤延时(1ns≈20cm光纤) - **应用**:数据中心光互连的板间同步 **3. 机器学习优化** - **神经网络预测**:基于历史数据预测最优补偿值 - **强化学习训练**:在真实信道中自主优化参数 --- 如需特定协议(如USB4或OIF CEI-56G)的deskew实施方案,可提供更详细的规范解析。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值