2 环路部件的设计
这里重点介绍数字环路滤波器的设计。数字环路滤波器是由变模可逆计数器构成。在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设计程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity count_k is
port(clk,j,en,d,c,b,a:in std_logic;
r1,r2:out std_logic);
end;
architecture behave of count_k is
signal cq,k,mo:std_logic_vector(16 downto 0);
signal cao1,cao2:std_logic;
signal instruction:std_logic_vector(3 downto 0);
begin
instruction<=d & c & b & a;
with instruction select
mo <=″00000000000000111″ when ″0001″,
″00000000000001111″ when ″0010″,
″00000000000011111″ when ″0011″,
″00000000000111111″ when ″0100″,
″00000000001111111″ when ″0101″,
″00000000011111111″ when ″0110″,
″00000000111111111″ when ″0111″,
″00000001111111111″ when ″1000″,
″00000011111111111″ when ″1001″,
″00000111111111111″ when ″1010″,
″00001111111111111″ when ″1011″,
″00011111111111111″ when ″1100″,
″00111111111111111″ when ″1101″,
″01111111111111111″ when ″1110″,
″11111111111111111″ when ″1111″,
″00000000000000111″ when others;
process(clk,en,j,k,cq)
begin
if clk'event and clk='1' then
k<=mo;
if en='1' then
if j='0' then
if cq
else cq<=(others=>'0');
end if;
else
if cq>0 then cq<=cq-1;
else cq<=k;
end if;
end if;
else cq<=(others=>'0');
end if;
end if;
end process;
process(en,j,cq,k)
begin
if en='1' then
if j='0' then
if cq=k then cao1<='1';
else cao1<='0';
end if;
cao2<='0';
else
if cq=″00000000000000000″then cao2<='1';
else cao2<='0';
end if;
cao1<='0';
end if;
else cao1<='0'; cao2<='0';
end if;
end process;
r1<=cao1; r2<=cao2;
end behave;
根据对其他环路部件的功能分析,也可以设计出相应的VHDL程序。 3 设计实现
本设计中全数字锁相环路采用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相接,用于控制其输出脉冲的序列。