56G PAM4 SerDes RX MMCDR Mueller–Müller 误差检测与数据对齐设计

1. 工作速率与链路位置

50G PAM4 模式下数据速率 53.125 Gb/s,符号率 26.5625 GBd,1 UI = 37.647 ps。

MMCDR 是基于 ADC 采样的波特率时钟恢复(baud-rate CDR)。它每个符号只用一个数据采样点,通过相邻 ADC 采样值和 PAM4 判决值来估计采样时钟偏早还是偏晚。它不使用 CDR CTLE 后面的四路 edge/data sampler,也不复用 BBCDR 的 XOR early/late 事件。

数据流如下:

text 复制代码
VGA2 -> ADC -> offset-binary 转 signed + channel offset / bit mask
                 |                         |
                 |                         +-> 16-tap FFE -> DFE / FFE hard decision
                 |
                 +-> latency-matched ADC samples
                         -> cursor alignment + block history
                         -> 16 路 Mueller--Müller cross-product
                         -> sign vote
                         -> MM-PI / MM-DCO 数字环路

一个 adc_clk 周期包含 32 个 7-bit signed ADC sample,MM detector 每周期形成 16 个相邻样点误差并做一次方向投票。投票结果送入 12-bit PI 环路与 18-bit DCO 环路,分别调节采样相位与振荡频率。

2. DFE mode 与 FFE mode

MMCDR 有两种判决来源,默认 mmcdr_mode_dfe0_ffe1=0:

模式 采样值 PAM4 判决 说明
0,DFE mode adc_data_dadj,32 路 7-bit signed data_dfe,32 路 2-bit 使用 1-postcursor speculative DFE 的最终判决
1,FFE mode adc_data_ffe_dadj,32 路 7-bit signed data_ffe,16 路 2-bit 使用 FFE 输出直接经过三门限量化的判决

两种模式都用 ADC 采样值做乘法,只是配对的判决来源和流水线延迟不同。FFE mode 不是把 11-bit FFE 输出直接送进乘法器;FFE 输出只用来产生 16 个 hard decision。

寄存器说明要求:选 FFE mode 时,应关闭 DFE tap1,并让 FFE tap1 承担相应的第一后游标补偿。否则判决路径和送入 MM detector 的 ADC 脉冲响应对不上,误差零点可能被残余 ISI 移动。

PAM4 判决在 MM 模块内部转换成 signed level:

text 复制代码
00 -> -3
01 -> -1
10 -> +1
11 -> +3

所以 MM detector 实际用的是判决电平 ±1、±3,不是 Gray bit 分别参与相关运算。precode / Gray decode 在 DFE 输出之后,不进入定时误差计算。

3. Mueller--Müller 定时误差

这里不展开教科书上的统计推导,直接看 RTL 实际计算:

text 复制代码
e[k] = adc[k]   * decision[k+1]
     - adc[k+1] * decision[k]       k = 0...15

这个式子和常见的 MM 相位检测公式只差索引选择和整体符号。不要脱离 mmcdr_pi_polarity_inv、DCO 极性连接以及 PI/DCO 对 code 的实际响应,单独把 e[k] > 0 固定解释成"clock early"或"clock late"。闭环只要最终控制方向构成负反馈就行。

4. ADC 流水线与 cursor 对齐

ADC 原始 7-bit offset-binary code 先减去 64,再减每通道 6-bit offset code;adc_bit_mask 可以清零若干低位。结果超出范围时饱和到 +63 或 −64,然后进入数字流水线。

为了匹配不同判决路径,ADC 数据通路提供两组延迟:

  • FFE mode 用 adc_data_d3r,即 adc_data_ffe_dadj;
  • DFE mode 用 adc_data_d6r,即 adc_data_dadj。

cursor_sel[5:0] 在 symbol 维度调整 ADC 与 decision 的相对位置:

cursor_sel ADC 相对判决延迟 对应 FFE 游标配置
100000 0 UI 0 个 precursor
010000 1 UI 1 个 precursor
001000 2 UI 2 个 precursor
000100 3 UI 3 个 precursor
000010 4 UI 4 个 precursor
000001 / default 5 UI 默认 C10 游标,5 个 precursor

cursor_sel 只改变 MMCDR、CTLE 训练等逻辑看到的数据对齐位置,不会自动移动 16-tap FIR 的主系数。改它的时候必须同时把 FFE cursor hint 和训练 mask 移到对应 tap。

5. 跨 block 历史与 16 路 vote

为了让 32-symbol block 边界处保持连续,MM 模块保存上一 block 最后的 6 个 ADC sample,以及最后一个 2-bit decision。当前数据与历史拼成 33 点对齐窗口,再取其中连续 17 点生成 16 个相邻 cross-product。

每路完整乘积差先压缩成三值方向:

text 复制代码
e[k] < 0  -> -1
e[k] = 0  ->  0
e[k] > 0  -> +1

然后做一次并行投票:

vote=∑k=015sign⁡(ek),vote∈−16,+16 vote=\sum_{k=0}^{15}\operatorname{sign}(ek),\qquad vote\in-16,+16 vote=k=0∑15sign(ek),vote∈−16,+16

RTL 最终只寄存 vote 的符号位并送给 PI、DCO 两个环路,绝对值被丢弃。所以 +1 和 +16 对下一次数字更新给出同一个方向;环路增益由后级 gain code 和 accumulator 决定,不由 vote 幅度决定。

平票也没有独立 dead zone。vote=0 的符号位为 0,会进入"非负"分支并产生一个确定方向的更新;只有关闭相应环路或把 gain 设为 0 才会真正 hold。验证时不能假设正负票数相等就自动停止 PI/DCO。

相关推荐
倔强的石头1061 小时前
DeepSeek系列_国产大模型的技术创新解析
人工智能·大模型
企业数字化笔记1 小时前
AI工具的文件和参数怎么设计?上传校验、配置版本与可复现任务
前端·人工智能
seconp1 小时前
AI 时代怎么做计算机毕业设计?
人工智能·毕业设计·软件工程·课程设计·毕设
loulanyue_1 小时前
智能成为“商品”之后:读吴泳铭 2026 云栖演讲的六个取舍
人工智能
鬼手点金1 小时前
opencode-性能优化建议
java·人工智能·git·自动化·nanogpt
在所不辞兄1 小时前
分层PINN提升多物理场耦合效率
人工智能·深度学习·神经网络·机器学习·工程仿真
AI技术新视界1 小时前
微软确认 GPT‑6 使用 Looped Transformers
人工智能·llm
智圣新创011 小时前
智圣新创智慧学生社区线上服务平台 高校一站式育人场景数字化升级全域建设指南
大数据·人工智能