找回密码
 注册
关于网站域名变更的通知
查看: 235|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-4-14 14:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x

摘 要: 介绍了应用VHDL技术设计嵌入式全数字锁相环路的方法。详细叙述了其工作原理和设计思想,并用可编程逻辑器件FPGA予以实现。
- _1 O  m( ?6 ^6 ~( N关键词: VHDL语言 全数字锁相环路(DPLL) 片上系统(SOC) FPGA

数字锁相环路已在数字通信、无线电电子学及电力系统自动化等领域中得到了极为广泛的应用。传统的全数字锁相环路(DPLL)是由中、小规模TTL集成电路构成。这类DPLL工作频率低,可靠性较差。随着集成电路技术的发展,不仅能够制成频率较高的单片集成锁相环路,而且可以把整个系统集成到一个芯片上去,实现所谓片上系统SOC(System on a chip)。因此,可以把全数字锁相环路作为一个功能模块嵌入SOC,构成片内锁相环。下面介绍采用VHDL技术设计DPLL的一种方案。

1工作原理, u7 @# o+ v2 S& F! W" @
全数字锁相环路的结构框图如图1所示
其中数字鉴相器由异或门构成,数字环路滤波器由变模可逆计数器构成,数控振荡器由加/减脉冲控制器和除N计数器组成。可逆计数器和加/减脉冲控制器的时钟频率分别为Mf0和2Nf0。这里f0是环路的中心频率,一般情况下M和N为2的整数幂。时钟2Nf0经除H(=M/2N)计数器得到。限时的相应波形如图2所示。

当环路琐定时,u1和u2正交,鉴相器的输出信号ud为50%占空比的方波,此时定义相位误差为零。在这种情况下,可逆计数器"加"与"减"的周期相同,只要可逆计数器的k值足够大(k>M/4),其输出端就不会产生进位或借位脉冲。这时,加/减脉冲控制器只对其时钟2Nf0进行二分频,使u1和u2的相位保持正交。在环路未锁定的情况下,若ud=0时,它使可逆计数器向上加计数,并导致进位脉冲产生,进位脉冲作用到加/减脉冲控制器的"加"控制端i,该控制器便在二分频过程中加入半个时钟周期。反之,若ud=1,可逆计数器减计数,并将发出借位脉冲到加/减脉冲控制器的"减"输入端d,于是,该控制器便在二分频的过程中减去半个周期。这个过程是连续发生的。加/减脉冲控制器的输出经过除N计数器后,使得本地估算信号u2的相位受到调整控制,最终达到锁定状态。

2 环路部件的设计
/ G( f; k, ^! s- L5 d这里重点介绍数字环路滤波器的设计。数字环路滤波器是由变模可逆计数器构成。在ud的控制下,当j=0时,对时钟Mf0进行"加"计数;当j=1时,进行"减"计数。可逆计数器的计数容量(模数k)可以利用A、B、C、D四位进行预置,从而方便地改变模数。其预置模数的范围为,当D、C、B、A在0001~1111取值时,相应模数的变化范围是23~217。可见,可逆计数器的长度能够根据模数k值的大小来实现数字编程控制。取D、C、B、A为0001时,K=23,计数器长度只有三级,因而可以扩大捕捉带,缩短锁定时间。在D、C、B、A取1111时,K=217,计数器长度变为十七级,这时捕捉带缩小,缩定时间延长。变模可逆计数器的VHDL设计程序如下:
6 W, e( a& T3 c( Elibrary ieee
  G4 z% A0 h1 l* {% N" @( \, Yuse ieee.std_logic_1164.all
, a$ M) m, w8 c, F' Fuse ieee.std_logic_unsigned.all
  {7 l: _; t5 ?* z2 m; o+ {2 eentity count_k is2 h0 ?$ F, U: m9 Z" R" [% A
port clk j en d c b a in std_logic1 n! \, ^( B0 \: U# J- ~0 l
r1 r2 out std_logic : o$ k8 B( P2 x) R! S
end- n0 z3 G& a$ v1 m% d8 w
architecture behave of count_k is
- b# O; K$ O% D( p* b: xsignal cq k mo std_logic_vector 16 downto 0 
- ]* y# v5 s+ l' \, t4 Asignal cao1 cao2 std_logic
2 Q- K; n8 C: R+ T- D  p7 D. ^signal instruction std_logic_vector 3 downto 0 
" Q+ E) \/ e: {. mbegin
* a# N: s7 R; l8 K( G( Oinstruction<=d & c & b & a4 F) {6 D% k' U7 I5 V. t# O% {
with instruction select

mo <=″00000000000000111″ when ″0001″
0 e# D- k( i2 X( I″00000000000001111″ when ″0010″- C  h; ?; h# R
″00000000000011111″ when ″0011″
7 f3 ^" _1 V1 ^0 \- P' d9 N( y! J″00000000000111111″ when ″0100″
7 @5 z5 @( N" _6 A( f″00000000001111111″ when ″0101″
! k% `& E" b& j- G″00000000011111111″ when ″0110″  t) R9 Y) u5 g* C
″00000000111111111″ when ″0111″
; [: W2 v" [) a″00000001111111111″ when ″1000″
0 R! W  n& h0 ?+ l″00000011111111111″ when ″1001″
$ ?: E" h; G: |! C6 K& {″00000111111111111″ when ″1010″( G8 ^# j; q5 _, J% [* I7 {0 r
″00001111111111111″ when ″1011″
* u7 {4 S- Y7 d$ z7 v3 B″00011111111111111″ when ″1100″4 y+ S! Q4 b0 b0 P
″00111111111111111″ when ″1101″6 J4 \' v: U; L+ K; `
″01111111111111111″ when ″1110″
# H9 K, c1 c. l7 w0 `+ i″11111111111111111″ when ″1111″
# w% v7 M( O1 b* `″00000000000000111″ when others, h# e" h9 i. t. P! z/ ^
process clk en j k cq & S3 M" m$ k+ G7 M( W
begin' j0 w4 }! ^! Z6 s' w( r4 t: ?
if clk'event and clk='1' then4 J" J8 ^- ]( {6 g3 ^  ?
k<=mo  L0 A# d9 ?! d9 a+ o4 {0 e7 p
if en='1' then
! J" ]8 V0 j/ j4 b! eif j='0' then
4 [9 u& f1 Q4 h' S" P6 [if cq<k then cq<=cq+1
7 f+ Z9 S0 x- |# L: `' C' s$ g! melse cq<=others=>'0' 
: [, n; C) @7 i6 B4 Tend if: Y; T) A0 k% L2 b# i/ ^
else
0 V& I) \2 Z& |% {, Z% ?2 A" dif cq>0 then cq<=cq-1
% @" ~" }8 h( |9 v! g1 |0 ?! Xelse cq<=k7 m# u, V, H) b" x! l( o/ |6 o
end if  J' [5 [: i) s6 P5 ^8 ]% I
end if; O. _9 a0 _, G# P
else cq<=others=>'0' 
. f3 Z8 U# w1 P* N( A0 t. `- iend if9 R4 k% ~3 c8 ?: H% K
end if% P$ C7 o' s2 B4 N
end process

process en j cq k 
$ O: J! i0 j9 E7 q8 N' ~begin
( n' \! G0 k) C; A% p( Y% q( A( bif en='1' then
1 y" x! S; |' j. s' x" g4 E9 L! [if j='0' then$ j1 j* v8 E, Z/ r
if cq=k then cao1<='1'
. Y0 m; @* E& @$ J8 a! Welse cao1<='0'+ ]2 q8 c; [% G! Z+ t! U
end if
6 {+ t: u! u9 Scao2<='0') a8 d8 j' U4 z
else; h) t3 ]9 L; j
if cq=″00000000000000000″then cao2<='1'
: A5 O7 ]* t2 F( a; felse cao2<='0'
4 ]: m# @& z& q: j8 C: g* D" Qend if& z7 O' u5 m0 C, d
cao1<='0'
* i- l2 o+ H& n1 l! dend if+ k1 A; {( u; S6 N& k4 G
else cao1<='0' cao2<='0'
- P9 b* o; _# I' `% yend if' v; b- O1 `  Q: N8 `9 p' M7 n7 t# \
end process
0 ~( a, l1 Q: @* S6 O; Hr1<=cao1 r2<=cao2
/ M0 Z  |  }. A9 cend behave. p: ~9 c+ H1 L/ o1 P. b
根据对其他环路部件的功能分析,也可以设计出相应的VHDL程序。

3 设计实现0 H3 E. l: _( L
本设计中全数字锁相环路采用XILINX公司的Foundation 3.1版本进行设计,并用Spartan2系列的FPGA予以实现。下面分别给出变模可逆计数器和加/减脉冲控制器的仿真波形如图3、图4所示。
从图3中可见,当j=0时,可逆计数器做加计数,若取模k=24,则当计数值cq=0000FH时,计数器产生进位脉冲(r1=1);当j=1后,在下一个时钟的上升沿到来时,可逆计数器开始做减计数,当cq=00000H时,产生借位脉冲(r2=1)。改变模k便可延长或缩短可逆计数器产生进位脉冲和借位脉冲的时间。同时,由图1可知,可逆计数的加/减计数信号j是由鉴相器的输出信号ud控制的,而其进位脉冲r1和借位脉冲r2又分别与加/减脉冲控制器的i和d相接,用于控制其输出脉冲的序列。由图4可知,在无进位和借位脉冲时,加/减脉冲控制器对2Nf0时钟进行二分频。一旦可逆计数器有进位脉冲或借位脉冲输出时,作用到加/减脉冲控制器i或d端,便使其输出脉冲序列发生了变化。当可逆计数器输出一个进位脉冲时,使i=1,则在i的下降沿到来之后,加/减脉冲控制器的输出端q插入一个脉冲,即在其输出序列中加入了半个周期;反之,当可逆计数器输出一个借位脉冲时,使d=1,则在d的下降沿到来之后,q端删除一个脉冲,即在加/减脉冲控制器的输出序列中删去了半个周期。由以上对图3、4仿真波形的分析可知,变模可逆计数器和加/减脉冲控制器的逻辑功能符合设计要求。把全数字锁相环路的各部件连接起来进行系统仿真,可得其仿真波形如图5和图6所示。

其中图5是取k=25时的系统仿真波形,由图中可见,u1和u2达到锁定状态时的仿真时间是175μs。图6是取k=28时的系统仿真波形,在这种情况下,u1和u2达到锁定状态时的仿真时间是1.04ms。显然,模k愈大,环路进入锁定状态的时间愈长。
( ?2 M) p8 K3 h: {7 z, Q$ R, @! z1 l7 y+ J% R; O! p
值得指出的是,在环路锁定状态下,由于可逆计数器的连续计数,或在噪声的干扰下,会产生进位和借位脉冲。如果k值取得太小,则可逆计数器因频繁地循环计数而产生进位或借位脉冲,这就导致了在环路的输出端出现相位抖动。为了减少这种相位抖动,k值必须取大于M/4。* l9 r0 V; ]+ I2 U
由以上分析可知,模k的取值要适当。k取得大,对抑制噪声、减少相位抖动有利,但同时又加大了环路进入锁定状态的时间。反之,k取得小,可以加速环路的锁定,而对噪声的抑制能力却随之降低。
5 u2 `8 w5 X% O1 h; j4 I7 O' m5 j
采用VHDL设计全数字锁相环路,具有设计灵活、修改方便和易于实现的优点,并能够制成嵌入式片内锁相环。该类数字锁相环路中计数器的模数可以随意修改。这样,就能够根据不同情况最大限度地、灵活地设计环路。


0 V3 u6 A2 _) E+ t- p

该用户从未签到

2#
发表于 2020-4-14 15:51 | 只看该作者
传统的全数字锁相环路(DPLL)是由中、小规模TTL集成电路构成。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-20 16:33 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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