《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > 基于FPGA的全數(shù)字鎖相環(huán)路的設(shè)計(jì)

基于FPGA的全數(shù)字鎖相環(huán)路的設(shè)計(jì)

2008-12-29
作者:?jiǎn)伍L(zhǎng)虹1, 孟憲元2

  摘 要: 介紹了應(yīng)用VHDL技術(shù)設(shè)計(jì)嵌入式全數(shù)字" title="全數(shù)字">全數(shù)字鎖相環(huán)路" title="鎖相環(huán)路">鎖相環(huán)路的方法。詳細(xì)敘述了其工作原理和設(shè)計(jì)思想,并用可編程邏輯器件FPGA予以實(shí)現(xiàn)。

  關(guān)鍵詞: VHDL語(yǔ)言 全數(shù)字鎖相環(huán)路(DPLL) 片上系統(tǒng)(SOC) FPGA

?

  數(shù)字鎖相環(huán)路已在數(shù)字通信?無(wú)線電電子學(xué)及電力系統(tǒng)自動(dòng)化等領(lǐng)域中得到了極為廣泛的應(yīng)用。傳統(tǒng)的全數(shù)字鎖相環(huán)路(DPLL)是由中?小規(guī)模TTL集成電路構(gòu)成。這類DPLL工作頻率低,可靠性較差。隨著集成電路技術(shù)的發(fā)展,不僅能夠制成頻率較高的單片集成鎖相環(huán)路,而且可以把整個(gè)系統(tǒng)集成到一個(gè)芯片上去,實(shí)現(xiàn)所謂片上系統(tǒng)SOC(System on a chip)。因此,可以把全數(shù)字鎖相環(huán)路作為一個(gè)功能模塊嵌入SOC,構(gòu)成片內(nèi)鎖相環(huán)。下面介紹采用VHDL技術(shù)設(shè)計(jì)DPLL的一種方案。

1 工作原理

  全數(shù)字鎖相環(huán)路的結(jié)構(gòu)框圖如圖1所示。其中數(shù)字鑒相器由異或門構(gòu)成,數(shù)字環(huán)路濾波器由變模可逆計(jì)數(shù)器構(gòu)成,數(shù)控振蕩器由加/減脈沖控制器" title="脈沖控制器">脈沖控制器和除N計(jì)數(shù)器組成。可逆計(jì)數(shù)器和加/減脈沖控制器的時(shí)鐘頻率分別為Mf0和2Nf0。這里f0是環(huán)路的中心頻率,一般情況下M和N為2的整數(shù)冪。時(shí)鐘2Nf0經(jīng)除H(=M/2N)計(jì)數(shù)器得到。

?

?

  異或門鑒相器用于比較輸入信號(hào)u1與數(shù)控振蕩器輸出信號(hào)u2的相位差,其輸出信號(hào)ud作為可逆計(jì)數(shù)器的計(jì)數(shù)方向控制信號(hào)。當(dāng)ud為低電平時(shí)(u1和u2有同極性時(shí)),可逆計(jì)數(shù)器作“加”計(jì)數(shù)。反之,當(dāng)ud 為高電平時(shí),可逆計(jì)數(shù)器作“減”計(jì)數(shù)。

  異或門鑒相器在環(huán)路鎖定時(shí)和相位誤差達(dá)到極限時(shí)的相應(yīng)波形如圖2所示。當(dāng)環(huán)路瑣定時(shí),u1和u2正交,鑒相器的輸出信號(hào)ud為50%占空比的方波,此時(shí)定義相位誤差為零。在這種情況下,可逆計(jì)數(shù)器“加”與“減”的周期相同,只要可逆計(jì)數(shù)器的k值足夠大(k>M/4),其輸出端就不會(huì)產(chǎn)生進(jìn)位或借位脈沖。這時(shí),加/減脈沖控制器只對(duì)其時(shí)鐘2Nf0進(jìn)行二分頻,使u1和u2的相位保持正交。在環(huán)路未鎖定的情況下,若ud=0時(shí),它使可逆計(jì)數(shù)器向上加計(jì)數(shù),并導(dǎo)致進(jìn)位脈沖產(chǎn)生,進(jìn)位脈沖作用到加/減脈沖控制器的“加”控制端i,該控制器便在二分頻過(guò)程中加入半個(gè)時(shí)鐘周期。反之,若ud=1,可逆計(jì)數(shù)器減計(jì)數(shù),并將發(fā)出借位脈沖到加/減脈沖控制器的“減”輸入端d,于是,該控制器便在二分頻的過(guò)程中減去半個(gè)周期。這個(gè)過(guò)程是連續(xù)發(fā)生的。加/減脈沖控制器的輸出經(jīng)過(guò)除N計(jì)數(shù)器后,使得本地估算信號(hào)u2的相位受到調(diào)整控制,最終達(dá)到鎖定狀態(tài)。

