异或门鉴相器在环路锁定时和相位误差达到极限时的相应波形如图3 所示:
图3 异或门鉴相器工作波形
2. 2 数字环路滤波器的设计
数字环路滤波器是由变模可逆计数器构成的。该计数器设计为一个17 位可编程(可变模数) 可逆计数器,计数范围是,由外部置数DCBA 控制。假设系统工作无相位差,由锁相环原理知, u1 和u2 的相位差0 ,异或门鉴相器输出是一个对称的方波,如图4 (a) 所示。因此可逆计数器在相同的时间间隔内进行加或减计数,只要k 足够大,那么从零开始的计数就不会溢出或不够。
若u1 开始落后u2 ,异或门输出不对称,那么计数器加计数时间比减计数时间长,其结果计数器随着时间的增长将溢出,产生一个进位脉冲。相反,若U1 开始滞后U2 ,计数器将产生一个借位脉冲。进位和借位脉冲可用来控制DCO ,使得DCO 输出的脉冲数根据进位和借位来加上或者是删除一些脉冲,实际上也就改变了DCO 的输出频率。变模可逆计数器的设计由VHDL 完成,程序如下:
library ieee ;
use ieee. std_logic_1164. all ;
use ieee. std_logic_unsigned. all ;
entity li is
port (clk ,j ,en ,d ,c ,b ,a :in std_logic ;
r1 ,r2 :out std_logic) ;
end li ;
architecture behave of li 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 < k then cq < = cq + 1 ;
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
f 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 ;
变模可逆计数器(取k = 24) 的仿真波形图如图4 所示。
图4 变模可逆计数器(取k = 24) 的仿真波形图