在芯片设计中时钟网络的生成常用两个器件分别是DLL(Delay-locked loop)和PLL(Phase-locked loop)。
这两个期间都能完成 分频,倍频和相位调整的功能。但PLL的分频和倍频范围大,成本高。DLL有一定的分频,倍频能力,主要是用来做时钟相位调整。
DLL 的环路结构分两种,一种是输入参考时钟与 DLL 的输出时钟进行比较, 这种结构的 DLL 通常使用于频率综合,时钟产生与信号同步应用中。如下图所示:

一种是输入参考时钟与不相关的时钟进行比较,这种 DLL 需要 2 个输入时钟,该结构主要应用于时钟恢复电路中。如下图所示:

从上图中可以看出DLL的主要组成单元有:
PD:phase detector 鉴相器
CP:charge pump 电荷泵
VCDL:Voltage-Controlled Delay Line 压控延迟线
DLL可以分为数字DLL和模拟DLL,下图给出了简单数字DLL的结构框图。

其中VCDL是用的clk buff或者反相器【如果使用反相器抽头应该在每两个反相器的输出端】设一个clk buff或者两个反相器的延迟为
。这里的clk buff或反相器的延迟
是不可调整的【因为没有把可变的电压或电流经过clkbuff或反相器???】,那么只能选择串联的clkbuff级数的办法调节延迟。假设clk周期为4
,那么refclk经过4级clkBuff延迟得到和refclk同向的时钟被phase selection选出来,经过PD检测到相位相同,到达锁定状态。此时4级clkBuff的输出分别是refclk的90°,180°,270°,360°移相时钟。
如果refclk是4.8
,那么选择与refclk最近的相位送近PD,就是5级clkbuff的输出。此时每一级输出相位偏差是360°/4.8=75°。这种DLL对不同频率的refclk移相精度差别太大。除非refclk的周期远大于
。所以这种结构限制性较大。一般情况clkbuff的delay在30个ps一下,如果refclk在100MHz左右,
=20ps。那么移相精度就在20ps*360°/10ns=0.72°
所以上面的DLL使用限制很大,只能离散的调整clk相位,如果真的要做连续范围的调整,应该把LPF的输出电压作为延迟单元的控制电压。反相器的延迟是和电压及电流有关系的,如果输入反相器的电压或电流发生改变就可以做到可变延迟【一般情况电压越高,延迟越小;电流越大,延迟越小】。

所以按照上面的示例,做成可变延迟需要直接用LPF输出的变化电压来控制反相器的延时。
在时钟恢复电路和高速DDR接口做时钟对齐的电路常用更复杂设计的DLL或PLL。
下面分节介绍一下DLL三个主要组成部分。
鉴相器的作用就是检测从 VCDL 输出的信号与时钟参考信号的相位差,把相位差的信息传递给下级电路。
PD有数字的也有模拟的,一个简单的异或门就可以是一个鉴相器,对output的输出积分在相位差0-180°时积分逐渐增大,180°到360°又逐渐减少,当clk(out)和clk(ref)相位相同,并差一个周期时,异或输出为0。

复杂的PD不在这里详细介绍。可参考:
鉴频鉴相器设计(Phase Frequency Detector,PFD)_cy413026的博客-CSDN博客

有一个说法来区别鉴频器和鉴相器。说鉴频器只能保证频率锁定,但是可能锁定在随机的相位差上面。鉴相器是可以固定锁定相位差的。
还有鉴频鉴相器,先进行频率锁定在进行相位锁定。鉴相器同时锁定频率和相位;鉴频器只锁定频率。
对于DLL来说,如果用在时钟恢复电路是需要一定的频率跟踪能力的。最开始给出的普通数字DLL结构是不具有频率跟踪能力的,或者说DLL的第一种结构是不需要频率跟踪能力
参考如下链接
电荷泵CP原理及在PLL/DLL中的使用_cy413026的博客-CSDN博客
DLL和PLL之所有没有将PFD输出电压直接给LPF(PLL)和VCDL是为了避免PD直接输出信号出现的过冲现象损坏元器件。原理和过冲产生的原因在链接中都有说明
VCDL 压控延迟线:是由多个压控延迟单元串联后组成。 如下图所示

