<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 基于FPGA的全數(shù)字鎖相環(huán)路的設(shè)計

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

          作者: 時間:2017-06-05 來源:網(wǎng)絡 收藏

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

          本文引用地址:http://www.ex-cimer.com/article/201706/349274.htm

          1 工作原理

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

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

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

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

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

            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ù)對其他環(huán)路部件的功能分析,也可以設(shè)計出相應的程序。

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

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


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


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

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

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



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();