shuszhao 发表于 2018-1-2 09:26:56

FPGA篇之码元同步DPLL设计

当时的DPLL组成原理如图1所示。时钟产生使用的是N分频器,N分频器对主时钟进行整数分频,有一个很明显的缺点就是频率步进比较大,对一些不能整数倍分频的时钟,就会有频率误差,输出的时钟抖动也会变大。
https://blog-assets.oss-cn-shanghai.aliyuncs.com/4660/471dd28935fd308d88d4bf6370b0db5878f355b7.jpg
图1
后来回望这道题的时候,让我想到了DDS信号发生器。DDS信号发生器频率步进可以很细,频率控制字控制输出信号的频率;通过改变相位控制字,就可以调节输出信号的相位。DDS信号发生器可以产生任意的波形信号,当然也可以产生时钟信号。而利用DDS原理的时钟发生器,其实就是就是DDS信号发生器去掉了查找表,然后取地址码的最高位作为时钟输出信号,如图2所示。
https://blog-assets.oss-cn-shanghai.aliyuncs.com/4660/b8a2a2812335b5662bfb0bc5ebedcf78d5f2aff0.jpg
图2
那么,利用DDS时钟发生器作为DPLL的时钟产生,替代原有的N分频器,效果会怎样呢?带着这样的好奇心,在工作清闲的时候,拿出以前DPLL的代码进行修改,仿真。最终在开发板上测试可行,同样可以达到锁相的目的,于是便有了这篇文章。
https://blog-assets.oss-cn-shanghai.aliyuncs.com/4660/62b0385c975ae7f140fee3769728eb205b392094.jpg
图3
图3就是本文要介绍的DPLL结构示意图,与图1相同的是,使用同样的鉴相器和鉴相后的数字滤波器。不同的是前端多了一个相位误差测量模块,测量出输入时钟与输出时钟之间的相位差,得到超前误差和滞后误差,其中滞后误差为负极性。使用数字滤波器出来的超前或滞后脉冲信号作为选择器的控制信号,如果超前脉冲有效则选择超前误差;如果滞后脉冲有效则选择滞后误差。然后把选择器出来的误差与一比例放大因子相乘进行误差放大,得到放大的误差再与相位控制字寄存器进行累加,最终相位控制字送入DDS时钟发生器。锁相的原理其实就是一个比例积分控制算法,使输出时钟与输入时钟相位保持一致。
需要注意的是,误差比例放大因子是要预先设定的,误差比例放大因子影响到锁相时间和输出时钟稳定性,设置太小则锁相需要的时间太长,太大则导致输出的时钟不稳定。而送给DDS时钟发生器的频率控制字可以预先设定,使得DDS时钟发生器输出的时钟频率与输入时钟一致,或者通过一个频率计数器来测量输入时钟的频率计数,作为频率控制字。
https://blog-assets.oss-cn-shanghai.aliyuncs.com/4660/0fabf7acc1c8c36c022c2f0e0b786233404f4981.jpg
图4
仿真和测试的模型如图4的RTL图,选用的器件是altera的Cyclone II 系列EP2C8Q208C8N。伪随机信号发生器与DPLL分别使用不同的外部时钟源,伪随机信号曼彻斯特编码输出dman与DPLL的锁相输入inclk相连。DPLL输出时钟为被锁定时钟的2倍频(由于DPLL鉴相器是微分整流型,最小为2倍频)。
在Modelsim仿真中,dout为伪随机信号二进制编码,dman为曼彻斯特编码,dsync为dman的同步信号,DPLL的输入被锁信号inclk与dman相连,outclk为DPLL的输出时钟。开始时刻, outclk与 dsync是不同步的,如图5所示。等过一段时间之后,outclk与 dsync的相位慢慢靠近(图6),等仿真到74us之后,outclk与 dsync的相位已经重叠,也就是锁相成功(图7)。
https://blog-assets.oss-cn-shanghai.aliyuncs.com/4660/fdcfce16302c44a744d934c21c6b83186f1a3c91.jpg
图5
https://blog-assets.oss-cn-shanghai.aliyuncs.com/4660/6601f96768303ebd0ac29923a96dc70e241a6701.jpg
图6
https://blog-assets.oss-cn-shanghai.aliyuncs.com/4660/3403d4ce0af48fe83d88b3333fba5cb1b32c534b.jpg
图7
页: [1]
查看完整版本: FPGA篇之码元同步DPLL设计