全数字锁相环的verilog源代码讲解
锁相环pll工作原理及verilog代码
锁相环的组成和工作原理 #1 1.锁相环的基本组成 . 许多电子设备要正常工作, 通常需要外部的输入信号与内部的振荡信 许多电子设备要正常工作, 号同步,利用锁相环路就可以实现这个目的。
号同步,利用锁相环路就可以实现这个目的。
锁相环路是一种反馈控制电路, 锁相环路是一种反馈控制电路,简称锁相环 )。
锁相环的特点是 (PLL)。
锁相环的特点是:利用外部输入的 )。
锁相环的特点是: 参考信号控制环路内部振荡信号的频率和相 位。
因锁相环可以实现输出信号频率对输入信号频率的自动跟踪, 所以锁 因锁相环可以实现输出信号频率对输入信号频率的自动跟踪, 相环通常用于闭环跟踪电路。
锁相环在工作的过程中, 相环通常用于闭环跟踪电路。
锁相环在工作的过程中,当输出 于闭环跟踪电路 信号的频率与输入信号的频率相等时, 信号的频率与输入信号的频率相等时,输出电压与输入电压保 持固定的相位差值,即输出电压与输入电压的相位被锁住,这 持固定的相位差值,即输出电压与输入电压的相位被锁住, 就是锁相环名称的由来。
就是锁相环名称的由来。
( ) 锁相环通常由鉴相器 PD) 环路滤波器 LF) 、 ( ) 和压控振荡器 VCO) ( ) 三部分组成, 所示。
三部分组成,锁相环组成的原理框图如图 8-4-1 所示。
锁相环中的鉴相器又称为相位比较器, 它的作用是检测输入信号和输 锁相环中的鉴相器又称为相位比较器, 出信号的相位差,并将检测出的相位差信号转换成 uD(t)电压信号 出信号的相位差, ) 输出, 该信号经低通滤波器滤波后形成压控振荡器的控制电压 u(t) 输出, , C ) 对振荡器输出信号的频率实施控制。
对振荡器输出信号的频率实施控制。
施控制 2.锁相环的工作原理 . 锁相环中的鉴相器通常由模拟乘法器组成, 利用模拟乘法器组成的鉴 锁相环中的鉴相器通常由模拟乘法器组成, 相器电路如图 8-4-2 所示。
所示。
全数字锁相环的verilog源代码讲解
全数字锁相环的verilog源代码讲解支持论坛发展帖出全数字锁相环的verilog源代码,仿真已通过moduledpll(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; elsedpout_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==1cnt_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 beginif(!reset syn<='b0; else if((dpout&&!dpout_delay||(!dpout&&dpout_delayif(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 withmod=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 elseif(up_down_cnt==1 begin delclk<='b1; up_down_cnt<=up_down_cnt-1; end elseup_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&&!syncnt8<=cnt8; else cnt8<=cnt8+1; end end always@(cnt8 or reset begin if(!resetadd_del_clkout<='b0; else add_del_clkout<=cnt8[2]; end /******counter withmod=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越大,则同步建立时间长,同步精度高.反之则短,低.。
基于FPGA的全数字锁相环设计与实现
基于FPGA的全数字锁相环设计与实现一、前言全数字锁相环(Digital Phase-Locked Loop,简称DPLL)是一种数字电路设计技术,可实现同步数字信号的调制和解调。
基于FPGA的全数字锁相环设计与实现,是一个极为重要的课题。
它可以有效地提高数字电路的性能,使得数字系统具有更优越的特性,并可广泛应用于数字电路的设计、数字信号的处理等领域。
二、DPLL 的体系结构DPLL是由相频检测器、滤波器、数字控制振荡器和时钟输出等多个部分组成的。
其中,相频检测器、滤波器和数字控制振荡器通常被集成到FPGA的内部,而时钟输出则需要通过FPGA的普通I/O口与市场上常见的外部输出设备相结合。
三、数字锁相环的工作原理数字锁相环的工作原理基于一个反馈循环系统,其中参考振荡器的频率与输入信号会被比较,然后通过差错检测网络来确定缺陷。
如果这些信号频率不匹配,则通过调整数字控制振荡器的频率来达到匹配。
然后,系统会根据输出信号和参考信号的相位差异来调整数字控制振荡器的频率,并通过PLL的反馈路径传输至输入端,进而得到和参考信号相同频率的输出信号。
四、数字锁相环的应用数字锁相环在通信领域有着广泛的应用,如数据码隆、数字调制、同步检测等;在数字领域,数字锁相环主要应用于数字信号处理、频谱分析、信噪比提高等方面;在电子仪器领域,数字锁相环可以被应用于测量领域、噪声分析、频率合成等方面。
五、基于FPGA的数字锁相环的设计数字锁相环的设计是一项非常复杂的工作,其中需要解决的问题主要有相频检测、低通滤波、数字控制振荡器的设计和时钟输出等方面。
在基于FPGA的数字锁相环设计过程中,可以采用很多不同的方法和技术来解决这些问题。
在数字锁相环的设计中,相频检测器是极其关键的部分,其主要功能是检测输入信号与数字控制振荡器的频率是否匹配。
其中,相频检测器常用的方式有两种:一是通过比较输入信号和数字控制振荡器的频率来实现;二是通过测量输入信号和数字控制振荡器的相位差来实现。
基于Verilog的全数字锁相环的设计
使 用 相 同 的 系 统 时 钟 信 号 . 数 字 锁 相 环 根 据 输 入 信 号 和 时 钟 输 出 信 号 之 间 的相 位 误 差 信 号 送 人 鉴 相 器 , 全 并 对 相 对 误 差 进 行 平 滑 滤 波 , K变 模 计 数 器 产 生 控 制 信 号 , 控 振 荡 器 根 据 控 制 信 号 不 断 反 馈 调 节 , 由 数 使
第2 5卷
图2 全 数 字 锁 相 环 实 现 的 框 图
3 全 数 字锁 相环 的实 现
( )数 字鉴 相 器 的 设 计 1
本 设 计 选 用 异 或 门数 字 鉴 相 器 . 或 门 数 字 鉴 相 器 的 主 要 任 务 是 用 来 比较 输 入 信 号 和 输 出 信 号 之 间 异 的 相 位 差 qs b e:  ̄fi I n—qf u 并 输 出一 个 误 差 信 号 s ) S o t, e作 为 K 变 模 可 逆 计 数 器 的计 数 方 向 控 制 信 号 . 环
另 外 两 个 DAC模 块 把 输 入 信 号 f i n和 输 出 信 号 lu 转 换 成 模 拟 波 形 来 观 察 验 证 . 次 全 数 字 锁 相 环 ot 本
的框 图 如 下 :
・
5 0・
刘 永 勤 : 于 V ro 全 数 字锁 相 环 的 设 计 基 eig的 l
刘 永 勤
( 南 师 范 学 院 物 理 与 电子 工 程 系 , 西 渭 南 7 40 ) 渭 陕 10 0 摘 要 : 章 介 绍 了 全 数 字 锁 相 环 的 基 本 结 构 和 工 作 原 理 , 出 了 一 种 基 于 vro 文 提 eig的全 数 字 锁 相 环 的设 计 方 法 , 利 l 并
基于Verilog的全数字锁相环的设计
基于Verilog的全数字锁相环的设计
刘永勤
【期刊名称】《渭南师范学院学报》
【年(卷),期】2010(025)005
【摘要】文章介绍了全数字锁相环的基本结构和工作原理,提出了一种基于verilog的全数字锁相环的设计方法,并利用QuartusII6.0软件对设计进行了时序仿真.
【总页数】3页(P49-51)
【作者】刘永勤
【作者单位】渭南师范学院,物理与电子工程系,陕西,渭南,714000
【正文语种】中文
【中图分类】TP311.1
【相关文献】
1.基于流水线技术的全数字锁相环设计 [J], 田帆;杨檬玮;单长虹
2.基于Verilog-A的两点调制锁相环综合实验设计 [J], 周冉冉;王永
3.基于FPGA的全数字延时锁相环的设计 [J], 李锐; 田帆; 邓贤君; 单长虹
4.基于Verilog-A的两点调制锁相环综合实验设计 [J], 周冉冉[1];王永[1]
5.基于自适应环路滤波算法的全数字锁相环设计与分析 [J], 周郭飞;杨宏;杨延峰因版权原因,仅展示原文概要,查看原文内容请购买。
全数字锁相环原理及应用
全数字锁相环原理及应用2011年11月18日摘要:锁相环是一种相位负反馈系统,它能够有效跟踪输入信号的相位。
随着数字集成电路的发展,全数字锁相环也得到了飞速的发展。
由于锁相精度和锁定时间这组矛盾的存在使得传统的全数字锁相环很难在保证锁定时间的情况下保证锁定精度。
鉴于此,本文对一些新结构的全数字锁相环展开研究,并用VHDL语言编程,利用FPGA仿真。
为解决软件无线电应用扩展到射频,即射频模块软件可配置的问题和CMOS工艺中由于电压裕度低、数字开关噪声大等因素,将射频和数字电路集成在一个系统中设计难度大的问题,本文尝试提出数字射频的新思路。
全数字锁相环是数字射频中最重要的模块之一,它不仅是发射机实现软件可配置通用调制器的基础,还是为接收机提供宽调频范围本振信号的基础。
本文针对数字射频中的数字锁相环的系统特性以及其各重要模块进行了研究。
关键词:全数字锁相环;锁定时间;锁定精度;PID控制;自动变模控制;数控振荡器;时间数字转换器;数字环路滤波器;FPGA;Principle and Application of all-digital phase-locked loopAbstract: Phase-Locked Loop is a negative feedback system that can effectively track the input signal’s phase. With the development of digital integrated circuits, all-digital phase-locked loop has also been rapidly developed. Because of the contradiction between the existence of phase-locked precision and phase-locked time, it makes the traditional all-digital phase-locked loop difficult to ensure the lock time meanwhile as well as phase-locked precision. So some new structures of all-digital phase-locked loop are analyzed in this paper and programmed in VHDL language with simulation under FPGA.In order to extend the application from radio to RF, which including RF modules software configurable problems and the difficulty to integrate RF and digital circuit in one system due to some factors contain the low voltage and large noise of the digital switches etc. This paper will try to put out a new thought for digital RF. All-digital phase-locked loop is one of the most important modules in digital RF. It is not only the foundation of transmitter which can be realized by software configurable general modulator, but also the foundation of receiver which can be provided wide range of local vibration signal. This paper particularly makes a study of the system character of tall-digital phase-locked loop and its vital modules.Keywords: ADPLL; Locked time; Locked precision; PID control; Auto modulus control; DCO;TDC; Digital Loop Filter; 1. 引言锁相环路是一种反馈控制电路,锁相环的英文全称是Phase-Locked Loop,简称PLL。
单片机锁相环代码
单片机锁相环代码以下是一个简单的单片机锁相环(PLL)的代码示例。
请注意,这是一个非常基本的示例,您可能需要根据您的特定硬件和需求进行修改。
这个示例假设你使用的是一种常见的微控制器,如Arduino 或STM32,并且有一个函数可以读取某种类型的时钟源(例如,石英晶体振荡器或其他时钟源)。
c#include <stdint.h>// 假设你有一个函数来读取时钟源的频率uint32_t read_clock_source() {// 在这里实现读取时钟源频率的代码// 返回值应为时钟源的频率(以Hz为单位)return 12345678; // 例如,返回12,345,678 Hz}// 假设你有一个函数来设置输出频率void set_output_frequency(uint32_t frequency) {// 在这里实现设置输出频率的代码// 参数应为所需的输出频率(以Hz为单位)}int main() {// 初始化锁相环参数uint32_t reference_frequency = read_clock_source(); // 读取参考频率uint32_t output_frequency = 1000000; // 设置输出频率为1 MHz// 锁定输出频率到参考频率while (1) {uint32_t error = reference_frequency - output_frequency; // 计算误差if (error > 1000) { // 如果误差大于1 kHzoutput_frequency += 1; // 增加输出频率} else if (error < -1000) { // 如果误差小于-1 kHzoutput_frequency -= 1; // 减少输出频率} else {break; // 如果误差在±1 kHz范围内,锁定输出频率到参考频率}set_output_frequency(output_frequency); // 设置新的输出频率}return 0;}请注意,这个示例代码非常基础,并且没有包括许多可能需要的功能,例如抗抖动、平滑的频率调整等。
TD-LTEΣ-ΔverilogAverilog锁相环采样保持硕士论文讲解
应用于TD-LTE系统的Σ-Δ分数频率综合器研究【摘要】频率综合器是射频前端电路中的关键模块之一,其作用是为无线收发机提供精确、易于控制、高频谱纯度的本振信号。
它的设计面临小面积、高性能、高集成度和低功耗的挑战。
针对频率综合器,本论文主要完成了以下工作:采用了一套模块级锁相环系统的电压域verilogA/verilog模型。
这种分析方式使得本文能分析和预测各个噪声源对锁相环系统的影响,有助于提高仿真速度和尽早深入的了解电路特性并在系统级加以优化,而且还方便在设计后期对各个模块进行单独的分析与仿真。
基于TSMC 0.13μm CMOS工艺,为TD-LTE终端射频芯片设计了一款Σ-Δ分数型频率综合器。
论文针对宽频带、低相位噪声、低杂散、快速锁定等技术难点,采用了创新性的解决方案。
基于TSMC 0.13μm CMOS工艺,为TD-LTE终端射频芯片设计了一款采样保持结构Σ-Δ分数型频率综合器。
并针对面积、集成度等难点采用了一些解决方案。
更多还原【Abstract】 Freqency synthesizer is a key block in thewireless transceiver, which provides a precise, programmable and clean local oscillator signal. There exist many challenges like small layout area, high performance, high integration level and low power consumption. The principal contributions of this dissertation are described in the following.A set of behavioral voltage-domain verilogA/verilog models are used inaΣ-Δfractional-n frequency synthesizer system. This allows us to analyse and predict the n... 更多还原【关键词】TD-LTE;Σ-Δ;verilogA/verilog;锁相环;采样保持;【Key words】TD-LTE;Σ-Δ;verilogA/verilog;PLL;S/H;摘要3-4Abstract 4第一章绪论8-101.1 本论文的研究背景和意义81.2 本论文的主要贡献81.3 本论文的组织结构8-10第二章锁相环频率综合器的工作原理和系统参数分析10-202.1 基本工作原理102.2 核心组成电路10-142.2.1 压控振荡器10-112.2.2 分频器11-122.2.3 鉴相器12-132.2.4 电荷泵132.2.5 环路滤波器132.2.6 ∑-△调制器13-142.3 性能参数14-172.3.1 频率范围142.3.2 频率分辨率142.3.3 频率切换时间142.3.4 频谱纯度14-172.3.4.1 相位噪声14-152.3.4.2 抖动15-162.3.4.3 杂散16-172.4 环路噪声分析17-192.5 小结19-20第三章Σ-Δ分数锁相环频率综合器的行为级建模和仿真20-263.1 抖动和杂散20-213.2 混合仿真21-223.3 基于veriogA/verilog 的电路模型设计22-243.3.1 频率振荡器223.3.2 鉴相鉴频器223.3.3 电荷泵22-233.3.4 压控振荡器和分频器233.3.5 Σ-Δ调制器23-243.3.6 控制信号testbench 243.3.7 处理结果用matlab 代码243.4 仿真结果24-253.5 小结25-26第四章基于TD-LTE 应用的CMOS Σ-Δ分数频率综合器26-474.1 TD-LTE 简介264.2 频率综合器设计指标26-274.3 技术难点和解决方案27-284.4 核心组成电路28-414.4.1 多频带LC 压控振荡器28-304.4.2 多模分数分频器N/N+0.5 30-334.4.3 高线性度鉴相鉴频器及电荷泵电路33-374.4.4 参数可调环路滤波器37-404.4.5 ∑-△调制器40-414.4.6 自动频率调谐电路414.5 频率综合器整体仿真结果和版图41-424.6 频率综合器整体测试结果42-464.7 小结46-47第五章基于TD-LTE 的Σ-Δ采样保持分数频率综合器47-575.1 系统结构47-485.2 基本原理48-505.3 核心组成电路50-555.3.1 采样保持核心电路505.3.2 电流源偏置50-515.3.3 控制信号产生电路51-535.3.4 D 触发器53-555.4 采样保持频率综合器仿真结果和版图55-565.5 小结56-57第六章结论57-596.1 总结57-586.2 研究展望58-59 致谢59-60参考文献。
一种锁定相位编程可调全数字锁相环设计
一种锁定相位编程可调全数字锁相环设计一种锁定相位编程可调全数字锁相环设计1 引言锁相技术在信号处理、调制解调、时钟同步、倍频、频率综合等领域都得到了广泛的应用。
目前锁相技术的实现主要有模拟锁相环(APLL)、全数字锁相环(DPLL)、模拟数字混合锁相环与延迟锁相环(DLL)四种。
全数字锁相环(DPLL)具有精度高且不受温度和电压影响,环路带宽和中心频率编程可调等优点.得到了广泛应用。
经典全数字锁相环路由数字鉴相器、K模可逆计数器、脉冲加减控制电路和N分频器4部分组成。
在输入信号频率稳定条件下,锁相环锁定时输出信号与输入信号正交。
在通信和其他很多应用领域,不仅需要输出信号与输入信号保持正交关系,有时也需要他们保持某些特定的相位差。
本文在经典结构基础上稍做改进,提出了一种输出信号与输入信号的锁定相位编程可调的全数字锁相环路的设计。
经过计算机仿真分析、FPGA实现及板级系统实验,证明了系统的可行性和可靠性。
2 经典数字锁相环路结构及工作原理图1示出了采用异或门鉴相器的经典数字锁相环路的结构框图。
各个模块的结构和功能如下:2.1 异或门鉴相器异或门鉴相器将锁相环路输入信号Fin与输出信号Fout做减法,输出相位差Se作为K模可逆计数器的计数方向信号。
当环路锁定时输出信号与输入信号稳定正交,Se是一占空比为50%的方波信号。
2.2 K模可逆计数器K模可逆计数器产生进位和借位脉冲并起到环路滤波的作用。
他由系统时钟Clk(频率M?0)控制对异或门鉴相器输出的相位差信号Se进行采样计数,当Se为低电平时做加计数,计数值达到预定模值K时输出进位脉冲inc同时计数器回零;当Se为高电平时做减计数,计数值为零时输出借位脉冲dec同时计数器置K。
当环路锁定Se是一占空比为50%的方波信号时,交替输出进位和借位脉冲。
计数器模值K的大小决定了环路进入锁定的时间,K值越大环路锁定时间越长。
2.3 脉冲加减控制器和N分频器脉冲加减控制器实现数字压控振荡器的功能。
verilog 倍频代码
verilog 倍频代码从事半导体设计或数字电路设计的工程师可能会经常遇到需要进行倍频操作的情况。
在很多应用中,我们需要将输入时钟信号的频率提高到原来的倍数,这样可以满足更高的工作要求。
在本篇文章中,我将详细介绍如何使用Verilog语言编写倍频代码,以及每一步的具体实现过程。
在开始之前,我们先来了解一下什么是倍频。
倍频是指将输入信号频率的倍数提高,例如将一个1MHz的时钟信号倍频为2MHz或更高频率。
实现倍频操作的核心是使用锁相环(PLL)或者数字锁相环(DLL)。
在本篇文章中,我们将以PLL为例进行讲解。
第一步,我们需要定义输入和输出信号的数据类型和位宽。
在这个例子中,我们假设输入信号的数据类型为时钟信号,位宽为1位,而输出信号的数据类型也为时钟信号,位宽为1位。
我们可以使用Verilog中的reg类型来定义这两个信号的数据类型,使用parameter来定义位宽。
代码示例如下:verilogmodule frequency_multiplier (input wire CLK, 输入时钟信号output wire CLK_OUT 输出时钟信号);reg CLK_DIV; 倍频时钟信号parameter DIV_FACTOR = 2; 倍频因子TODO: 实现PLL代码endmodule第二步,我们需要编写PLL代码。
PLL由相位频率检测器(PFD)、锁相环滤波器(LPF)、倍频分频器(DIV)和振荡器(VCO)组成。
在本例中,我们使用一个简化的PLL结构,其中只包含一个倍频分频器。
代码示例如下:verilog锁相环中的倍频分频器always (posedge CLK)CLK_DIV <= !CLK_DIV; 输入信号变化时,输出信号取反实现倍频操作输出时钟信号assign CLK_OUT = CLK_DIV;第三步,我们需要进行仿真测试。
我们可以使用Verilog中的testbench 文件来验证倍频代码的正确性。
一种可编程的全数字锁相环路的实现
摘要:介绍了一种基于fpga可编程技术实现的用于无线通信实验系统的全数字锁相环路。
详细叙述了其工作原理、工作性能、电路实现和仿真结果。
关键词:fpga 全数字锁相环路 vhdl语言锁相环路已在模拟和数字通信及无线电电子学等各个领域中得到了极为广泛的应用,特别是在数字通信的调制解调和位同步中常常要用到各种各样的锁相环。
锁相就是利用输入信号与输出信号之间的相位误差自动调节输出相位使之与输入相位一致,或保持一个很小的相位差。
最初的锁相环全部由模拟电路组成,随着大规模、超高速数字集成电路的发展及计算机的普遍应用,出现了全数字锁相环路。
所谓全数字锁相环路,就是环路部件全部数字化,采用数字鉴相器(dpd)、数字环路滤波器(dlf)、数控振荡器(dco)构成锁相环路。
在用altera公司的epfl0k10tcl44-3芯片设计一种无线通信实验系统的fsk、dpsk、qam调制解调器时,利用剩余的10%fpga资源设计出了一种可编程全数字锁相环路,它成功地为该通信实验系统的调制解调器提供了64khz、56khz和16khz三种精确、稳定的时钟信号。
1 全数字锁相环的电路设计1.1 dpll工作原理分析所设计的全数字锁相环路的结构如图1所示。
其中,数字鉴相器由异或门exor构成,数字环路滤波器由变模可逆计数器q构成,数控振荡器由加/减脉冲控制器i/d和模n计数器组成。
可逆计数器和加/减脉冲控制器的时钟频率分别是mf0和2nf0。
这里f0是环路的中心频率,为64khz。
mf0等于14336khz,由晶振电路产生,它经模h计数器分频后得到2nf0的时钟频率。
异或门鉴相器用于比较输入信号in64与数控振荡器输出信号out64的相位差,其输出信号ud作为可逆计数器的计数方向控制信号。
当ud为低电平时,可逆计数器作“加”计数;反之,可逆计数器作“减”计数。
当环路锁定时,in64和out64正交,鉴相器的输出信号ud为50%占空比的方波。
一种基于FPGA的全数字锁相环设计
一种基于FPGA的全数字锁相环设计陈华君;杨涛【摘要】给出了使用verilog HDL语言对锁相环进行基于FPGA的全数字系统设计,以及对其性能进行分析和计算机仿真的具体方法。
该方法采用综合仿真工具Quartus Ⅱ8.0来对数字锁相环进行输入设计、功能时序仿真及器件编程。
仿真结果表明:该方法可通过在传统数字锁相环基本结构的基础上增加自动变模控制模块来有效解决缩短捕捉时间和减小同步误差之间的矛盾。
%A DPLL based on FPGA by using verilog HDL language is introduced for analyzing the system perfor mance and computer simulation. A comprehensive simulation tool Quartus Ⅱ 8.0. was used to perform input, function al and timing simulation and device programming for digital phase-locked loop. Simulation results show that the automat ic variable module should be added to the traditional digital PLL to shorten the capture time and reduce the conflict a mong the synchronization error.【期刊名称】《物联网技术》【年(卷),期】2011(001)010【总页数】4页(P76-78,81)【关键词】FPGA;verilogHDL;全数字锁相环(DPLL);自动变模【作者】陈华君;杨涛【作者单位】电子科技大学,四川成都611731;电子科技大学,四川成都611731【正文语种】中文【中图分类】TN914.30 引言数字锁相环中的数字环路滤波器是由模数为K的可逆计数器构成。
采用VHDL设计的全数字锁相环电路设计
采用VHDL设计的全数字锁相环电路设计叙述了全数字锁相环的工作原理,提出了应用VHDL 技术设计全数字锁相环的方法,并用复杂可编程逻辑器件CPLD 予以实现,给出了系统主要模块的设计过程和仿真结果。
0 引言全数字锁相环(DPLL) 由于避免了模拟锁相环存在的温度漂移和易受电压变化影响等缺点。
从而具备可靠性高、工作稳定、调节方便等优点。
在调制解调、频率合成、FM立体声解码、图像处理等各个方面得到广泛的应用。
随着电子设计自动化(EDA) 技术的发展,采用大规模可编程逻辑器件(如CPLD 或FPGA) 和VHDL 语言来设计专用芯片ASIC 和数字系统,而且可以把整个系统集成到一个芯片中,实现系统SOC ,构成片内锁相环。
下面介绍采用VHDL技术设计DPLL 的一种方案。
1 DPLL 的基本结构全数字锁相环结构框图如图1 所示, 由数字鉴相器、数字环路滤波器和数控振荡器3 部分组成。
'0') ;end if ;elseif cq > 0 then cq '0') ;end if ;end if ;end process ;process (en ,j ,cq ,k)beginif en = '1'thenif j = '0'thenf cq = k then cao1图4 变模可逆计数器(取k = 24) 的仿真波形图2. 3 数控振荡器的设计数控振荡器由加/ 减脉冲控制器和除N 计数器组成的。
加/ 减脉冲控制器其实是一个增量—减量计数器式DCO。
它和环路滤波器连用。
如果在环路滤波器无进位、错位的时候,加/ 减脉冲控制器对时钟2NFo 进行二分频。
当加/ 减脉冲控制的增量输入端( I = 1) 输入一个进位脉冲时, 输出脉冲中通过该计数器内部加上一个时钟脉冲。
反之,当加/ 减脉冲控制的减量输入端( D = 1) 时输入一个借位脉冲输出脉冲中就减去一个时钟脉冲。
数字costas环verilog设计代码
//数字costas环,设计使用在GPS信号的跟踪部分//环路噪声带宽Bl=160Hz//修改时间:2016/6/6//modelsim仿真通过//diff_data有正有负,修正pre_uct为有符号数module costas(input clk, rst,input track_block, //阻塞环路变化,避免初始uct过大input sink_valid,input signed [7:0] sink_data,input [21:0] phi_inc, //捕获输入的精细频率output reg costas_lock, //costas环的锁定信号output reg signed [7:0] sine_value, //输出同步正弦载波output [9:0] mt //输出解调后的信息);//-------------------------------------------wire out_valid;wire [15:0] fsin_o, fcos_o;reg signed [17:0] uct;//-------------------------------------------NCO部分//-------------------------------------------8位数据宽度,16位频率调制宽度costas_nco costas_nco0(.phi_inc_i(phi_inc), //f0=1557kHz.clk(clk),.reset_n(rst),.clken(1'b1),.freq_mod_i(uct), //频率控制字.fsin_o(fsin_o),.fcos_o(fcos_o),.out_valid(out_valid));//-------------------------------------------NCO的输出仅在out_valid有效时有效//-------------------------------------------做一级缓存,将不平滑的数据平滑reg signed [7:0] cosine_value;//-------------------------------------------将16位的数据截断为8位always @(posedge clk or negedge rst)if(!rst)beginsine_value <= 0;cosine_value <= 0;endelse if(out_valid)begincosine_value <= fcos_o[15:8];sine_value <= fsin_o[15:8];end//-------------------------------------------wire signed [15:0] mul_if, mul_qf;//-------------------------------------------计算两个乘法assign mul_if = sink_data * sine_value;assign mul_qf = sink_data * cosine_value;//-------------------------------------------reg mul_valid;reg signed [7:0] mul_i, mul_q;//-------------------------------------------always @(posedge clk or negedge rst)if(!rst)beginmul_valid <= 0;mul_i <= 0;mul_q <= 0;endelse if(sink_valid)beginmul_valid <= 1;mul_i <= mul_if[14:7];mul_q <= mul_qf[14:7];endelsemul_valid <= 0;//-------------------------------------------wire lpf_valid;wire signed [7:0] lpf_i, lpf_q;//-------------------------------------------低通滤波器滤除2倍频分量costas_lpf costas_lpf_i //I路(.clk(clk),.reset_n(rst),.ast_sink_data(mul_i),.ast_sink_valid(mul_valid),.ast_source_ready(1'b1),.ast_sink_error(2'b00),.ast_source_data(lpf_i),.ast_sink_ready(), //NC.ast_source_valid(lpf_valid),.ast_source_error() //NC);//-------------------------------------------costas_lpf costas_lpf_q //Q路(.clk(clk),.reset_n(rst),.ast_sink_data(mul_q),.ast_sink_valid(mul_valid),.ast_source_ready(1'b1),.ast_sink_error(2'b00),.ast_source_data(lpf_q),.ast_sink_ready(), //NC.ast_source_valid(), //NC.ast_source_error() //NC);//-------------------------------------------定义积分清洗器//-------------------------------------------起到滤波和降低采样率的作用//-------------------------------------------Dr=200reg [7:0] yt_cnt;reg signed [15:0] yit_full, yqt_full;//-------------------------------------------always @(posedge clk or negedge rst)if(!rst)beginyt_cnt <= 0;yit_full <= 0;yqt_full <= 0;endelse if(lpf_valid)beginif(yt_cnt == 200 - 1) //积分清零beginyt_cnt <= 0;yit_full <= 0;yqt_full <= 0;endelsebeginyt_cnt <= yt_cnt + 1'b1;yit_full <= yit_full + lpf_i;yqt_full <= yqt_full + lpf_q;endend//-------------------------------------------reg yt_valid;reg signed [9:0] yit, yqt;//-------------------------------------------产生积分清洗器的输出有效信号always @(posedge clk or negedge rst)if(!rst)beginyt_valid <= 0;yit <= 0;yqt <= 0;endelse if((lpf_valid) &&(yt_cnt == 200 - 2))beginyt_valid <= 1;yit <= yit_full[15:6]; //截断积分清洗器得到10位的输出yqt <= yqt_full[15:6];endelseyt_valid <= 0;//-------------------------------------------输出的数据即为同向支路输出assign mt = yit;//-------------------------------------------wire signed [19:0] udt_full;//-------------------------------------------使用标准乘法器作为鉴相器assign udt_full = yit * yqt;//-------------------------------------------reg udt_valid;reg [17:0] udt;//-------------------------------------------always @(posedge clk or negedge rst)if(!rst)beginudt_valid <= 0;udt <= 0;endelse if(yt_valid)beginudt_valid <= 1;udt <= udt_full[18:1];endelseudt_valid <= 0;//---------------------------------------------------------定义环路滤波器//-------------------------------------------K=0.3068//-------------------------------------------C1=2^-4 - 2^-7//-------------------------------------------C2=2^-11//-------------------------------------------C1,C2根据需求可以适当向右移位reg cxudt_valid;reg signed [17:0] c1xudt, c2xudt;//-------------------------------------------always @(posedge clk or negedge rst) //LF的第一级if(!rst)begincxudt_valid <= 0;c1xudt <= 0;c2xudt <= 0;endelse if(udt_valid)begincxudt_valid <= 1;c1xudt <= {{5{udt[17]}}, udt[17:5]} - {{8{udt[17]}}, udt[17:8]};c2xudt <= {{12{udt[17]}}, udt[17:12]};endelsecxudt_valid <= 0;//-------------------------------------------reg sum_cnt; //计数每4个valid更新一次uct reg uct_valid;reg signed [17:0] loop_sum;//-------------------------------------------always @(posedge clk or negedge rst) //LF的第二级if(!rst)beginuct_valid <= 0;sum_cnt <= 0;loop_sum <= 0;uct <= 0;endelse if(cxudt_valid)beginsum_cnt <= sum_cnt + 1'b1;if(track_block) //参数载入装填阻塞环路变化beginloop_sum <= 0;uct <= 0;endelse //正常的捕获跟踪beginloop_sum <= loop_sum + c2xudt; //loop_sum每次都更新if(sum_cnt == 1) //每2个clks更新一次uctbeginuct_valid <= 1;uct <= c1xudt + loop_sum;endendendelseuct_valid <= 0;//--------------------------------------------------------------END//--------------------------------------------------------------BEGIN//--------------------------------------------------------------以下为costas环锁定的判断//--------------------------------------------------------------通过判断uct的变化幅度来判定reg diff_valid;reg signed [17:0] pre_uct;reg [17:0] diff_data; //uct的波动幅度,始终为正值//-------------------------------------------计算uct的波动值,即当前值与上一个值得差值always @(posedge clk or negedge rst)if(!rst)begindiff_valid <= 0;pre_uct <= 0;diff_data <= 0;endelse if(uct_valid)begindiff_valid <= 1;pre_uct <= uct;if(uct > pre_uct) //计算波动幅度diff_data <= uct - pre_uct;elsediff_data <= pre_uct - uct;endelsediff_valid <= 0;//-------------------------------------------reg diffsgl_valid, diffsgl_data;//-------------------------------------------判断是否超过预期的范围//-------------------------------------------uct波动超过预期的范围时diffsgl_data=0always @(posedge clk or negedge rst)if(!rst)begindiffsgl_valid <= 0;diffsgl_data <= 0;endelse if(diff_valid)begindiffsgl_valid <= 1;if(diff_data <= 20) //不稳定超过大约10Hz diffsgl_data <= 1; //uct变化在允许的范围内elsediffsgl_data <= 0;endelsediffsgl_valid <= 0;//-------------------------------------------reg stable_valid, stable_data;reg [3:0] diff_cnt; //计数多少次差值电压reg [3:0] stable_cnt; //计数多少次是稳定的//-------------------------------------------使用16次数据对稳定性进行一次判断always @(posedge clk or negedge rst)if(!rst)beginstable_valid <= 0;stable_data <= 0;diff_cnt <= 0;stable_cnt <= 0;endelse if(diffsgl_valid)begindiff_cnt <= diff_cnt + 1'b1;if(diff_cnt == 15) //对这16次数据进行判断beginstable_valid <= 1;stable_cnt <= 0; //稳定次数清零if(stable_cnt >= 13)stable_data <= 1; //这8次的数据总体稳定elsestable_data <= 0;endelse //正常计数beginif(diffsgl_data) //稳定次数累加stable_cnt <= stable_cnt + 1'b1;endendelsestable_valid <= 0;//-------------------------------------------使用状态机来判断costas环路是否锁定//-------------------------------------------使用状态机的目的是为了避免数据跳变时被判定为失锁//-------------------------------------------costas环稳定性的判断比不稳定的判断更加严格parameter State_UnLock=1'b0, State_Lock=1'b1;//-------------------------------------------reg lock_state;reg [2:0] lock_cnt;//-------------------------------------------always @(posedge clk or negedge rst)if(!rst)begincostas_lock <= 0;lock_state <= 0;lock_cnt <= 0;endelse if(stable_valid)case (lock_state)State_UnLock: //costas环处于失锁的状态begincostas_lock <= 0;if(stable_data) //8位数据打包稳定beginif(lock_cnt == 3) //连续N组8位的数据稳定beginlock_state <= State_Lock; //进入锁定状态lock_cnt <= 0;endelselock_cnt <= lock_cnt + 1'b1;endelselock_cnt <= 0; //稳定次数计数清零endState_Lock: //costas环处于锁定状态begincostas_lock <= 1;if(!stable_data) //8位的数据不稳定beginif(lock_cnt == 2) //连续M组8位的数据不稳定beginlock_state <= State_UnLock; //进入失锁状态lock_cnt <= 0;endelselock_cnt <= lock_cnt + 1'b1;endelselock_cnt <= 0;endendcase//--------------------------------------------------------------END//--------------------------------------------------------------以上为costas环稳定性判断endmodule。
全数字锁相环的设计
全数字锁相环的设计锁相环(PLL)技术在众多领域得到了广泛的应用。
如信号处理,调制解调,时钟同步,倍频,频率综合等都应用到了锁相环技术。
传统的锁相环由模拟电路实现,而全数字锁相环(DPL L)与传统的模拟电路实现的PLL相比,具有精度高且不受温度和电压影响,环路带宽和中心频率编程可调,易于构建高阶锁相环等优点,并且应用在数字系统中时,不需A/D及D/ A转换。
随着通讯技术、集成电路技术的飞速发展和系统芯片(SoC)的深入研究,DPLL必然会在其中得到更为广泛的应用。
这里介绍一种采用VERILOG硬件描述语言设计DPLL的方案。
DPLL结构及工作原理一阶DPLL的基本结构如图1所示。
主要由鉴相器、K变模可逆计数器、脉冲加减电路和除N计数器四部分构成。
K变模计数器和脉冲加减电路的时钟分别为Mfc和2Nfc。
这里fc是环路中心频率,一般情况下M和N都是2的整数幂。
本设计中两个时钟使用相同的系统时钟信号。
图1 数字锁相环基本结构图鉴相器常用的鉴相器有两种类型:异或门(XOR)鉴相器和边沿控制鉴相器(ECPD),本设计中采用异或门(XOR)鉴相器。
异或门鉴相器比较输入信号Fin相位和输出信号Fout相位之间的相位差Фe=Фin-Фout,并输出误差信号Se作为K变模可逆计数器的计数方向信号。
环路锁定时,Se为一占空比50%的方波,此时的绝对相为差为90°。
因此异或门鉴相器相位差极限为±90°。
异或门鉴相器工作波形如图2所示。
图2 异或门鉴相器在环路锁定及极限相位差下的波形K变模可逆计数器K变模可逆计数器消除了鉴相器输出的相位差信号Se中的高频成分,保证环路的性能稳定。
K变模可逆计数器根据相差信号Se来进行加减运算。
当Se为低电平时,计数器进行加运算,如果相加的结果达到预设的模值,则输出一个进位脉冲信号CARRY给脉冲加减电路;当Se为高电平时,计数器进行减运算,如果结果为零,则输出一个借位脉冲信号BORROW给脉冲加减电路。
verilog pll 模型 写法
Verilog PLL 模型写法一、介绍Verilog 是一种硬件描述语言,广泛应用于数字电路设计领域。
PLL (Phase-Locked Loop) 是一种常用的数字电路,用于将输入信号的相位、频率和/或幅度锁定到一个参考信号。
本文将介绍如何使用Verilog 编写 PLL 模型。
二、PLL 基本原理PLL 由相位比较器、数字控制环滤波器、振荡器和反馈网络组成。
其基本工作原理为通过比较输入信号和反馈信号的相位差,然后根据相位差调整振荡器的频率以使两者达到同步。
三、Verilog 实现 PLL1. 定义模块我们需要定义一个模块来描述 PLL。
模块包括输入端口和输出端口,以及内部变量和信号。
```verilogmodule PLL (input wire clk_in, // 输入时钟信号input wire rst_n, // 复位信号output reg clk_out // 输出时钟信号);```2. 参数设置在模块内部,我们需要设置一些参数,例如参考频率、分频比、锁定范围等。
```verilogparameter REF_FREQ = xxx; // 参考频率parameter DIV_RATIO = 10; // 分频比parameter LOCK_RANGE = 100; // 锁定范围```3. 相位比较器相位比较器用于比较输入信号和反馈信号的相位差,然后输出一个控制信号。
在 Verilog 中,可以使用 always 块和 posedge 关键字来实现时序逻辑。
```verilogreg [7:0] phase_diff;always (posedge clk_in) beginif (!rst_n) beginphase_diff <= 8'b0;end else beginphase_diff <= calculate_phase_diff(); // 计算相位差endend```4. 数字控制环滤波器数字控制环滤波器用于对相位差进行滤波和放大,然后输出一个控制信号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
支持论坛发展帖出全数字锁相环的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越大,则同步建立时间长,同步精度高.反之则短,低.。