0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用FPGA设计一阶全数字锁相环的方法

电子设计 2018-10-25 09:17 次阅读

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

引言

锁相环(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&(!dnup) &(Count==Ktop);
assign borrow=enable&dnup& (Count==0);
endmodule

脉冲加减电路的设计实现

脉冲加减电路完成环路的频率和相位调整,可以称之为数控振荡器。当没有进位/借位脉冲信号时,它把外部参考时钟进行二分频;当有进位脉冲信号CARRY时,则在输出的二分频信号中插入半个脉冲,以提高输出信号的频率;当有借位脉冲信号BORROW时,则在输出的二分频信号中减去半个脉冲,以降低输出信号的频率。VERILOG设计代码如下:
module IDCounter(IDclock,reset,inc,dec,IDout);
input IDclock; /*系统时钟信号*/
input reset; /*全局复位信号*/
input inc; /*脉冲加入信号*/
input dec; /*脉冲扣除信号*/
output IDout; /*调整后的输出信号*/
wire Q1, Qn1, Q2, Qn2, Q3, Qn3;
wire Q4, Qn4, Q5, Qn5, Q6, Qn6;
wire Q7, Qn7, Q8, Qn8, Q9, Qn9;
wire D7, D8;
FFD FFD1(IDclock, reset, inc, Q1, Qn1);
FFD FFD2(IDclock, reset, dec, Q2, Qn2);
FFD FFD3(IDclock, reset, Q1, Q3, Qn3);
FFD FFD4(IDclock, reset, Q2, Q4, Qn4);
FFD FFD5(IDclock, reset, Q3, Q5,Qn5);
FFD FFD6(IDclock, reset, Q4, Q6,Qn6);
assign D7=((Q9 & Qn1 & Q3) | (Q9 & Q5 & Qn3));
assign D8=((Qn9 & Qn2 & Q4) | (Qn9 & Q6 & Qn4));
FFD FFD7(IDclock, reset, D7, Q7, Qn7 );
FFD FFD8(IDclock, reset, D8, Q8, Qn8);
JK FFJK(IDclock, reset, Qn7, Qn8, Q9, Qn9);
assign IDout = (!Idclock)|Q9;
endmodule
其中,FFD为D触发器,JK为JK触发器。

当环路的四个主要部件全部设计完毕,我们就可以将他们连接成为一个完整的DPLL,进行仿真、综合、验证功能的正确性。

DPLL的FPGA实现

本设计中的一阶DPLL使用XILINX公司的FOUNDATION4.1软件进行设计综合,采用XILINX的SPARTAN2系列的XC2S15 FPGA器件实现,并使用Modelsim5.5d软件进行了仿真。结果表明:本设计中DPLL时钟可达到120MHz,性能较高;而仅使用了87个LUT和26个触发器,占用资源很少。下面给出详细描述DPLL的工作过程。

(1) 当环路失锁时,异或门鉴相器比较输入信号(DATAIN)和输出信号(CLOCKOUT)之间的相位差异,并产生K变模可逆计数器的计数方向控制信号(DNUP);

(2) K变模可逆计数器根据计数方向控制信号(DNUP)调整计数值,DNUP为高进行减计数,并当计数值到达0时,输出借位脉冲信号(BORROW);为低进行加计数,并当计数值达到预设的K模值时,输出进位脉冲信号(CARRY);

(3) 脉冲加减电路则根据进位脉冲信号(CARRY)和借位脉冲信号(BORROW)在电路输出信号(IDOUT)中进行脉冲的增加和扣除操作,来调整输出信号的频率;

(4) 重复上面的调整过程,当环路进入锁定状态时,异或门鉴相器的输出DNUP为一占空比50%的方波,而K变模可逆计数器则周期性地产生进位脉冲输出CARRY和借位脉冲输出BORROW,导致脉冲加减电路的输出IDOUT周期性的加入和扣除半个脉冲.

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21309

    浏览量

    593133
  • 锁相环
    +关注

    关注

    35

    文章

    551

    浏览量

    87246
  • pll
    pll
    +关注

    关注

    6

    文章

    740

    浏览量

    134572
  • 数字锁相环
    +关注

    关注

    3

    文章

    30

    浏览量

    13356
收藏 人收藏

    评论

    相关推荐

    全数字锁相环的设计及分析

    设计。同时,在理论分析的基础上,建立了全数字锁相环一阶数学模型,从而可以根据具体的设计要求定量的计算参数,简化了ADPLL的设计。
    发表于 03-16 10:56

    锁相环

    采用后向Euler数值积分法实现二锁相环个仿真模型,对二锁相环进行仿真,那位大侠做过?可以参考下原代码不?
    发表于 05-28 17:21

    FPGA实现负反馈控制纯数字锁相环

    该文章是完全原创,最简洁的语言讲清楚FPGA实现负反馈的精要。震撼!FPGA实现负反馈控制纯数字锁相环!.zip (225.26 KB )
    发表于 04-30 04:50

    如何实现基于VHDL语言的全数字锁相环

     随着集成电路技术的不断进步,数字化应用逐渐普及,在数字通信、电力系统自动化等方面越来越多地运用了数字锁相环。它的好处在于免去了模拟器件的繁琐,而且成本低、易实现、省资源。本文综合以上
    发表于 10-10 06:12

    如何采用VHDL实现全数字锁相环电路的设计?

    全数字锁相环由那几部分组成?数字锁相环的原理是什么?如何采用VHDL实现全数字锁相环电路的设计?
    发表于 05-07 06:14

    全数字锁相环的设计

    智能全数字锁相环的设计 摘要: 在FPGA片内实现全数字
    发表于 08-14 22:12 56次下载

    智能全数字锁相环的设计

    智能全数字锁相环的设计:在FPGA片内实现全数字锁相环用途极广。本文在集成数字
    发表于 06-25 23:32 72次下载

    基于FPGA全数字锁相环设计

    基于FPGA全数字锁相环设计:
    发表于 06-26 17:30 141次下载
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>全数字</b><b class='flag-5'>锁相环</b>设计

    基于FPGA全数字锁相环路的设计

    介绍了应用VHDL技术设计嵌入式全数字锁相环路的方法。详细叙述了其工作原理和设计思路,并用可编程逻辑器件FPCA予以实现。
    发表于 07-21 16:46 0次下载

    一种基于FPGA实现的全数字锁相环

    锁相环被广泛应用于电力系统的测量和控制中。介绍了一种新型的基于比例积分控制逻辑的全数字锁相环。通过对其数学模型的分析,阐述了该锁相环的各项性能指标与设计参数的
    发表于 07-02 16:54 30次下载

    基于FPGA全数字锁相环路的设计

    介绍了应用VHDL技术设计嵌入式全数字锁相环路的方法。详细描
    发表于 09-19 10:09 68次下载

    智能全数字锁相环的设计

    摘要: 在FPGA片内实现全数字锁相环用途极广。本文在集成数字锁相环74297的基础上进行改进,设计了
    发表于 06-20 12:39 1427次阅读
    智能<b class='flag-5'>全数字</b><b class='flag-5'>锁相环</b>的设计

    如何使用FPGA实现高性能全数字锁相环的设计

    本文提出了一种适用范围广泛的全数字锁相环(ADPLL)实现方法.在锁相环输入频率未知的情况下,实现锁相锁频功能。本文从
    发表于 01-26 15:03 65次下载
    如何使用<b class='flag-5'>FPGA</b>实现高性能<b class='flag-5'>全数字</b><b class='flag-5'>锁相环</b>的设计

    如何使用FPGA实现高性能全数字锁相环的设计

    本文提出了一种适用范围广泛的全数字锁相环(ADPLL)实现方法.在锁相环输入频率未知的情况下,实现锁相锁频功能。本文从
    发表于 01-26 15:03 18次下载
    如何使用<b class='flag-5'>FPGA</b>实现高性能<b class='flag-5'>全数字</b><b class='flag-5'>锁相环</b>的设计

    基于FPGA的高性能全数字锁相环

    基于FPGA的高性能全数字锁相环
    发表于 06-08 11:09 45次下载