?

?

2 環(huán)路部件的設(shè)計(jì)

  這里重點(diǎn)介紹數(shù)字環(huán)路濾波器的設(shè)計(jì)。數(shù)字環(huán)路濾波器是由變??赡嬗?jì)數(shù)器構(gòu)成。在ud的控制下,當(dāng)j=0時(shí),對(duì)時(shí)鐘Mf0進(jìn)行“加”計(jì)數(shù);當(dāng)j=1時(shí),進(jìn)行“減”計(jì)數(shù)??赡嬗?jì)數(shù)器的計(jì)數(shù)容量(模數(shù)" title="模數(shù)">模數(shù)k)可以利用A?B?C?D四位進(jìn)行預(yù)置,從而方便地改變模數(shù)。其預(yù)置模數(shù)的范圍為,當(dāng)D?C?B?A在0001~1111取值時(shí),相應(yīng)模數(shù)的變化范圍是23~217??梢?jiàn),可逆計(jì)數(shù)器的長(zhǎng)度能夠根據(jù)模數(shù)k值的大小來(lái)實(shí)現(xiàn)數(shù)字編程控制。取D?C?B?A為0001時(shí),K=23,計(jì)數(shù)器長(zhǎng)度只有三級(jí),因而可以擴(kuò)大捕捉帶,縮短鎖定時(shí)間。在D?C?B?A取1111時(shí),K=217,計(jì)數(shù)器長(zhǎng)度變?yōu)槭呒?jí),這時(shí)捕捉帶縮小,縮定時(shí)間延長(zhǎng)。變模可逆計(jì)數(shù)器的VHDL設(shè)計(jì)程序如下:

  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;

????根據(jù)對(duì)其他環(huán)路部件的功能分析,也可以設(shè)計(jì)出相應(yīng)的VHDL程序。

3 設(shè)計(jì)實(shí)現(xiàn)

  本設(shè)計(jì)中全數(shù)字鎖相環(huán)路采用XILINX公司的Foundation 3.1版本進(jìn)行設(shè)計(jì),并用Spartan2系列的FPGA予以實(shí)現(xiàn)。下面分別給出變??赡嬗?jì)數(shù)器和加/減脈沖控制器的仿真波形" title="仿真波形">仿真波形如圖3?圖4所示。從圖3中可見(jiàn),當(dāng)j=0時(shí),可逆計(jì)數(shù)器做加計(jì)數(shù),若取模k=24,則當(dāng)計(jì)數(shù)值cq=0000FH時(shí),計(jì)數(shù)器產(chǎn)生進(jìn)位脈沖(r1=1);當(dāng)j=1后,在下一個(gè)時(shí)鐘的上升沿到來(lái)時(shí),可逆計(jì)數(shù)器開(kāi)始做減計(jì)數(shù),當(dāng)cq=00000H時(shí),產(chǎn)生借位脈沖(r2=1)。改變模k便可延長(zhǎng)或縮短可逆計(jì)數(shù)器產(chǎn)生進(jìn)位脈沖和借位脈沖的時(shí)間。同時(shí),由圖1可知,可逆計(jì)數(shù)的加/減計(jì)數(shù)信號(hào)j是由鑒相器的輸出信號(hào)ud控制的,而其進(jìn)位脈沖r1和借位脈沖r2又分別與加/減脈沖控制器的i和d相接,用于控制其輸出脈沖的序列。

