| |
之前的文章中,我们一直在想着用高阶SDM将量化噪声整形到高频,通过环路滤波器滤除,这是一种“曲线救国”的路线,那有没有能直接消除SDM的量化噪声方法呢?有。
那是什么方法呢?
不知道大家有没有注意到,在看数字锁相环论文的时候,在论文框图中除了分频器,振荡器,滤波器,鉴相器外,经常会出现DTC和LMS这两个模块,其实这两个模块实现的就是量化噪声消除(Quantization Noise Cancellation,QNC)功能。可以看下图,来源文献①

那具体是如何实现的呢?还得从DSM的量化噪声说起。
假设PLL中的分频器是4.25分频,那么DSM的量化噪声是什么样子,可以看下面文献②的时序图,其中clk_osc是VCO信号,clk_div是分频后波形,ref是参考信号波形,SDM是一阶SDM。

当SDM的输入是4.25时,那么分频器的分频呈现 {4,4,4,5} 循环的规律,他们的相位误差呈现{0.25T,0.5T,0.75T,0} 循环的规律,这个规律实际上是DSM量化噪声累加的结果。这种相位误差就是SDM的量化噪声的表现,实质上,这种现象是假的小数分频导致的,如果有真小数分频,那么clk_div的每个上升沿都能与ref对准,而不是每四次分频才能对准一次。
那如果想让这种误差消失,怎么办呢?
既然我们想要让clk_div与ref的上升沿对准,那我们就在clk_div后加延时,将clk_div的上升沿跟ref的上升沿对准不就行了。
并且每个周期的延时随着分频比变化,第一个上升沿延长0.25T,第二个上升沿延长0.5T,第三个上升沿延长0.75T,第四个上升沿就不加delay。这就是加了一个可控延时的模块,也就是框图中常见的DTC(Ditigal-to-Time Converter,数字时间转换器)。
类似的,既然在分频器后面加,是不是也可以在参考后面加,请看在ref后加DTC的时序图。

在ref后加DTC的量化误差呈现{0.75T,0.5T,0.25T,T}的规律,这个是{1-DSM量化噪声累加}的结果,这就是为什么,对比在分频器后加DTC的框架,在ref后加DTC的框图会有一个整数1,并且符号变为负号。可以看以下对比图

那框图中的Nfrac输入到DSM,又和DSM的输出相减是什么作用呢?
上文中讲了,量化误差呈现{0.25T,0.5T,0.75T,0}的规律循环,我们可以通过一些简单的计算去求出这个量化误差。举个例子,Nfrac=0.25,DSM是一阶的,DSM的输出是{0,0,0,1}循环, 那么Nfrac减去DSM的输出就是{0.25,0.25,0.25,-0.75}循环,而将这个差累加就变成{0.25,0.5,0.75,0}这样循环的序列,刚好就是量化误差呈现{0.25T,0.5T,0.75T,0}的系数。
但是,这个时候,仅仅只计算出了系数,还有一个T没有计算进去,这个时候就要依靠Kdtc。
那框图中的Kdtc是什么作用呢?
现在我有一个系数0.25,我得控制DTC,叫他帮我延时0.25T。
那我就得让他告诉我,我输入1的时候,他延时多长时间,如果他说,输入1的时候,延时是1秒,那他的单位增益就是gain=1。
那我要延时0.25T,我就要计算,Dctrl=0.25T/gain 输入给DTC叫他帮我延时这么长的时间。
图中的这个Kdtc实际上就是归一化的增益,Kdtc=T/gain
如何获取Kdtc的值呢?
一般来说,有两种方法:①一次性的测量,在芯片上电之后,通过某些方法测量Kdtc,然后设置为固定值;②实时的测量,实时的更新Kdtc。
在PLL锁定之后,由于整个环路有负反馈,T是一个比较准的值,即便有jitter,也在误差允许的范围之内。
但DTC的增益通常会随着温度,电压,工艺的变化而发生较大的变化,所以固定的Kdtc输入不能满足各个情况的变化。
因此,对于高性能的PLL来说,实时的测量是一个更好的选择。
而LMS就是实现一个实时的测量。
LMS算法以简单,速度快,收敛快著称,适合应用在实时变化的系统中,我们现在看论文知道使用了LMS算法去实时计算Kdtc。
讲LMS是如何实现之前,想问问大家会怎么去实现这个计算这个Kdtc呢?
我一开始的想法是,不能像PLL使用PID一样,瞬态地去控制这个Kdtc的值吗,误差大了,我就把Kdtc往小调。
但事实上,我犯了一个错误,PLL的分频比是一个固定的,可以认为输入是固定的,但是对于DTC来说,SDM的输出会变化,也就意味着DTC的输入是变化的,并且对于不同的输入,DTC的Kdtc是会变化的,DTC存在非线性。因此PID是不适用于调整Kdtc的,想要找到一个最优的Kdtc,必须是要对于所有输入一个整体都是一个很优秀的Kdtc。
既然要对整体都很好的Kdtc,那就要找一个平均的误差都很小的Kdtc,而LMS(Least Mean Squares,最小均方根)算法就是一个很好的选择。
可以看下面LMS的具体框图,图中的g就是估算的Kdtc,然后与累积的sdm量化误差相乘,图来自文献3

