随着数字电路技术的发展,数字锁相环在调制解调、频率合成、FM 立体声解码、彩色副载波同步、图象处理等各个方面得到了广泛的应用。数字锁相环不仅吸收了数字电路可靠性高、体积小、价格低等优点,还解决了模拟锁相环的直流零点漂移、器件饱和及易受电源和环境温度变化等缺点,此外还具有对离散样值的实时处理能力,已成为锁相技术发展的方向。

所谓数字PLL,就是指应用于数字系统的PLL,也就是说数字PLL中的各个模块都是以数字器件来实现的,是一个数字的电路。 数字锁相环的优点是电路最简单有效,可采用没有压控的晶振,降低了成本,提高了晶振的稳定性。但缺点是和模拟锁相环一样,一旦失去基准频率,输出频率立刻跳回振荡器本身的频率;另外还有一个缺点,就是当进行频率调整的时候,输出频率会产生抖动,频差越大,抖动会越大于密,不利于某些场合的应用。随着大规模、超高速的数字集成电路的发展,为数字锁相环路的研究与应用提供了广阔空间。由于晶体振荡器和数字调整技术的加盟,可以在不降低振荡器的频率稳定度的情况下,加大频率的跟踪范围,从而提高整个环路工作的稳定性与可靠性。

锁相环是一个相位反馈控制系统,在数字锁相环中,由于误差控制信号是离散的数字信号,而不是模拟电压,因而受控的输出电压的改变是离散的而不是连续的;此外,环路组成部件也全用数字电路实现,故而这种锁相环就称之为全数字锁相环(简称PLL)。全数字锁相环主要由数字鉴相器、可逆计数器、频率切换电路及N分频器四部分组成。其中可逆计数器及N分频器的时钟由外部晶振提供。不用VCO,可大大减轻温度及电源电压变化对环路的影响。同时,采用在系统可编程芯片实现有利于提高系统的集成度和可靠性。

一阶全数字锁相环主要由鉴相器、K变模可逆计数器、脉冲加减电路和除N计数器四部分构成。K变模计数器和脉冲加减电路的时钟分别为Mfc和2Nfc。这里fc是环路中心频率,一般情况下M和N都是2的整数幂。本设计中两个时钟使用相同的系统时钟信号。

当环路失锁时,异或门鉴相器比较输入信号(fin)和输出信号(fout)之间的相位差异,并产生K变模可逆计数器的计数方向控制信号(dnup); K变模可逆计数器根据计数方向控制信号(dnup)调整计数值,dnup为高进行减计数,并当计数值到达0时,输出借位脉冲信号(borrow);为低进行加计数,并当计数值达到预设的K模值时,输出进位脉冲信号(carryo);脉冲加减电路则根据进位脉冲信号(carryo)和借位脉冲信号(borrow)在电路输出信号(idout)中进行脉冲的增加和扣除操作,来调整输出信号的频率;重复上面的调整过程,当环路进入锁定状态时,异或门鉴相器的输出se为一占空比50%的方波,而K变模可逆计数器则周期性地产生进位脉冲输出carryo和借位脉冲输出borrow,导致脉冲加减电路的输出idout周期性的加入和扣除半个脉冲。这样对于输出的频率没有影响,也正是基于这种原理,可以把等概率出现的噪声很容易的去掉。

全数字锁相环的verilog源代码,仿真已通过

module dpll(reset,clk,signal_in,signal_out,syn);

parameter para_K=4;

parameter para_N=16;

input reset;

input clk;

input signal_in;

output signal_out;

output syn;

reg signal_out;

reg dpout;

reg delclk;

reg addclk;

reg add_del_clkout;

reg [7:0]up_down_cnt;

reg [2:0]cnt8;

reg [8:0]cnt_N;

reg syn;

reg dpout_delay;

reg [8:0]cnt_dpout_high;

reg [8:0]cnt_dpout_low;

/******phase detector*****/

always@(signal_in or signal_out)

begin

dpout<=signal_in^signal_out;

end

/******synchronization establish detector*****/

always@(posedge clk or negedge reset)

begin