假设每一个延迟单元的延迟范围为
,共n个延迟单元,那么clk相位可调整的范围为
![[m\tau _{0}:m\tau_{1}] \to m <= n](https://1000bd.com/contentImg/2024/03/14/174541863.png)
可以通过选择延迟级数与改变延迟单元的电压来完成。
下图给出了一个压控延迟单元的二极管连接形式(下图左)和有源连接形式(下图右)。
参考www.ictown.com整理的DLL设计文档,该文档已收录在本人网盘

它们分别的延时如下:
二极管连接:

由公式可知,延时时间 td 可以通过对 Iss 进行调节来改变。
有源连接:

Vthp 为 PMOS 的阈值电压,可以通过控制Vcontrol来调节延时。
下图是PLL的基本配置框图:

和DLL的一个最大区别是VCDL换成了VCO,且要有LPF。
下图是intel MAX® 10 PLL的高级结构图:1. MAX® 10时钟和PLL概述
该文章也保存在本人网盘。

下面简单说一下PD,CP,LPF和VCO
首先根据PD/PFD的类型可以分为很多种类
数字鉴相器:
模拟鉴相器:
其中混频鉴相器根据混频器件的不同分为无源鉴相器和有源鉴相器
模拟鉴相器还可以划分为:
下面的文章以有源混频鉴相器为例【该类型以模拟乘法器为主】,对PLL进行了公式推导:
值得一提的是PD/PFD输出的电压都不是能够精确的和相位差成固定的正比例。实际情况都是:
在一定相位差范围内,PD/PFD的输出和相位差成正比例关系
对于用模拟乘法器,在滤除高频分量之后:

可以看到输出电压是相位差的正弦函数,一般在相位差小于30°时候,就可认为

可参考DLL的1.1节和2.0节,这里不在展开
DLL的1.2节说明比较清楚,这里不在展开
low-pass filter,这里也不在展开
压控振荡器指输出频率与输入控制电压有对应关系的振荡电路(VCO),频率是输入信号电压的函数的振荡器VCO,振荡器的工作状态或振荡回路的元件参数受输入控制电压的控制,就可构成一个压控振荡器。------原理比较清晰,百科讲的比较充分,这里不在展开。

首先要明确一个概念这里说的整数分频和小数分频指的是锁相环路上的分频系数是否为整数而不是输出频率和参考频率是否为整数倍关系。
例如下图对于f(ref)=10MHz,要求输出900.2MHz的频率,可以采用两种方式:
的方式得到,这种分频系数都是整数,即为整数分频。
的方式得到,存在小数分频系数,即为小数分频。对于PLL来说,在参考频率输入PFD之前都有一个pre-Div用来完成分频,在环路上VCO输出到反馈回PFD之间加分频器,用于倍频。

小数N分频PLL从上世纪七十年代开始就已投入使用。小数N分频使PLL输出的分辨率可以降至PFD频率的一小部分(如图所示),其中PFD输入频率为1 MHz。可以产生分辨率为数百Hz的输出频率,同时维持较高的PFD频率。因此,小数N分频的N值显著小于整数N分频的N值。
相比整数分频PLL:
具体如何选择还需在根据项目需求和成本来综合考虑。
另一篇ADI资深工程师写的关于整数分频和小数分频文章如下:文章中还有整数分频,小数分频的带内噪声和杂散分析
锁相环(PLL)基本原理_cy413026的博客-CSDN博客
非常实用、超详细的锁相环常见问题解答~ - 讨论 - RF - EngineerZone
在本人网盘收集了一些PLL、DLL的资料

关于PLL输出一直有一些疑问
这里先给出两个结论性的东西:
在回答这个问题的时候有两个问题需要确定
同一个PLL如何同时输出多个clk?
输出的多个clk频率是否为整数倍关系?
先回答第二个问题如果输出clk之间没有整数倍频率关系,比如说1.5倍关系,如下图:

从上图可以看到无论是clk_a做launch clk_b capture还是反过来,launch clk的上升沿都会对应3种不同相位的capture 上升沿,sta分析时会保证最差的setup/hold都能满足。
对于不同的频率倍数,对应的launch clk和capture clk沿相位关系比较多而已,sta还是能分析出来的【即使整数倍频率关系也是多沿之间多相位关系】。在加上如果存在multiCycle设计,也可以简化sta分析。
所以clk之间的频率关系不是能否做同步处理的关键。
PLL同时输出多个clk,只能是在不同的分频器后输出,如下图分别在VCO输出,div0/1/2后输出.

对于PFD可以保证参考时钟和反馈时钟相位关系是锁定的,但这个锁定还分为两种情况:
对于第二种情况,输出的多个clk每隔一段时间,互相的相位关系就会变化,此时sta是无法保证同步能正确signOff的
对于第一种情况,保证了PFD的输入为固定相位差,但是每个div的相位偏移是多少?是否稳定?这些都是未知数,肯定不会是所有div的输入输出相位关系都是固定不变的
所以综上所述,PLL输出的多个clk无论clk间频率关系如何,都是无法保证它们之间的相位关系是稳定的,所以也不能当做同步电路来处理。
其实这个问题和4.1节的问题有相似的地方,在PFD的输入端可以确定两个输入是固定相位差的。但是vco输出和div输出的相位和参考时钟的相位关系是不确定的。
所以个人偏向于认为是异步时钟,在实际项目中也没有参考时钟和PLL输出做同步signOff的实例。
答案是异步的。两个PLL产生的时钟,它们在上电是时相位差是随机的,而且不同VCO时钟漂移抖动也不一样,所以是异步时钟。