第三章 鉴频鉴相器(PFD)设计

各位好,欢迎来到PLL设计的第三讲。今天咱们聊聊鉴频鉴相器,也就是PFD。说实话,PFD是整个PLL系统里最容易被低估的模块。很多人觉得它不就是个比较器嘛,有什么好讲的?但我在项目中吃过它的亏,所以今天想好好跟你掰扯掰扯。

3.1 PFD的工作原理

PFD的核心任务就一个:比较参考时钟和反馈时钟的相位差和频率差,然后输出一个误差信号。说白了,它就是个「裁判」,判断谁快了、谁慢了。

典型的PFD结构是三个D触发器加一些逻辑门。我画了个示意图,你看看就明白了:

PFD 基本结构框图 D触发器1 CLK=REF D触发器2 CLK=FB 与门 UP DN 复位路径 REF FB

工作过程其实很简单:

  • 当REF上升沿先到,UP输出高电平
  • 当FB上升沿先到,DN输出高电平
  • 两个上升沿都到了,与门触发复位,UP和DN同时拉低

嗯,这里要注意:PFD不仅能检测相位差,还能检测频率差。这一点比单纯的鉴相器强多了。我记得刚入行时,有个老工程师跟我说:「PFD是PLL的耳朵和眼睛」,现在想想,这话一点不假。

3.2 死区问题与消除

死区,这玩意儿坑过不少人。什么是死区?就是当REF和FB的相位差非常小的时候,PFD输出脉冲太窄,窄到后面的电荷泵来不及响应。结果就是——PFD「看不见」这个小相位差,环路失去了调节能力。

⚠️ 死区的危害:
  • PLL锁定后相位噪声恶化
  • 锁定精度下降,可能出现周期性抖动
  • 严重时环路无法锁定

为什么会这样?你想想看,PFD输出的UP/DN脉冲宽度等于REF和FB的相位差。如果相位差只有几皮秒,脉冲宽度也就几皮秒。电荷泵里的开关管开启需要时间,这么窄的脉冲根本打不开开关管。

我在一个2.4GHz的PLL项目中就遇到过这个问题。当时仿真看着好好的,流片回来测相位噪声,发现有个奇怪的凸起。查了三天,最后发现是死区导致的。那叫一个郁闷啊。

消除死区的方法

最经典的做法就是——在复位路径上加延迟。让UP和DN脉冲都变宽一点,即使相位差为零,也保持一个最小脉冲宽度。这样电荷泵每次都能被充分开启。

🔧 死区消除的关键设计:

在PFD的复位路径上插入延迟单元,通常用偶数个反相器串联实现。延迟时间一般取电荷泵开启时间的2-3倍。

代码实现大概是这样的:

// 带死区消除的PFD Verilog描述
module pfd_with_deadzone_elimination (
    input  wire ref_clk,
    input  wire fb_clk,
    input  wire rst_n,
    output reg  up,
    output reg  dn
);
    reg ref_dly, fb_dly;
    wire reset;
    
    // 复位路径加延迟
    assign #(DELAY_TIME) reset = ref_dly & fb_dly;
    
    always @(posedge ref_clk or negedge rst_n) begin
        if (!rst_n) ref_dly <= 1'b0;
        else if (reset) ref_dly <= 1'b0;
        else ref_dly <= 1'b1;
    end
    
    always @(posedge fb_clk or negedge rst_n) begin
        if (!rst_n) fb_dly <= 1'b0;
        else if (reset) fb_dly <= 1'b0;
        else fb_dly <= 1'b1;
    end
    
    always @(*) begin
        up = ref_dly & !reset;
        dn = fb_dly & !reset;
    end
endmodule
💡 个人经验:

延迟时间不是越大越好。我见过有人为了保险,把延迟设得特别大,结果PFD的增益降低了,环路带宽也跟着变窄。一般取200ps到500ps比较合适,具体要看你的工艺和电荷泵设计。

3.3 PFD的线性模型

搞清楚了工作原理,咱们得把它抽象成数学模型,这样才能做系统级的分析。PFD的线性模型其实很简单,就一个增益因子:

KPFD = ICP / (2π)

其中ICP是电荷泵的充放电电流。这个公式怎么来的?我简单推导一下:

  • PFD的输出是UP/DN脉冲,脉冲宽度正比于相位差Δφ
  • 电荷泵把脉冲宽度转换成电流脉冲,平均电流 = ICP × (Δφ / 2π)
  • 所以增益就是 ICP / (2π),单位是A/rad

说白了,PFD加电荷泵就是一个线性放大器,把相位差放大成电流信号。这个模型在PLL锁定状态下非常准确,因为相位差很小,PFD工作在线性区。

参数 符号 典型值 说明
PFD增益 KPFD 80 μA/rad ICP=500μA时
检测范围 Δφmax ±2π 超过则进入非线性区
死区宽度 Δφdead < 0.1 rad 消除后应远小于此值
工作频率 fmax 取决于工艺 通常可达数百MHz

不过要注意,这个线性模型只在锁定状态下成立。在锁定过程中,尤其是频率捕获阶段,PFD实际上工作在非线性模式。那时候再用这个模型就不准了。我一般做系统仿真时,会先用线性模型算环路参数,再用行为级模型做瞬态验证,两边对照着看。

📐 设计要点总结:
  1. PFD的增益由电荷泵电流决定,设计时先定ICP
  2. 死区消除的延迟时间要跟电荷泵匹配
  3. 线性模型适用于锁定状态分析,捕获过程要用非线性模型
  4. PFD的工作频率上限受限于复位路径的延迟

好了,关于PFD的核心内容就这些。我个人觉得,PFD设计的关键不在于电路有多复杂,而在于你理解它「为什么」会这样工作。死区问题、线性模型,这些都是实际项目中绕不开的坎。希望今天的内容对你有帮助。

可可精品资料库