今天主要介紹鎖相環,下面分兩部分來介紹。第一部分先了解鎖相環基本組成和工作原理,第二部分介紹了一種采用VERILOG硬件描述語言設計DPLL的方案。
Part1 鎖相環的組成和工作原理
1.鎖相環的基本組成
許多電子設備要正常工作,通常需要外部的輸入信號與內部的振蕩信號同步,利用鎖相環路就可以實現這個目的。
鎖相環路是一種反饋控制電路,簡稱鎖相環(PLL)。鎖相環的特點是:利用外部輸入的參考信號控制環路內部振蕩信號的頻率和相位。
因鎖相環可以實現輸出信號頻率對輸入信號頻率的自動跟蹤,所以鎖相環通常用于閉環跟蹤電路。鎖相環在工作的過程中,當輸出信號的頻率與輸入信號的頻率相等時,輸出電壓與輸入電壓保持固定的相位差值,即輸出電壓與輸入電壓的相位被鎖住,這就是鎖相環名稱的由來。
鎖相環通常由鑒相器(PD)、環路濾波器(LF)和壓控振蕩器(VCO)三部分組成,鎖相環組成的原理框圖如圖8-4-1所示。
鎖相環中的鑒相器又稱為相位比較器,它的作用是檢測輸入信號和輸出信號的相位差,并將檢測出的相位差信號轉換成uD(t)電壓信號輸出,該信號經低通濾波器濾波后形成壓控振蕩器的控制電壓uC(t),對振蕩器輸出信號的頻率實施控制。
2.鎖相環的工作原理
鎖相環中的鑒相器通常由模擬乘法器組成,利用模擬乘法器組成的鑒相器電路如圖8-4-2所示。
鑒相器的工作原理是:設外界輸入的信號電壓和壓控振蕩器輸出的信號電壓分別為:
式中的ω0為壓控振蕩器在輸入控制電壓為零或為直流電壓時的振蕩角頻率,稱為電路的固有振蕩角頻率。則模擬乘法器的輸出電壓uD為:
用低通濾波器LF將上式中的和頻分量濾掉,剩下的差頻分量作為壓控振蕩器的輸入控制電壓uC(t)。即uC(t)為:
式中的ωi為輸入信號的瞬時振蕩角頻率,θi(t)和θO(t)分別為輸入信號和輸出信號的瞬時位相,根據相量的關系可得瞬時頻率和瞬時位相的關系為:
即
(8-4-4)
則,瞬時相位差θd為
(8-4-5)
對兩邊求微分,可得頻差的關系式為(8-4-6)
上式等于零,說明鎖相環進入相位鎖定的狀態,此時輸出和輸入信號的頻率和相位保持恒定不變的狀態,uc(t)為恒定值。當上式不等于零時,說明鎖相環的相位還未鎖定,輸入信號和輸出信號的頻率不等,uc(t)隨時間而變。
因壓控振蕩器的壓控特性如圖8-4-3所示,該特性說明壓控振蕩器的振蕩頻率ωu以ω0為中心,隨輸入信號電壓uc(t)的變化而變化。該特性的表達式為(8-4-6)
上式說明當uc(t)隨時間而變時,壓控振蕩器的振蕩頻率ωu也隨時間而變,鎖相環進入“頻率牽引”,自動跟蹤捕捉輸入信號的頻率,使鎖相環進入鎖定的狀態,并保持ω0=ωi的狀態不變。
鎖相環的應用
1.鎖相環在調制和解調中的應用
(1)調制和解調的概念
為了實現信息的遠距離傳輸,在發信端通常采用調制的方法對信號進行調制,收信端接收到信號后必須進行解調才能恢復原信號。
所謂的調制就是用攜帶信息的輸入信號ui來控制載波信號uC的參數,使載波信號的某一個參數隨輸入信號的變化而變化。載波信號的參數有幅度、頻率和位相,所以,調制有調幅(AM)、調頻(FM)和調相(PM)三種。
調幅波的特點是頻率與載波信號的頻率相等,幅度隨輸入信號幅度的變化而變化;調 頻波的特點是幅度與載波信號的幅度相等,頻率隨輸入信號幅度的變化而變化;調相波的特點是幅度與載波信號的幅度相等,相位隨輸入信號幅度的變化而變化。調 幅波和調頻波的示意圖如圖8-4-4所示。
上圖的(a)是輸入信號,又稱為調制信號;圖(b)是載波信號,圖(c)是調幅波和調頻波信號。
解調是調制的逆過程,它可將調制波uO還原成原信號ui。
2.鎖相環在調頻和解調電路中的應用
調頻波的特點是頻率隨調制信號幅度的變化而變化。由8-4-6式可知,壓控振蕩 器的振蕩頻率取決于輸入電壓的幅度。當載波信號的頻率與鎖相環的固有振蕩頻率ω0相等時,壓控振蕩器輸出信號的頻率將保持ω0不變。若壓控振蕩器的輸入信 號除了有鎖相環低通濾波器輸出的信號uc外,還有調制信號ui,則壓控振蕩器輸出信號的頻率就是以ω0為中心,隨調制信號幅度的變化而變化的調頻波信號。 由此可得調頻電路可利用鎖相環來組成,由鎖相環組成的調頻電路組成框圖如圖8-4-5所示。
根據鎖相環的工作原理和調頻波的特點可得解調電路組成框圖如圖8-4-6所示。
3.鎖相環在頻率合成電路中的應用
在現代電子技術中,為了得到高精度的振蕩頻率,通常采用石英晶體振蕩器。但石英晶體振蕩器的頻率不容易改變,利用鎖相環、倍頻、分頻等頻率合成技術,可以獲得多頻率、高穩定的振蕩信號輸出。
輸出信號頻率比晶振信號頻率大的稱為鎖相倍頻器電路;輸出信號頻率比晶振信號頻率小的稱為鎖相分頻器電路。鎖相倍頻和鎖相分頻電路的組成框圖如圖8-4-7所示。
Part2 全數字鎖相環的設計
鎖相環(PLL)技術在眾多領域得到了廣泛的應用。如信號處理,調制解調,時鐘同步,倍頻,頻率綜合等都應用到了鎖相環技術。傳統的鎖相環由模擬電路實現,而全數字鎖相環(DPLL)與傳統的模擬電路實現的PLL相比,具有精度高且不受溫度和電壓影響,環路帶寬和中心頻率編程可調,易于構建高階鎖相環等優點,并且應用在數字系統中時,不需A/D及D/A轉換。隨著通訊技術、集成電路技術的飛速發展和系統芯片(SoC)的深入研究,DPLL必然會在其中得到更為廣泛的應用。
這里介紹一種采用VERILOG硬件描述語言設計DPLL的方案。
DPLL結構及工作原理
一階DPLL的基本結構如圖1所示。主要由鑒相器、K變模可逆計數器、脈沖加減電路和除N計數器四部分構成。K變模計數器和脈沖加減電路的時鐘分別為Mfc和2Nfc。這里fc是環路中心頻率,一般情況下M和N都是2的整數冪。本設計中兩個時鐘使用相同的系統時鐘信號。
圖1 數字鎖相環基本結構圖
鑒相器
常用的鑒相器有兩種類型:異或門(XOR)鑒相器和邊沿控制鑒相器(ECPD),本設計中采用異或門(XOR)鑒相器。異或門鑒相器比較輸入信號Fin相位和輸出信號Fout相位之間的相位差Фe=Фin-Фout,并輸出誤差信號Se作為K變模可逆計數器的計數方向信號。環路鎖定時,Se為一占空比50%的方波,此時的絕對相為差為90°。因此異或門鑒相器相位差極限為±90°。異或門鑒相器工作波形如圖2所示。
圖2 異或門鑒相器在環路鎖定及極限相位差下的波形
K變模可逆計數器
K變模可逆計數器消除了鑒相器輸出的相位差信號Se中的高頻成分,保證環路的性能穩定。K變模可逆計數器根據相差信號Se來進行加減運算。當Se為低電平時,計數器進行加運算,如果相加的結果達到預設的模值,則輸出一個進位脈沖信號CARRY給脈沖加減電路;當Se為高電平時,計數器進行減運算,如果結果為零,則輸出一個借位脈沖信號BORROW給脈沖加減電路。
脈沖加減電路
脈沖加減電路實現了對輸入信號頻率和相位的跟蹤和調整,最終使輸出信號鎖定在輸入信號的頻率和信號上,工作波形如圖3所示。
圖3 脈沖加減電路工作波形
除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周期性的加入和扣除半個脈沖。
有關一階DPLL的一些討論
“波紋”(Ripple)消除
在DPLL工作過程中,環路鎖定時,異或門鑒相器的輸出DNUP是一個占空比50%的方波。因為在DPLL的基本結構中,K變模可逆計數器始終起作用。因此當環路鎖定后,如果模數K取值較小,K變模可逆計數器會頻繁地周期性輸出進位脈沖信號CARRY和借位脈沖信號BORROW,從而在脈沖加減電路中產生周期性的脈沖加入和扣除動作,這樣就在脈沖加減電路的輸出信號IDOUT中產生了周期性的誤差,稱為“波紋”;如果模數K取值足夠大——對于異或門鑒相器,K應大于M/4;對于邊沿控制鑒相器,K應大于M/2,則這種“波紋”誤差通過除N計數器后,可以減少到N個周期出現一次,也就是說K變模可逆計數器的進位脈沖信號CARRY和借位脈沖信號BORROW的周期是N個參考時鐘周期。
為了消除“波紋”誤差,可以為K變模可逆計數器產生一個計數允許信號ENABLE,環路失鎖時,此信號有效,允許計數;環路鎖定時,此信號無效,禁止計數,則不會產生周期性的進位和借位脈沖信號。
“波紋”消除電路消除“波紋”誤差的同時,也減小了DPLL的鎖定范圍,環路的相位極限誤差(異或門鑒相器為±90°;ECPD為±180°)減小為原來的1/(1+1/2K),鑒相增益也減小到原來的1/2。
使用DPLL進行FSK解調
一個帶有邊沿控制鑒相器ECPD的DPLL再加上一個D觸發器,就可以構成一個FSK解調器,如圖4所示。
圖4 FSK解調
假設有一個輸入信號Fin,它的頻率在F1和F2之間變化,DPLL的中心頻率為Fc,并且F1<FC<F2。如果輸入信號頻率為F1,則ECPD會產生一個負的相位誤差(FIN落后于FOUT),則D觸發器的輸出始終為“1”;如果輸入信號頻率為F2,ECPD產生一個正的相位誤差(FIN超前FOUT),則D觸發器的輸出始終為“0”。這樣就完成了FSK調制的解調。
結語
本文介紹了一種一階DPLL的設計方法,利用VERILOG語言配合XILINX的FPGA,為設計提供了極大的便利和性能保證。DPLL中可逆計數器模值可隨意修改,來控制DPLL的跟蹤補償和鎖定時間;同時,除N計數器的分頻值也可隨意改變,使DPLL可跟蹤不同中心頻率的輸入信號,而這些只需在設計中修改幾行代碼即可完成。另外,設計好的DPLL模塊還可作為可重用的IP核,應用于其他設計。