?

?

?

  由圖4可知,在無(wú)進(jìn)位和借位脈沖時(shí),加/減脈沖控制器對(duì)2Nf0時(shí)鐘進(jìn)行二分頻。一旦可逆計(jì)數(shù)器有進(jìn)位脈沖或借位脈沖輸出時(shí),作用到加/減脈沖控制器i或d端,便使其輸出脈沖序列發(fā)生了變化。當(dāng)可逆計(jì)數(shù)器輸出一個(gè)進(jìn)位脈沖時(shí),使i=1,則在i的下降沿到來(lái)之后,加/減脈沖控制器的輸出端q插入一個(gè)脈沖,即在其輸出序列中加入了半個(gè)周期;反之,當(dāng)可逆計(jì)數(shù)器輸出一個(gè)借位脈沖時(shí),使d=1,則在d的下降沿到來(lái)之后,q端刪除一個(gè)脈沖,即在加/減脈沖控制器的輸出序列中刪去了半個(gè)周期。由以上對(duì)圖3?4仿真波形的分析可知,變模可逆計(jì)數(shù)器和加/減脈沖控制器的邏輯功能符合設(shè)計(jì)要求。把全數(shù)字鎖相環(huán)路的各部件連接起來(lái)進(jìn)行系統(tǒng)仿真,可得其仿真波形如圖5和圖6所示。其中圖5是取k=25時(shí)的系統(tǒng)仿真波形,由圖中可見(jiàn),u1和u2達(dá)到鎖定狀態(tài)時(shí)的仿真時(shí)間是175μs。圖6是取k=28時(shí)的系統(tǒng)仿真波形,在這種情況下,u1和u2達(dá)到鎖定狀態(tài)時(shí)的仿真時(shí)間是1.04ms。顯然,模k愈大,環(huán)路進(jìn)入鎖定狀態(tài)的時(shí)間愈長(zhǎng)。

?

?

?

  值得指出的是,在環(huán)路鎖定狀態(tài)下,由于可逆計(jì)數(shù)器的連續(xù)計(jì)數(shù),或在噪聲的干擾下,會(huì)產(chǎn)生進(jìn)位和借位脈沖。如果k值取得太小,則可逆計(jì)數(shù)器因頻繁地循環(huán)計(jì)數(shù)而產(chǎn)生進(jìn)位或借位脈沖,這就導(dǎo)致了在環(huán)路的輸出端出現(xiàn)相位抖動(dòng)。為了減少這種相位抖動(dòng),k值必須取大于M/4。

  由以上分析可知,模k的取值要適當(dāng)。k取得大,對(duì)抑制噪聲?減少相位抖動(dòng)有利,但同時(shí)又加大了環(huán)路進(jìn)入鎖定狀態(tài)的時(shí)間。反之,k取得小,可以加速環(huán)路的鎖定,而對(duì)噪聲的抑制能力卻隨之降低。

  采用VHDL設(shè)計(jì)全數(shù)字鎖相環(huán)路,具有設(shè)計(jì)靈活?修改方便和易于實(shí)現(xiàn)的優(yōu)點(diǎn),并能夠制成嵌入式片內(nèi)鎖相環(huán)。該類數(shù)字鎖相環(huán)路中計(jì)數(shù)器的模數(shù)可以隨意修改。這樣,就能夠根據(jù)不同情況最大限度地?靈活地設(shè)計(jì)環(huán)路。

?

參考文獻(xiàn)

1 孟憲元.可編程ASIC設(shè)計(jì)及應(yīng)用.成都:電子科技大學(xué)出版社,2000.11

2 胡華春,石 玉.數(shù)字鎖相環(huán)路原理與應(yīng)用.上海:上??萍汲霭嫔?,1990

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。