位置:51电子网 » 技术资料 » EDA/PLD

基于全数字锁相环的设计

发布时间:2008/5/28 0:00:00 访问次数:597

  本文在说明全数字锁相环的基础上,提出了一种利用fpga设计一阶全数字锁相环的方法,并给出了关键部件的rtl可综合代码,并结合本设计的一些仿真波形详细描述了数字锁相环的工作过程,最后对一些有关的问题进行了讨论。
关键词:全数字锁相环;dpll;fsk;fpga

引言

  锁相环(pll)技术在众多领域得到了广泛的应用。如信号处理,调制解调,时钟同步,倍频,频率综合等都应用到了锁相环技术。传统的锁相环由模拟电路实现,而全数字锁相环(dpll)与传统的模拟电路实现的pll相比,具有精度高且不受温度和电压影响,环路带宽和中心频率编程可调,易于构建高阶锁相环等优点,并且应用在数字系统中时,不需a/d及d/a转换。随着通讯技术、集成电路技术的飞速发展和系统芯片(soc)的深入研究,dpll必然会在其中得到更为广泛的应用。

  这里介绍一种采用verilog硬件描述语言设计dpll的方案。

dpll结构及工作原理

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

鉴相器

  常用的鉴相器有两种类型:异或门(xor)鉴相器和边沿控制鉴相器(ecpd),本设计中采用异或门(xor)鉴相器。异或门鉴相器比较输入信号fin相位和输出信号fout相位之间的相位差фe=фin-фout,并输出误差信号se作为k变模可逆计数器的计数方向信号。环路锁定时,se为一占空比50%的方波,此时的绝对相为差为90°。因此异或门鉴相器相位差极限为±90°。

k变模可逆计数器

  k变模可逆计数器消除了鉴相器输出的相位差信号se中的高频成分,保证环路的性能稳定。k变模可逆计数器根据相差信号se来进行加减运算。当se为低电平时,计数器进行加运算,如果相加的结果达到预设的模值,则输出一个进位脉冲信号carry给脉冲加减电路;当se为高电平时,计数器进行减运算,如果结果为零,则输出一个借位脉冲信号borrow给脉冲加减电路。

脉冲加减电路

  脉冲加减电路实现了对输入信号频率和相位的跟踪和调整,最终使输出信号锁定在输入信号的频率和信号上。

除n计数器

  除n计数器对脉冲加减电路的输出idout再进行n分频,得到整个环路的输出信号fout。同时,因为fc=idclock/2n,因此通过改变分频值n可以得到不同的环路中心频率fc。

dpll部件的设计实现

  了解了dpll的工作原理,我们就可以据此对dpll的各部件进行设计。dpll的四个主要部件中,异或门鉴相器和除n计数器的设计比较简单:异或门鉴相器就是一个异或门;除n计数器则是一个简单的n分频器。下面主要介绍k变模可逆计数器和脉冲加减电路的设计实现。

k变模可逆计数器的设计实现

  k变模可逆计数器模块中使用了一个可逆计数器count,当鉴相器的输出信号dnup为低时,进行加法运算,达到预设模值则输出进位脉冲carry;为高时,进行减法运算,为零时,输出借位脉冲borrow。count的模值ktop由输入信号kmode预设,一般为2的整数幂,这里模值的变化范围是23-29。模值的大小决定了dpll的跟踪步长,模值越大,跟踪步长越小,锁定时的相位误差越小,但捕获时间越长;模值越小,跟踪步长越大,锁定时的相位误差越大,但捕获时间越短。