if(!reset)    dpout_delay<='b0;

else          dpout_delay<=dpout;

end

always@(posedge clk or negedge reset)

begin

if(!reset)

begin

cnt_dpout_high<='b0; cnt_dpout_low<='b0;

end

else if(dpout)

if(dpout_delay==0)  cnt_dpout_high<='b0;

else

if(cnt_dpout_high==8'b11111111)  cnt_dpout_high<='b0;

else  cnt_dpout_high<=cnt_dpout_high+1;

else if(!dpout)

if(dpout_delay==1)  cnt_dpout_low<='b0;

else

if(cnt_dpout_low==8'b11111111)  cnt_dpout_low<='b0;

else  cnt_dpout_low<=cnt_dpout_low+1;

end

always@(posedge clk or negedge reset)

begin

if(!reset)  syn<='b0;

else if((dpout&&!dpout_delay)||(!dpout&&dpout_delay))

if(cnt_dpout_high[8:0]-cnt_dpout_low[8:0]<=4||cnt_dpout_low[8:0]-cnt_dpout_high[8:0]<=4)  syn<='b1;

else  syn<='b0;

end

/****up down couter with mod=K****/

always@(posedge clk or negedge reset)

begin

if(!reset)

begin

delclk<='b0;

addclk<='b0;

up_down_cnt<='b00000000;

end

else

begin

if(!dpout)

begin

delclk<='b0;

if(up_down_cnt==para_K-1)

begin

up_down_cnt<='b00000000;

addclk<='b0;

end

else

begin

up_down_cnt<=up_down_cnt+1;

addclk<='b0;

end

end

else

begin

addclk<='b0;

if(up_down_cnt=='b0)

begin

up_down_cnt<=para_K-1;

delclk<='b0;

end

else

if(up_down_cnt==1)

begin

delclk<='b1;

up_down_cnt<=up_down_cnt-1;

end

else

up_down_cnt<=up_down_cnt-1;

end

end

end

/******add and delete clk*****/

always@(posedge clk or negedge reset)

begin

if(!reset)

begin

cnt8<='b000;

end

else

begin

if(cnt8=='b111)

begin

cnt8<='b000;

end

else

if(addclk&&!syn)

begin

cnt8<=cnt8+2;

end

else

if(delclk&&!syn)

cnt8<=cnt8;

else

cnt8<=cnt8+1;

end

end

always@(cnt8 or reset)

begin

if(!reset)

add_del_clkout<='b0;

else

add_del_clkout<=cnt8[2];

end

/******counter with mod=N******/

always@(posedge add_del_clkout or negedge reset)

begin

if(!reset)

begin

cnt_N<='b0000;

signal_out<='b0;

end

else

begin

if(cnt_N==para_N-1)

begin

cnt_N<='b0000;

signal_out<='b0;

end

else

if(cnt_N==(para_N-1)/2)

begin

signal_out<='b1;

cnt_N<=cnt_N+1;

end

else

cnt_N<=cnt_N+1;

end

end

endmodule

DPLL由  鉴相器  模K加减计数器  脉冲加减电路  同步建立侦察电路 模N分频器 构成.

整个系统的中心频率(即signal_in和signal_out的码速率的2倍)

为clk/8/N.  模K加减计数器的K值决定DPLL的精度和同步建立时间,K越大,则同步建立时间长,同步精度高.反之则短,低.

全数字锁相环(DPLL)的原理简介以及verilog设计代码的更多相关文章

  1. 数字锁相环Octave仿真

    clc; clear all; % 仿真数据长度 SimLens = 1000; % 载波信号 Fs = 2400; Ts = 1 / Fs; Fsig = 60; % 随机初相 Delta_Phas ...

  2. 基于模k可逆计数的数字锁相环fpga实现

    参考http://wenku.baidu.com/view/59420cb069dc5022aaea00bd.html 实现结构是参考的上边的实例,我用的全同步实现,实现过程中发现一些现象,做下记录. ...

  3. simulink pi的方法产生锁相环

    pi方法就是比例积分方法,关于pi方法介绍参考http://www.elecfans.com/dianzichangshi/20120909287851.html 锁相环pi方法原理参考http:// ...

  4. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参 ...

  5. kafka原理简介并且与RabbitMQ的选择

    kafka原理简介并且与RabbitMQ的选择 kafka原理简介,rabbitMQ介绍,大致说一下区别 Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和 ...

  6. 第十四届智能车培训 PLL锁相环

    什么是锁相环? PLL(Phase Locked Loop): 为锁相回路或锁相环,用来统一整合时脉讯号,使高频器件正常工作,如内存的存取资料等.PLL用于振荡器中的反馈技术. 许多电子设备要正常工作 ...

  7. Linux DNS原理简介及配置

    Linux DNS原理简介及配置 DNS简介 DNS原理 域名解析的过程 资源记录 DNS BIND安装配置 一.简介 一般来讲域名比IP地址更加的有含义.也更容易记住,所以通常用户更习惯输入域名来访 ...

  8. Oracle Golden Gate原理简介

    Oracle Golden Gate原理简介 http://www.askoracle.org/oracle/HighAvailability/20140109953.html#6545406-tsi ...

  9. NAT原理简介、各种 ADSL Modem 及路由器的端口映射方法

    NAT原理简介 NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force ...

随机推荐

  1. C#6 冒泡 折半查找 二维数组

    人类思维--计算机逻辑思维 逻辑思维--代码实现 写书法: 描红--临摹--碑贴--自成一体--草 章节复习: 数组:一维,二维,多维 一维:豆角.连续,同一类型. 定义:数据类型[] 数组名=new ...

  2. UVa 1583 - Digit Generator

    A+A的每一位的数字的和=B 问你每一个B对应 的最小的A 是多少 不然输出0: #include <cstdio> #include <iostream> #include ...

  3. C指针--通过二级指针往回拉数据

    现在有这种需求,在main函数中建立一个二叉树的root结点的指针,在tree_create函数中malloc或者new一个二叉树结点,然后在main函数中能正常的访问这个新建的结点. 注:这里的tr ...

  4. Struts学习之ValueStack学习

    1. 数据传输背后机制:ValueStack(值栈) 在这一切的背后,是因为有了ValueStack(值栈)! ValueStack基础:OGNL OGNL是Struts2中使用的一种表达式语言,它可 ...

  5. [置顶] 学习鸟哥的Linux私房菜笔记(6)——过滤器、输入输出及管道

    一.过滤器 Linux中的应用工具分为三种: 交互工具 过滤器 编辑器 能够接受数据,过滤再输出的工具,称之为过滤器 对过滤器和进程,存在着输入源与输出对象 二.输入.输出.重定向 输入:过滤器的数据 ...

  6. ajax在ie下返回未定义解决方案

    有时候用ajax进行请求,接收到的数据在火狐下很正常,但在ie浏览器下确是undefined,这是因为后端php输入json时没有统一指定contentType头导致的,只需在php文件中加入head ...

  7. Binder的使用(跨进程——AIDL,非跨进程)

    一.Binder类 1.作用:Binder是客户端与服务器端的通信的媒介(连接各种Manager的桥梁),客户端通过Binder对象获取服务器端提供的数据 (为什么要用Binder来提供数据呢,服务器 ...

  8. Python爬虫实战(2):爬取京东商品列表

    1,引言 在上一篇<Python爬虫实战:爬取Drupal论坛帖子列表>,爬取了一个用Drupal做的论坛,是静态页面,抓取比较容易,即使直接解析html源文件都可以抓取到需要的内容.相反 ...

  9. 大型网站性能优化(页面(HTML)优化的方法)

    页面(HTML)优化的方法 除了语言层面上进行优化外,对Web开发,HTML的优化将很大程度上减轻服务器的负载,提高网站的性能 1). 减少HTTP请求数.打开网页,浏览器会发出很多请求,图片,脚本, ...

  10. 第二章 andrid studio创建项目

    原文 http://blog.csdn.net/zhanghefu/article/details/9326735 第二章 andrid studio创建项目 第二章 andrid studio创建项 ...