集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 4057|回复: 6

数字锁相环设计步骤

[复制链接]
老怪甲 该用户已被删除
老怪甲 发表于 2010-7-2 10:26:43 | 显示全部楼层 |阅读模式
数字锁相环设计步骤

有关数字锁相环的帖子不断出现,但大多没有讲述其原理。翻开有关锁相环的书总是堆叠着鉴相、同相积分、中相积分、滤波等专用名词。这些概念距离硬件设计实现数字锁相环较远。本文按照数字锁相环设计的步骤,采用手把手的方式讲述设计过程和原理,旨在给数字锁相环初次设计者提供一个思路,缩短开发的时间。附件是用VHDL语言设计的20分频数字锁相环。
Div20PLL Port(
clock : in std_logic; --80M local clk
flow : in std_logic; --4M data flow
clkout : out std_logic --4M CLK
);
其中clkout是所提取的数据时钟。clock是本地时钟,其频率是数据流flow速率的20倍。若数据流flow速率为4M则clock选用80M,若 flow为1M则选取clock为20M,依次类推。此附件基本按照下文提到的步骤设计,并已经在产品中应用的。

专用名词约定:

一个比特: 数据流flow由一个比特接一个比特组成,文中提到的一个比特均指flow中的一个比特。
域: 一个比特的时间从开始到结束可以划分为5个时间片段,依次为
§前失锁§超前§同步§滞后§后失锁§
这五个片段称作五个域,其中前失锁和后失锁统称为失锁域。
分频比R: 本地时钟记做clock,从flow中提取的时钟记做lowclk,clock与lowclk的频率比记做R。
smp: 指用clock提取的lowclk上升沿(参见“上升沿与下降沿触发小论”,需要注意一点的是,lowclk是与clock同步的信号,所以只需延时一次提取)。
脉冲: 如不特殊指明,是指'1'值保持一个clock周期的信号,无效时值为'0'。
设计总思路:
     数字锁相环完成的功能就是利用clock从flow中提取lowclk,并且使smp保持在同步域。lowclk由clock经R分频得到,并且 lowclk的相位是可以动态调整的以达到锁相的目的。当smp落在同步域时,认定为锁相环已经同步,保持分频的状态不变。当smp落在失锁域时认定为失锁,则强行置下一个smp到同步域的中间位置。当smp落在超前域时,则推迟下一个smp的到来一个节拍。当smp落在滞后域时,则提前一个节拍使下一个 smp到来。

设计步骤:

根据设计参数要求合理选取R值,通常R不小于8,本文选取R = 20讲解。以后文中用到20均指R,而提到10则指R/2。
确定5个域的宽度,本例选取5个域等宽。由于R = 20,所以一个比特的宽度为20,那么每个域的宽度均为4。失锁域是前失锁域和后失锁域的统称,所以失锁域宽8。
设计一个计数器cnt,cnt供10(R/2)个状态,记做s0到s9,cnt从s0到s9循环变化。cnt有三个同步控制脉冲load、inc和 dec,load使cnt装入s7,inc使cnt跳过下一个状态(假如在s8时有inc,则cnt从s8直接跳到s0而不再经过s9),dec使cnt 继续保持当前状态不变。
时钟lowclk的状态受到cnt的状态和load信号的同步控制,load使lowclk置'1'值,s9使lowclk翻转。两个特殊情况是由于 cnt受到inc和dec的控制而使cnt的状态会跳过s9或重复出现s9,即会出现...s7s8s0s1...或... s7s8s9s9s0s1...这两种情况。对于第一种情况lowclk在s8后的s0翻转,而第二种情况仅在第一个s9处翻转。
用clock提取flow的跳变沿saltus。
用saltus产生一个宽度为16的信号pulse,pulse在saltus处及接下来的15个clock中期内保持为'1'值,其余情况为'0'。在pulse为'1'期间有一个计数器position在计数,显然position的值为0到15。
用clock提取pulse的下降沿cmp。
定义一个与position相同类型的信号phase。phase在pulse为'0'时值为0,在pulse为'1'且smp为'1'时装入position的值,其他情况phase保持值不变化。
在cmp处观察phase的值。若为0到3则产生一个失锁脉冲loss,若为4到7则产生一个超前脉冲lead,若为8到11则产生一个同步脉冲syn,若为12到15则产生一个滞后脉冲lag。这些脉冲的位置均在cmp。
若loss累积3次且这3次中间没有出现过syn,则产生一个装载脉冲load。按照相同的方法用lead产生一个dec信号,用lag信号产生一个inc信号。
至此,整个数字锁相环已经设计完毕。步骤中提到的计数器就相当于积分,phase的作用就是完成鉴相,第10步也就是一些有关数字锁相环的书籍中提到的滤波。第3步提到R/2计数器而后在第4步用cnt的状态翻转lowclk来实现R分频,是为了强调输出的lowclk的展空比为50%。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
hobbesface 发表于 2010-8-9 17:00:25 | 显示全部楼层
谢谢楼主  
但是我用这个附件建立工程进行仿真时,输出波形有相移啊  不知有什么问题?
hng1123 发表于 2011-4-5 07:24:18 | 显示全部楼层
是不是功能仿真与时序仿真的区别呢
suifeng_lll 发表于 2011-5-26 12:05:21 | 显示全部楼层
谢谢楼主啦
liuxiang900816 发表于 2011-10-15 22:51:04 | 显示全部楼层
zheng  yong zhe ne `~~~
九齿钉耙123 发表于 2014-5-7 09:55:07 | 显示全部楼层
hobbesface 发表于 2010-8-9 17:00
谢谢楼主  
但是我用这个附件建立工程进行仿真时,输出波形有相移啊  不知有什么问题?

我也是,建立时序仿真后,输出的波形还是有相移。。。。跟输入波形无法锁定
cwc272266457 发表于 2014-7-3 16:27:25 | 显示全部楼层
hobbesface 发表于 2010-8-9 17:00
谢谢楼主  
但是我用这个附件建立工程进行仿真时,输出波形有相移啊  不知有什么问题?

我现在也在编锁相环呢,各个模块都仿真成功,但就是整合在一起,出问题了,您有经验吗,能向你请教一下吗?
方便的话留个QQ,我加您,谢谢!
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-25 15:07 , Processed in 0.066244 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表