而LMS的核心式子为,是一个迭代的过程

其中K指的就是计算的Kdtc,而μ是一个收敛的系数(在图中就是γ),e(n)是图中的TDC输出的误差e[k],c(n)是分频器的SDM的量化误差累积(q[k])。图中的在DTC的输入增加了一个SDM,是因为,最终计算的DTC输入是一个小数,因此增加了一个SDM。
由于算法在数字域中实现更加简单,所以这种结构通常会在数字锁相环中出现,当然在模拟锁相环中也出现过,例如,常用在亚采样锁相环(sub-sampling PLL,SSPLL)中。
由于SPD高增益,SSPLL可实现RMS jitter≤100fs高性能PLL,但是SPD需要高线性度,这个时候通常就会增加一个DTC缩小SPD的工作范围,在小范围内就可以更好提高SPD的线性度了。下图来源于文献④

一,在DPLL中,当你的TDC线性度非常好时,你可以不使用DTC,直接在TDC的输出部分,减去相应的量化噪声即可。
其实方法与加DTC类似,只不过,是在TDC的输出后减去相应的部分。为什么在TDC后处理呢?因为是数字域,比较好处理。下图来源于文献③

二,增加非整数分频
在环路分频器中,引入SDM的原因是,分频器只有整数分频,那如果可以实现小数分频,SDM的量化噪声自然就会减少。
文献⑤就是采用这种方法,引入1/1.5分频,降低了量化噪声,下图为1/1.5分频cell。
这个方法的普适应不是特别高,SDM也需要配合设计。

SDM和用DTC做补偿是两种不同的思维方式。
高阶SDM是想通过整形,将量化噪声整形到高频,然后通过滤波器滤除。
DTC是直面量化噪声,想实现真正的小数分频。
从整形量化噪声到直面量化噪声,不得不感叹前人在追求高性能的道路上不遗余力,尤其是多年前,文献⑤通过1/1.5分频来降低量化噪声,这种做法有种”为了醋包了顿饺子“的感觉,当然,这绝不是贬义,反而让我感觉作者为了实现高性能而义无反顾的决心,让我对探索精神与创新思维的真诚敬佩!
①[OJSSCS 2024].Digital Phase-Locked Loops: Exploring Different Boundaries
②[OJSSCS 2024].Nonlinearity-Induced Spur Analysis in Fractional-N Synthesizers With ΔΣ Quantization Cancellation
③[JSSC2014].An Adaptive Pre-Distortion Technique to Mitigate the DTC Nonlinearity in Digital PLLs
④[JSSC2021].A 14nm Ultra-Low Jitter Fractional-N PLL Using a DTC Range Reduction Technique and a Reconfigurable Dual-Core VCO
⑤[JSSC2006].A Quantization Noise Suppression Technique for ΔΣ Fractional-N Frequency Synthesizers
/2