k变模可逆计数器的verilog设计代码如下(其中作了部分注释,用斜体表示):
module kcounter(kclock,reset,dnup,enable, kmode,carry,borrow);
input kclock; /*系统时钟信号*/
input reset; /*全局复位信号*/
input dnup; /*鉴相器输出的加减控制信号*/
input enable; /*可逆计数器计数允许信号*/
input [2:0]kmode; /*计数器模值设置信号*/
output carry; /*进位脉冲输出信号*/
output borrow; /*借位脉冲输出信号*/
reg [8:0]count; /*可逆计数器*/
reg [8:0]ktop; /*预设模值寄存器*/
/*根据计数器模值设置信号kmode来设置预设模值寄存器的值*/
always @(kmode)
begin
case(kmode)
3'b001:ktop<=7;
3'b010:ktop<=15;
3'b011:ktop<=31;
3'b100:ktop<=63;
3'b101:ktop<=127;
3'b110:ktop<=255;
3'b111:ktop<=511;
default:ktop<=15;
endcase
end
/*根据鉴相器输出的加减控制信号dnup进行可逆计数器的加减运算*/
always @(posedge kclock or posedge reset)
begin
if(reset)
count<=0;
else if(enable)
begin
if(!dnup)
begin
if(count==ktop)
count<=0;
else
count<=count+1;
end
else
begin
if(count==0)
count<=ktop;
else
count<=count-1;
end
end
end
/*输出进位脉冲carry和借位脉冲borrow*/
assign carry=enable&(!

  本文在说明全数字锁相环的基础上,提出了一种利用fpga设计一阶全数字锁相环的方法,并给出了关键部件的rtl可综合代码,并结合本设计的一些仿真波形详细描述了数字锁相环的工作过程,最后对一些有关的问题进行了讨论。
关键词:全数字锁相环;dpll;fsk;fpga

引言

  锁相环(pll)技术在众多领域得到了广泛的应用。如信号处理,调制解调,时钟同步,倍频,频率综合等都应用到了锁相环技术。传统的锁相环由模拟电路实现,而全数字锁相环(dpll)与传统的模拟电路实现的pll相比,具有精度高且不受温度和电压影响,环路带宽和中心频率编程可调,易于构建高阶锁相环等优点,并且应用在数字系统中时,不需a/d及d/a转换。随着通讯技术、集成电路技术的飞速发展和系统芯片(soc)的深入研究,dpll必然会在其中得到更为广泛的应用。

  这里介绍一种采用verilog硬件描述语言设计dpll的方案。

dpll结构及工作原理

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

鉴相器

  常用的鉴相器有两种类型:异或门(xor)鉴相器和边沿控制鉴相器(ecpd),本设计中采用异或门(xor)鉴相器。异或门鉴相器比较输入信号fin相位和输出信号fout相位之间的相位差фe=фin-фout,并输出误差信号se作为k变模可逆计数器的计数方向信号。环路锁定时,se为一占空比50%的方波,此时的绝对相为差为90°。因此异或门鉴相器相位差极限为±90°。

k变模可逆计数器

  k变模可逆计数器消除了鉴相器输出的相位差信号se中的高频成分,保证环路的性能稳定。k变模可逆计数器根据相差信号se来进行加减运算。当se为低电平时,计数器进行加运算,如果相加的结果达到预设的模值,则输出一个进位脉冲信号carry给脉冲加减电路;当se为高电平时,计数器进行减运算,如果结果为零,则输出一个借位脉冲信号borrow给脉冲加减电路。

脉冲加减电路

  脉冲加减电路实现了对输入信号频率和相位的跟踪和调整,最终使输出信号锁定在输入信号的频率和信号上。

除n计数器

  除n计数器对脉冲加减电路的输出idout再进行n分频,得到整个环路的输出信号fout。同时,因为fc=idclock/2n,因此通过改变分频值n可以得到不同的环路中心频率fc。

dpll部件的设计实现

  了解了dpll的工作原理,我们就可以据此对dpll的各部件进行设计。dpll的四个主要部件中,异或门鉴相器和除n计数器的设计比较简单:异或门鉴相器就是一个异或门;除n计数器则是一个简单的n分频器。下面主要介绍k变模可逆计数器和脉冲加减电路的设计实现。

k变模可逆计数器的设计实现

  k变模可逆计数器模块中使用了一个可逆计数器count,当鉴相器的输出信号dnup为低时,进行加法运算,达到预设模值则输出进位脉冲carry;为高时,进行减法运算,为零时,输出借位脉冲borrow。count的模值ktop由输入信号kmode预设,一般为2的整数幂,这里模值的变化范围是23-29。模值的大小决定了dpll的跟踪步长,模值越大,跟踪步长越小,锁定时的相位误差越小,但捕获时间越长;模值越小,跟踪步长越大,锁定时的相位误差越大,但捕获时间越短。

k变模可逆计数器的verilog设计代码如下(其中作了部分注释,用斜体表示):
module kcounter(kclock,reset,dnup,enable, kmode,carry,borrow);
input kclock; /*系统时钟信号*/
input reset; /*全局复位信号*/
input dnup; /*鉴相器输出的加减控制信号*/
input enable; /*可逆计数器计数允许信号*/
input [2:0]kmode; /*计数器模值设置信号*/
output carry; /*进位脉冲输出信号*/
output borrow; /*借位脉冲输出信号*/
reg [8:0]count; /*可逆计数器*/
reg [8:0]ktop; /*预设模值寄存器*/
/*根据计数器模值设置信号kmode来设置预设模值寄存器的值*/
always @(kmode)
begin
case(kmode)
3'b001:ktop<=7;
3'b010:ktop<=15;
3'b011:ktop<=31;
3'b100:ktop<=63;
3'b101:ktop<=127;
3'b110:ktop<=255;
3'b111:ktop<=511;
default:ktop<=15;
endcase
end
/*根据鉴相器输出的加减控制信号dnup进行可逆计数器的加减运算*/
always @(posedge kclock or posedge reset)
begin
if(reset)
count<=0;
else if(enable)
begin
if(!dnup)
begin
if(count==ktop)
count<=0;
else
count<=count+1;
end
else
begin
if(count==0)
count<=ktop;
else
count<=count-1;
end
end
end
/*输出进位脉冲carry和借位脉冲borrow*/
assign carry=enable&(!

相关IC型号

热门点击

 

推荐技术资料

声道前级设计特点
    与通常的Hi-Fi前级不同,EP9307-CRZ这台分... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!