FPGA SERDES 通用基础(十二)RX CDR:鉴相与恢复时钟

发布时间:2026/8/29 4:43:53
FPGA SERDES 通用基础(十二)RX CDR:鉴相与恢复时钟 高速串行链路只传输串行数据不会额外传输一条与每个比特同步的采样时钟。RX 可以由本地参考时钟和 PLL 建立满足线路速率要求的高速时钟但如果发送端与接收端使用各自的时钟源两者之间没有固定的相位关系也可能存在微小的频率偏差。因此本地生成的高速时钟虽然频率满足要求其边沿却不一定落在合适的采样位置不能直接用于可靠的数据判决。RX CDR 的作用是从输入数据的跳变中获得相位信息并通过反馈环路不断调整采样时钟。边沿采样点需要跟随数据跳变真正用于判决 0/1 的数据采样点则应位于相邻跳变之间。经过 CDR 调整后的恢复时钟既用于串行数据判决也为后续串并转换和并行时钟分频提供基础。本文从 RX 数据与采样时钟的关系出发依次说明鉴相、相位插值、连续跟踪以及恢复时钟的分频路径。1. CDR 在 RX 数据通路中的位置RX CDR 位于接收模拟前端之后、SIPO 之前。RXP/RXN 输入经过端接和接收均衡后仍然是随时间连续变化的高速模拟波形CDR 在这一位置恢复并跟踪采样相位采样器完成 0/1 判决后数据再进入串并转换和 RX PCS。RXP/RXN → RX 模拟前端与均衡 → RX CDR → SIPO → RX PCS → FPGA RX Interface │ └→ Recovered Clock这一位置决定了 CDR 同时连接两条路径。数据路径把串行波形判决为 0/1并送往 SIPO时钟路径则产生与输入数据边沿保持确定相位关系的 Recovered Clock恢复时钟作为 RX PMA 串并转换和后续并行分频的时钟基础。CPLL/QPLL 与 CDR 的分工也需要在这里区分。CPLL/QPLL 根据参考时钟和分频配置建立目标线路速率所需的高速基础时钟解决“频率范围是否正确”CDR 观察实际输入数据的边沿位置并调节采样相位解决“在一个 UI 内何时采样”。因此CPLL/QPLL 锁定只能说明基础时钟已经建立不能直接证明接收数据已经被正确采样。2. Bang-Bang 鉴相与 CDR 闭环RX CDR 使用Bang-Bang Phase DetectorBBPD判断边沿采样位置相对数据跳变是偏早还是偏晚。Bang-Bang 源于控制理论中的二值控制鉴相器只输出 Early 或 Late 两种方向信息不给出连续的相位误差大小。这里的 Early/Late 表示采样相位偏早或偏晚下文将这种判决方式简称为 Bang-Bang 鉴相。当边沿采样点早于数据跳变时鉴相器输出 EarlyCDR FSM 控制 Phase Interpolator 将采样相位向较晚方向移动采样点晚于数据跳变时则输出 Late并向较早方向调整。数据没有发生跳变时当前样本不能提供新的相位方向信息。采样相位接近数据边沿后Early 和 Late 通常会交替出现相位插值器围绕目标位置进行小范围双向修正。图中数据由左向右传输。RXP/RXN 经过 Linear EQ 和 DFE 后同时进入 Edge Sampler也称 Crossing Sampler与 Data SamplerCPLL/QPLL 的输出从图下方进入 Phase Interpolator为两组采样器提供可调相位。采样结果经 DEMUX 送入 CDR FSM状态机再控制 PI(X) 和 PI(D)形成闭环相位跟踪。UG476 将该结构称为 Phase-Rotator CDR。Bang-Bang 描述鉴相逻辑只判断调整方向Phase-Rotator 描述相位插值器根据判决结果移动采样相位两者分别对应闭环中的判定与执行。PLL提供满足线路速率要求的基础时钟。它决定 CDR 从哪个频率附近开始工作但不会自动把采样边沿放到输入数据的正确位置。PI(X) 与 PI(D)是两组相位插值路径。Phase Interpolator 在 PLL 输出相位的基础上进行插值使采样相位可以按较小步进向前或向后移动。PI(X) 驱动边沿采样路径PI(D) 驱动数据采样路径两者由同一个 CDR FSM 协调并保持对应的相位间隔。Edge SamplerCrossing Sampler观察数据跳变附近的电平用于判断当前采样相位相对实际数据边沿偏向哪一侧。它提供的是相位调整依据不直接作为最终接收数据输出。Data Sampler位于相邻边沿之间完成实际的 0/1 判决。其输出一方面送往 RX DATA另一方面也参与 CDR FSM 的相位判断。状态机需要结合边沿采样与数据采样结果才能判断当前数据是否发生跳变以及相位应向哪个方向调整。CDR FSM根据连续的 Data/Edge 样本形成 Bang-Bang 鉴相结果并控制相位插值器逐步修正采样位置。某一次判断只给出调整方向不给出相位误差大小完整的相位跟踪建立在后续数据不断提供的新判决之上。图中的 DEMUX 表明高速采样结果会先转换为较低速率的并行样本再进入数字 CDR 状态机。后文使用 D0、E1、D1 三个点说明一次 Bang-Bang 鉴相是为了便于理解基本关系在 GTX/GTH 硬核内部状态机会对多组 Data/Edge 样本进行并行处理。具体并行度、判决处理方式和步进门限属于内部配置UG476 不展开这些实现细节。沿控制方向观察闭环关系可以概括为输入数据边沿 → Data/Edge Sampler → Bang-Bang 鉴相 → CDR FSM ↑ │ └──────── Phase Interpolator 调整后的采样相位 ───────┘CDR 的输出不是一个与数据无关的自由运行时钟而是经过上述闭环校正、与输入数据保持相位关系的采样时钟。3. 根据数据跳变理解 Bang-Bang 鉴相图中的 E0、E1、E2 表示 Edge Sampler 的采样位置位于相邻 UI 的交界处D0、D1 表示 Data Sampler 的采样位置位于两个边沿采样点之间。UIUnit Interval是一个串行比特占用的时间数值等于线路速率的倒数。以 10 Gb/s 线路速率为例TUI110 Gb/s100 ps T_{UI}\frac{1}{10\ \mathrm{Gb/s}}100\ \mathrm{ps}TUI​10Gb/s1​100ps理想情况下数据采样点位于相邻边沿之间距离前后边沿各约半个 UI也就是约 50 ps。这里的半个 UI 表示两类采样位置的目标关系并不是要求输入波形每次都在完全相同的时刻跳变。Bang-Bang 鉴相可以沿 D0、E1、D1 三个采样点理解。D0 和 D1 是相邻的数据样本E1 是位于两者之间的边沿样本三者按照 Data、Edge、Data 的顺序每隔半个 UI 采样一次形成相对于线路比特率的二倍过采样。D0 与 D1 用于确认相邻 UI 之间是否出现数据跳变E1 则用于判断边沿采样点落在真实跳变之前还是之后。下图上半部分按照 E0、D0、E1、D1、E2 的顺序标出二倍过采样位置E0/E1/E2 对应数据轨迹的交叉点D0/D1 位于相邻交叉点之间、眼开度最大的中心。下半部分再使用 D0、E1、D1 展开四种有效跳变组合对于 001 和 110E1 仍然保持 D0 的跳变前电平说明真实跳变发生在 E1 与 D1 之间。此时边沿采样点位于真实跳变之前判决为 Clock EarlyPI 需要把采样相位向较晚方向移动。对于 011 和 100E1 已经变为 D1 的跳变后电平说明真实跳变发生在 D0 与 E1 之间。此时边沿采样点位于真实跳变之后判决为 Clock LatePI 需要把采样相位向较早方向移动。上升沿与下降沿的电平极性不同但判断依据相同E1 与 D0 相同表示偏早E1 与 D1 相同表示偏晚。手绘图用于观察四种有效跳变的波形关系完整的八种采样组合可由下表查阅D0E1D1数据与采样关系鉴相结果PI 调整方向000保持低电平无数据跳变无新的相位信息不调整001上升沿E1 仍为跳变前电平边沿采样相位偏早Early向较晚方向调整010D0、D1 相同而 E1 相反无可靠鉴相结论不作为有效方向011上升沿E1 已为跳变后电平边沿采样相位偏晚Late向较早方向调整100下降沿E1 已为跳变后电平边沿采样相位偏晚Late向较早方向调整101D0、D1 相同而 E1 相反无可靠鉴相结论不作为有效方向110下降沿E1 仍为跳变前电平边沿采样相位偏早Early向较晚方向调整111保持高电平无数据跳变无新的相位信息不调整000 和 111 表示相邻数据样本之间没有跳变无法提供新的相位信息。010 和 101 则不能用相邻数据采样之间的一次正常跳变解释因此不能形成可靠的偏早或偏晚结论。这里的不可靠只针对当前三点组合的鉴相方向并不表示 FPGA 业务数据或整条链路已经失效CDR 会继续结合后续 Data/Edge 样本进行判断。图中的“较早”和“较晚”描述边沿采样点相对真实数据跳变的位置控制目标是使 Edge Sampler 靠近数据交叉点。它表示物理采样相位的调整方向不等同于 PI 控制码固定地增加或减小。Bang-Bang 鉴相的单次结果只包含调整方向不包含连续的相位误差值。若某一方向的判决持续占优CDR FSM 就控制 PI 沿对应方向移动当 E1 接近真实数据交叉点后Early 与 Late 判决通常会交替出现PI 围绕数据边沿进行小范围修正。PI(X) 与 PI(D) 同步调整使 Edge Sampler 持续跟随数据跳变同时让 Data Sampler 保持在相邻边沿之间。4. 从初始相位捕获到连续跟踪RX 通路启动时CDR 需要先获得可用的基础时钟和输入数据。CPLL/QPLL 锁定后高速时钟频率已经进入目标范围但其相位与远端发送数据之间没有固定关系。CDR 从当前相位开始观察数据跳变根据连续出现的偏早或偏晚判决驱动 PI 向占优方向步进直至 Edge Sampler 到达 UI 边界附近、Data Sampler 落在相邻边沿之间这一过程构成初始相位捕获。进入稳定跟踪后相位插值器仍会继续调整。即使本地参考时钟的标称频率与发送端一致两端独立时钟源也可能存在一定频率偏差。若接收数据略快于本地基础时钟数据边沿会相对当前采样相位持续向一个方向移动Bang-Bang 鉴相结果也会长期偏向同一方向CDR FSM 因而反复驱动 Phase Interpolator 沿对应方向旋转相位。数据略慢时判决偏向和调整方向相反。因此CDR 对频率偏差的跟踪最终表现为连续的相位移动无频差采样相位围绕稳定位置小范围调整 数据偏快Phase Interpolator 持续向一个方向推进 数据偏慢Phase Interpolator 持续向相反方向推进相位插值器完成一个相位周期后可以继续循环旋转CDR 由此在本地 PLL 频率附近跟随输入数据。它能够跟踪的频率偏差范围并非无限具体边界应由对应器件数据手册中的 RXPPMTOL 等指标确认。相位判断还依赖输入数据发生跳变。连续相同比特期间没有新的边沿可供比较CDR 只能维持此前建立的控制状态等待下一次有效跳变继续修正。合适的编码或扰码通常能够提高跳变密度不只是为了改善频谱也为时钟恢复提供持续的相位观测。链路能够容忍的最大连续相同比特长度还需要结合器件数据手册和所用编码方式判断。5. 恢复时钟与 RX 分频路径这张图以 GTXE2_CHANNEL 为例把参考时钟、PLL、CDR、SIPO 和 RXOUTCLK 连接到同一条时钟路径中。阅读时可以从左下方的参考时钟开始沿 PLL 和 CDR 向上进入 RX PMA再沿分频链向右观察并行时钟。MGTREFCLK 经 IBUFDS_GTE2 和 REFCLK Distribution 进入参考时钟选择网络随后送往 Channel 内部的 CPLL或者通过 GTXE2_COMMON 进入 QPLL。RXSYSCLKSEL 在 CPLL 与 QPLL 的高速时钟之间选择一路送入 CDR 中的 Phase Interpolator。CDR 调整后的高速采样时钟直接驱动串行数据判决和 SIPO。完成串并转换后该时钟依次经过 /D、/4 或 /5、/2 或 /4 等内部级联分频与 RX PMA 的并行数据宽度和工作模式匹配。分频链输出构成 PMA 并行侧的 XCLK并继续连接 RX PCS 数据通路。图中需要区分三类相关但位置不同的时钟时钟所在位置主要作用RX Serial ClockCDR 与 SIPO 的高速串行侧对输入串行数据进行采样和串并转换XCLKRX PMA 并行侧承接 SIPO 之后的并行数据并连接 RX PCSRXOUTCLKGTXE2_CHANNEL 输出时钟端口将选定的 PMA、PCS 或参考时钟路径送往 FPGA 时钟资源RXOUTCLKSEL 决定 RXOUTCLK 的来源。选择 RXOUTCLKPMA 时输出来自 CDR 恢复时钟的 PMA 分频路径选择 RXOUTCLKPCS 时输出来自 PCS 并行时钟路径另外还可以选择所用 PLL 参考时钟的直通或二分频路径。RXOUTCLK 因此只是一个可配置的输出端口不能脱离 RXOUTCLKSEL 直接称为“恢复时钟”。RX Elastic Buffer 旁路时RXOUTCLKSEL 应选择 RXOUTCLKPMA使 RXOUTCLK 输出恢复时钟再由 RXOUTCLK 驱动 RXUSRCLK。启用 RX Elastic Buffer 后恢复侧 XCLK 与本地 RXUSRCLK 可以通过缓冲器隔离RXUSRCLK 的来源具有更大的选择空间。缓冲器只改变并行时钟域的衔接方式不改变 CDR 在 SIPO 之前完成串行采样的职责。6. RX CDR 实战配置以 GTX 5.0 Gb/s、8B/10B 为例RXCDR_CFG 是 GTXE2_CHANNEL 中宽度为 72 bit 的配置属性用于设置 CDR 内部控制环路。该属性不需要根据内部位域逐项推导UG476 已经按照接收数据类型、SSC、线路速率、RXOUT_DIV、参考时钟频偏和均衡模式给出了推荐取值。本节直接通过一个 GTX 配置完成一次查表过程。数据类型与 SSC → 线路速率 → RXOUT_DIV → REFCLK PPM → LPM/DFE → RXCDR_CFG以一条5.0 Gb/s 的 GTX 接收通道为例配置条件如下配置项本例取值收发器类型GTX线路速率5.0 Gb/s参考时钟125 MHz精度 ±100 ppm不使用 SSCPLLCPLLRXOUT_DIV1线路编码8B/10BRX 均衡模式LPM具体选择可以分为三步确定数据类型。本例使用 8B/10B 编码且不使用 SSC因此选择 UG476 Table 4-19Table 4-17 对应的是 Scrambled/PRBS Data 且不使用 SSC 的情况。确定速率与分频。5.0 Gb/s 属于表中的 Data Rate ≤ 6.6G当前 RXOUT_DIV 1因此进入对应的速率和分频行。确定参考时钟频偏。参考时钟精度为 ±100 ppm落在表中的 ±200 ppm 档位。Table 4-19 的读取方向是从左向右逐列收敛配置条件。该表对 CPLL/QPLL 以及 LPM/DFE 使用同一组取值继续定位 Data Rate ≤ 6.6G、RXOUT_DIV 1 和 REFCLK PPM ±200 对应的行即可得到 RXCDR_CFG 72’h03_0000_23FF_1040_0020。将查表结果写入 GTXE2_CHANNELGTXE2_CHANNEL #( .RXOUT_DIV (1), .RXCDR_CFG (72h03_0000_23FF_1040_0020) ) u_gtxe2_channel ( // 其余端口与属性按工程配置连接 );这里选择 CPLL 是为了给出完整的工程条件Table 4-19 对 CPLL 和 QPLL 使用同一组推荐值。表下注释同时指出8B/10B 编码数据推荐使用 LPM。若工程采用特定协议配置仍应以 Transceivers Wizard 或相应的协议特性报告生成值为准。如果同一条 5.0 Gb/s 链路传输的是 Scrambled/PRBS Data则应改查 Table 4-17查表条件仍然是 Data Rate ≤ 6.6G、RXOUT_DIV 1 和 REFCLK PPM ±200但 Table 4-17 还需要区分 LPM 与 DFE。沿 LPM 行读取RXCDR_CFG 为 72’h03_0000_23FF_1020_0020沿 DFE 行读取则为 72’h03_0000_23FF_2040_0020。与前面的 8B/10B 配置相比线路速率和时钟条件都没有变化仅数据类型和均衡模式不同最终配置值已经发生改变。实际工程可以沿“数据类型与 SSC → 线路速率 → RXOUT_DIV → REFCLK PPM → LPM/DFE”的顺序在 UG476 对应表格中得到推荐值再与 Transceivers Wizard 生成的 RXCDR_CFG 交叉核对。Table 4-17 和 Table 4-19 均为 GTX 配置不能直接用于 GTHGTH 的 RXCDR_CFG 为 83 bit应在 UG476 中查取与数据类型和 SSC 条件对应的 GTH CDR 推荐配置。任一配置条件发生变化后都需要重新查表。遇到疑似 CDR 问题时除了检查参考时钟、输入波形和 CPLLLOCK/QPLLLOCK还应回查 RXCDR_CFG 的选择条件当前线路数据究竟是 Scrambled/PRBS、8B/10B 还是带 SSC 的协议数据实际线路速率与 RXOUT_DIV 是否落在同一行参考时钟频偏档位和 LPM/DFE 模式是否匹配工程中的属性值是否与 UG476 或 Wizard 生成结果一致。若这些条件中有一项不匹配即使 CPLLLOCK/QPLLLOCK 和 RXRESETDONE 已经拉高CDR 仍可能无法稳定跟踪输入数据。修改 RXCDR_CFG 等 RX PMA 属性后还应按照器件规定重新执行 RX 复位流程。最终接收状态需要结合 PRBS、8B/10B 错误指示或协议训练结果确认不能只用 RXRESETDONE 判断 CDR 已经稳定。7. 总结在 7 系列 GTX/GTH 中RX CDR 以 CPLL/QPLL 输出为高速时钟基础通过 Data Sampler 与 Edge Sampler 完成 Bang-Bang 鉴相再由 CDR FSM 控制 PI(D) 和 PI(X) 调整采样相位。Bang-Bang 鉴相只给出偏早或偏晚方向连续判决使 Edge Sampler 跟随 UI 边界并让 Data Sampler 保持在相邻边沿之间。恢复后的高速时钟继续驱动 SIPO并经 RX PMA 分频形成 XCLKRXOUTCLK 则可根据 RXOUTCLKSEL 输出恢复时钟或其他候选时钟。工程配置 RX CDR 时需要把收发器类型、数据类型、SSC、线路速率、RXOUT_DIV、参考时钟频偏和均衡模式作为一组条件选择 RXCDR_CFG。配置完成后再分别检查 CPLLLOCK/QPLLLOCK、RXRESETDONE 与接收数据状态才能区分基础时钟、硬核复位、CDR 相位跟踪和后级数据处理中的问题。

相关新闻