3、相位检测器类型:线性与二进制
好,我们接着说相位检测器。这东西说白了就是CDR的“眼睛”——它负责判断数据比时钟是早了还是晚了。
我个人习惯把相位检测器分成两大类:线性和二进制。它们各有各的脾气,选对了事半功倍,选错了……嗯,你调死你。
3.1 线性相位检测器
线性检测器的输出,和相位误差的大小成正比。你想想看,误差越大,输出电压(或电流)就越大;误差为零,输出也为零。
3.1.1 Hogge 检测器
这是经典的线性检测器之一。我第一次看到它是在90年代的里,结构很巧妙。
- 算法原理:它用了两个触发器(D-FF)和一个异或门(XOR)。数据进入第一级FF,被时钟沿采样;然后在下一个时钟沿,被第二级FF重新采样。两个采样点的数据,再和原数据做异或。说白了,就是在测量“数据变化沿”和“时钟采样沿”之间的时间差。
- 线性范围:通常是一个UI(单位间隔)。超过这个范围,输出就饱和了。
- 优点:相位信息是连续的,抖动容忍度曲线在高频段表现不错。
- 缺点:结构稍微复杂一点,死锁风险也有。
在某个10Gbps项目中,我用了Hogge结构。结果锁定时间长达20微秒——太夸张了。后来发现,初始相位差如果恰好落在检测器的“盲区”(大约在0.5UI附近),输出增益会急剧下降,等效于开环。你想想,CDR一直在那“瞎找”,能快才怪。
3.1.2 Alexander 检测器
另一个常见线性结构。它用三个FF和一个选择器(MUX)来实现。
它的思想是:用三个时钟沿(上升、下降、上升)去捕获同一个数据窗口,然后比较两次采样的结果,来判断数据是在时钟之前还是之后。
| 对比项 | Hogge | Alexander |
|---|---|---|
| 复杂度 | 较低 | 稍高 |
| 线性范围 | 约1 UI | 约0.5 UI |
| 死锁风险 | 有盲区 | 无盲区(理论上) |
| 常用场景 | 中速SerDes | 高速/低抖动需求 |
我个人更喜欢Alexander,因为它没有Hogge那种“死锁”隐患。但它的线性范围窄,对环路增益设计要求更高。
3.2 二进制相位检测器
二进制检测器,也叫Bang-Bang检测器。它只输出三种状态:超前、滞后、锁定。没有“程度”之分。
线性检测器告诉你“偏了多少度”。
Bang-Bang检测器只告诉你“偏了,往左还是往右”。
3.2.1 Bang-Bang 检测器原理
结构极其简单:一个D-FF和一个XOR(或者两个D-FF)。数据进来,时钟沿采样。如果采样后的数据和原数据一致,说明时钟沿落在了数据眼图的中间;如果不一致,说明落在了边缘。
我几乎在所有>25Gbps的SerDes项目中,都用了Bang-Bang。为什么?
- 速度极快:一个时钟周期就能给出判决。
- 实现简单:不需要复杂的模拟乘法器。
- 对PVT不敏感:工艺偏差对它的影响很小。
但它有个让人头疼的问题——极限环抖动。因为它只有“超前/滞后”两种输出,即使相位已经锁定在零点附近,它也会不停地来回切换,产生“抖动”。
我曾经在一个56Gbps PAM4项目中,Bang-Bang检测器的极限环抖动达到了0.3UI。这直接导致了接收端误码率超标。解决办法是:给环路增加一个“死区”——在相位误差小于某个阈值时,强行输出“锁定”状态。这样能有效抑制高频抖动。
3.3 选型建议
怎么选?我总结了一个简单的规则:
- 低速 (< 10Gbps):Hogge 或 Alexander 都行。线性结构对环路设计更友好。
- 中速 (10-28Gbps):Alexander 或 Bang-Bang。如果不是特别在意功耗,Alexander 更优。
- 高速 (> 28Gbps):必选 Bang-Bang。因为线性结构的FF速度跟不上。
但记住:Bang-Bang检测器的环路增益不是你随意设置的。它等同于一个“饱和增益”,一旦进入锁定区域,增益就是无穷大。所以你的环路滤波器必须有足够的阻尼,否则系统会振荡。
3.4 知识结构图
下面这张图我画了很久,它能帮你快速理解核心逻辑:
3.5 总结
选哪种检测器,其实是个权衡:线性结构给你平滑的控制,但速度受限;二进制结构给你极致速度,但抖动更大。
我建议新手从Bang-Bang入手,因为它实现简单、调试直观。等遇到瓶颈了,再回头研究Hogge或Alexander的线性优化。
嗯,这一章就到这里。记住那个SVG图的结构,它就是你选型的指南针。