4、鉴相器(PD)设计:乘法器鉴相器、异或门鉴相器、鉴频鉴相器(PFD)的工作原理与特性
鉴相器,说白了就是时钟恢复电路里的“眼睛”。它负责比较输入数据和本地时钟之间的相位差,然后输出一个误差信号。这个信号会告诉后面的环路滤波器:时钟是快了还是慢了,该往哪个方向调。
我个人习惯把鉴相器分成三类来理解:乘法器型、异或门型,还有最常用的鉴频鉴相器(PFD)。每种都有它的脾气,选错了,整个系统可能就锁不住。
4.1 乘法器鉴相器
这是最基础的一种。它把输入信号和本地时钟信号直接相乘,然后低通滤波,得到相位误差。
假设输入信号是 sin(ωt + θ_in),本地时钟是 cos(ωt + θ_out)。相乘后得到:
V_out = sin(ωt + θ_in) * cos(ωt + θ_out)
= 0.5 * [sin(2ωt + θ_in + θ_out) + sin(θ_in - θ_out)]
经过低通滤波,高频分量 sin(2ωt + ...) 被滤掉,只剩下 0.5 * sin(θ_in - θ_out)。当相位差很小时,sin(Δθ) ≈ Δθ,输出就近似正比于相位差。
关键特性:
- 输出是正弦型鉴相特性,线性范围只有 ±π/2
- 对输入信号的幅度敏感——信号弱了,增益就掉
- 需要模拟乘法器,功耗和面积都不小
我的经验:我在一个10Gbps的光模块项目中用过乘法器鉴相器。当时觉得模拟方案精度高,结果发现输入信号抖动一大,鉴相增益就飘。后来我换成了数字方案,稳定多了。说实话,现在高速设计中,纯模拟乘法器鉴相器已经很少见了。
4.2 异或门鉴相器
异或门鉴相器是数字电路里的“老黄牛”。它把输入数据和本地时钟的二进制信号做异或运算。输出信号的占空比,就反映了相位差。
你想想看:如果两个信号完全同相,异或输出一直是0。如果完全反相,输出一直是1。如果相位差90°,输出就是50%占空比的方波。
输入数据: 1 0 1 1 0 0 1 ...
本地时钟: 1 1 0 0 1 0 1 ...
异或输出: 0 1 1 0 1 0 0 ...
这个输出经过低通滤波后,平均电压就正比于相位差。线性范围是0到π,比乘法器宽了一倍。
注意:异或门鉴相器有个致命弱点——它需要输入数据有足够的跳变沿。如果数据连续几个比特都是0或1,没有跳变,鉴相器就“瞎了”。
我曾经在一个低速串行链路中吃过这个亏。数据流里有一段长连“0”,结果时钟直接失锁,恢复出来的数据全是错的。嗯,从那以后,我设计系统时一定会检查数据的“游程长度”是否在鉴相器能容忍的范围内。
4.3 鉴频鉴相器(PFD)
终于说到PFD了。这是目前最主流的方案,没有之一。它不仅能鉴相,还能鉴频——也就是说,即使初始频率差很大,它也能把时钟拉回来。
PFD的核心是一个三态状态机。它有三个状态:UP、DOWN、IDLE。比较输入数据和时钟的上升沿:
- 如果数据上升沿先到,输出UP脉冲,告诉VCO“加速”
- 如果时钟上升沿先到,输出DOWN脉冲,告诉VCO“减速”
- 如果两者同时到,保持IDLE
PFD的鉴相特性:
- 线性范围:-2π 到 +2π(比前两种都宽)
- 频率捕获范围:理论上无限(只要环路带宽够)
- 输出是数字脉冲,可以直接驱动电荷泵
为什么PFD能鉴频?我简单解释一下:如果时钟频率比数据频率低,那么数据上升沿会持续领先时钟上升沿,UP脉冲会越来越宽。这个宽脉冲经过环路滤波后,会持续提高VCO的控制电压,把频率往上拉。反过来也一样。
避坑指南:我曾经设计过一个PFD,死区没处理好。当相位差非常小时(比如几个皮秒),PFD来不及响应,输出脉冲宽度为零。结果环路在锁定点附近来回振荡,相位噪声很差。解决办法是加一个“防死区”电路,强制输出一个最小宽度的脉冲。
4.4 三种鉴相器的对比
我把它们放在一起对比,方便你选型时参考:
| 特性 | 乘法器鉴相器 | 异或门鉴相器 | 鉴频鉴相器(PFD) |
|---|---|---|---|
| 鉴相特性 | 正弦型 | 三角型 | 锯齿型 |
| 线性范围 | ±π/2 | 0 ~ π | -2π ~ +2π |
| 频率捕获 | 不支持 | 不支持 | 支持 |
| 对数据跳变要求 | 低 | 高 | 中 |
| 实现复杂度 | 高(模拟) | 低(数字) | 中(数字) |
| 功耗 | 高 | 低 | 中 |
| 适用场景 | 低速、高精度 | 低速、有编码 | 高速、通用 |
4.5 核心逻辑关系图
下面这张图展示了三种鉴相器在时钟恢复系统中的位置和关系。我特意用SVG画了,方便你理解整个流程。
从图中可以看到,三种鉴相器都接收输入数据和本地时钟,输出误差信号给环路滤波器。区别在于:乘法器和异或门只能鉴相,而PFD还能鉴频。这也是为什么现代高速光通信系统几乎清一色用PFD的原因。
最后提醒一句:选鉴相器不是越高级越好。如果你的系统有8B/10B编码,数据跳变足够多,异或门鉴相器完全够用,而且功耗更低。但如果你的系统需要快速锁定,或者初始频率偏差大,那就老老实实用PFD。
公众号:蓝海资料掘金营,微信deep3321