Felix

技术源于积累,成功始于执着!

简述DLL与PLL的区别

0
阅读(679) 评论(3)

在学习Lattice ECP3系列FPGA时,发现芯片内部集成了两个DLL和10个PLL。PLL一般可以用来分频,倍频、相位调整,而DLL也可以做到这些基本功能,那么他们之间到底有什么区别呢?下面来做一个简要的分析与总结。


DLL-Delay locked loop用在数字电路中,用来自动调节一路信号的延时,使两路信号的相位一致(边沿对齐), 在需要某些数字信号(比如data bus上的信号)与系统时钟同步的情况下, DLL将两路clock的边沿对齐(实际上是使被调节的clock滞后系统clock 整数个周期),用被调节的clock做控制信号,就可以产生与系统时钟严格同步的信号(比如输出数据data跟输入clock同步,边沿的延时不受到电压、温度、频率影响)。


PLL--Phase locked loop除了用作相位跟踪(输出跟输入同频同相,这种情况下跟DLL有点相似)外,可以用来做频率综合(frequency synthesizer),输出频率稳定度跟高精度低漂移参考信号(比如温补晶振)几乎相当的高频信号,这时,它是一个频率源。利用PLL,可以方便地产生不同频率的高质量信号,PLL输出的信号抖动(频域上表现为相噪)跟它的环路带宽,鉴相频率大小有关。总的说来,PLL的环路带宽越小,鉴相频率越高,它的相位噪声越小(时域上抖动也越小)。
由于在实际ADC系统中,采样系统总的动态特性主要取决于采样时钟的抖动特性,如果对频率要求不是太高,VCXO是比较好的选择。如果确实需要可变频率低抖动时钟,则基于PLL的时钟发生器是最好选择。


从应用上看
     DLL即Delay Lock Loop, 主要是用于产生一个精准的时间延迟, 且这个delay不随外界条件如温度,电压的变化而改变.这个delay是对输入信号的周期做精确的等分出来的, 比如一个输入信号周期为20ns, 可以设计出等分10份的delay, 即最小2ns的delay. 这在高速界面做clock recovery and data recovery上很有用处。 由于普通的delay cell在不同的corner其delay会发生很大的变化(FF与SS相差几乎3倍), 有时候会被迫采用DLL来产生一个精准的delay而不是用普通的delay cell.

    而PLL即Phase lock loop, 主要是根据一个输入时钟产生出一个与输入时钟信号in phase的倍/除频时钟, 其中倍频时钟和输入、输出时钟in phase是最主要的应用。

从内部结构上来看
     DLL只有一个大的反馈环来调节最后1T后的信号与输入信号in phase来保证delay 出来的结果是对输入信号周期的均分,如示意图; 输出信号只是对输入信号的一个delay, 即为同频且有一个固定的phase差,同时由于输出信号与输入直接关联,输入信号的jitter,frequency 漂移会直接反映在输出信号上。在实现上,可以是模拟电路也可以是数字电路实现,但绝大多数应该是模拟电路实现比较好,因为需要调节电压来补偿环境变化带来的delay 变化。

     PLL除了有一个大的反馈环来让PLL振出的clock与reference clock in phase,内部还有一个小的ring oscillatorl来振出想要的clock,如示意图。由于输出clock是由一个单独的ring oscillator振出来的,所以与reference clock的jitter,frequency漂移几乎完全无关。但由于是内部自己起振,所以比DLL要复杂。这个以前也有提过数字PLL, 但做出来的数字PLL振出来的clock很差,就几乎没有提数字PLL, 而是采用模拟电路来做。


ECP3系列FPGA中的DLL与PLL之间的主要区别

首先上两张图,图1是ECP3中的PLL结构图,图2时ECP3中的DLL结构图。

image.png

图1 ECP3中的PLL结构图

image.png

图2 ECP3中的DLL结构图

可以清晰地看到,PLL更加侧重分频,倍频与占空比调整等功能,而DLL更加侧重相位调整与时钟对齐等功能。虽然DLL也有分频的功能,但是从图表中可以看出,2分频或4分频在实际的应用中似乎并没有什么卵用(但在DDR控制中却非常有用)。而PLL则不同,其可以轻松完成N分频(N大于100)甚至是倍频的功能,此外PLL的时钟输出路数也更多。

  1. DLL:延时锁定回路. DDR SDRAM 对时钟的精确性有着很高的要求,而DDR SDRAM有两个时钟,一个是外部的总线时钟,一个是 内部的工作时钟,在理论上DDR SDRAM这两个时钟应该是同步的,但由于种种原因,如温度、 电压波动而产生延迟使两者很难同步,更何况时钟频率本身也有不稳定的情况(SDRAM也内部 时钟,不过因为它的工作/传输频率较低,所以内外同步问题并不突出)。 DDR SDRAM的tAC就是 因为内部时钟与外部时钟有偏差而引起的,它很可能造成因数据不同步而产生错误的恶果。实际 上,不同步就是一种正/负延迟,如果延迟不可避免,那么若是设定一个延迟值,如一个时钟周 期,那么内外时钟的上升与下降沿还是同步的。鉴于外部时钟周期也不会绝对统一,所以需要根 据外部时钟动态修正内部时钟的延迟来实现与外部时钟的同步,这就是DLL的任务。 DLL不同于 主板上的PLL,它不涉及频率与电压转换,而是生成一个延迟量给内部时钟。目前DLL有两种实现 方法,一个是时钟频率测量法(CFM, Clock Frequency Measurement),一个是时钟比较法(CC, Clock Comparator)。 CFM是测量外部时钟的频率周期,然后以此周期为延迟值控制内部时钟, 这样内外时钟正好就相差了一个时钟周期,从而实现同步。 DLL就这样反复测量反复控制延迟值, 使内部时钟与外部时钟保持同步。 CC的方法则是比较内外部时钟的长短,如果内部时钟周期短 了,就将所少的延迟加到下一个内部时钟周期里,然后再与外部时钟做比较,若是内部时钟周期 长了,就将多出的延迟从下一个内部时钟中刨除,如此往复,最终使内外时钟同步。 CFM与CC 各有优缺点, CFM的校正速度快,仅用两个时钟周期,但容易受到噪音干扰,并且如果测量失误, 则内部的延迟就永远错下去了。 CC的优点则是更稳定可靠,如果比较失败,延迟受影响的只是 一个数据(而且不会太严重),不会涉及到后面的延迟修正,但它的修正时间要比CFM长。 DLL 功能在DDR SDRAM中可以被禁止,但仅限于除错与评估操作,正常工作状态是自动有效的。


  2. 感谢分享!.............

  3. 学习了,感谢分享!