?? erfenpin.txt
字號:
二分頻
library ieee;
use ieee.std_logic_1164.all;
library altera;
use altera.maxplus2.all;
entity freq2 is
port(clkin:in std_logic;
clkout:out std_logic);
end entity;
architecture rt1 of freq2 is
signal temp:std_logic;
begin
u0:dff
port map(d=> not temp,clk=>clkin,clrn=>'1',prn=>'1',q=>temp);
clkout<=temp;
end rt1;
數字環路濾波器是數字鎖相環的重要組成部分,它直接影響數字鎖相環路的跟蹤捕獲速度與跟蹤的穩定性。數字環路濾波器由變模可逆計數器構成(模數K 可預置)。數字環路濾波器在鎖相環路系統中有2種作用。其一,它輸出超前調整信號與滯后調整信號控制DCO進行相位調整;其二,它有數字濾波作用,對噪聲信號及高頻干擾信號有較好的抑制作用。數字環路濾波器內部擁有容量K 的計數器,能夠有效消除掉隨機出現的正態分布噪聲信號。容量K值越大,對噪聲抑制效果越好;但同時K值越大,跟蹤速度越慢,實時功能下降。所以在設計時K值的選取要綜合考慮實際因素。本設計的計數器為一個17 位可編程(可變模數)可逆計數器,計數范圍由外部置數DCBA 控制。假設系統工作無相位差,由鎖相環原理知,U1和U2的相位差為0 ,異或門鑒相器輸出是一個對稱的方波。因此可逆計數器在相同的時間間隔內進行加或減計數,只要K足夠大,那么從零開始的計數就不會溢出或不夠。若U1 開始超前U2 ,異或門輸出不對稱,那么計數器加計數時間比減計數時間長,其結果計數器隨著時間的增長將溢出,產生一個進位脈沖。相反,若U1 開始滯后U2,計數器將產生一個借位脈沖。進位和借位脈沖可用來控制DCO ,使得DCO 輸出的脈沖數根據進位和借位來加上或者是刪除一些脈沖,實際上也就改變了DCO 的輸出頻率[6][9]。
當U1同步于U2或只有隨機干擾脈沖時,計數器加減的數目基本相等,計數結果在初始值處上下徘徊,不會產生進位和借位脈沖,濾除因隨機噪聲引起的相位抖動。計數器根據輸出結果生成控制DCO 動作的控制指令。
K模可逆計數器
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 count_k ;
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 < 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
if cq = k then cao1 < = ’1’;
else cao1 < = ’0’;
end if ;
cao2 < = ’0’;
else if cq =“00000000000000000”thencao2 < = ’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 ;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -