0 引言
分頻器是FPGA設計中使用頻率非常高的基本單元之一,。盡管目前在大部分設計中還廣泛使用集成鎖相環(huán)(如altera的PLL,,Xilinx的DLL)來進行時鐘的分頻、倍頻以及相移設計,,但是,,對于時鐘要求不太嚴格的設計,通過自主設計進行時鐘分頻的實現(xiàn)方法仍然非常流行,。首先這種方法可以節(jié)省鎖相環(huán)資源,,再者,這種方式只消耗不多的邏輯單元就可以達到對時鐘操作的目的,。
1 整數(shù)分頻器的設計
1.1 偶數(shù)倍分頻
偶數(shù)分頻器的實現(xiàn)非常簡單,,通過計數(shù)器計數(shù)就完全可以實現(xiàn)。如進行N倍偶數(shù)分頻,,就可以通過由待分頻的時鐘觸發(fā)計數(shù)器計數(shù),當計數(shù)器從0計數(shù)到N/2-1時,,輸出時鐘進行翻轉(zhuǎn),,并給計數(shù)器一個復位信號,以使下一個時鐘從零開始計數(shù),。以此循環(huán),,就可以實現(xiàn)任意的偶數(shù)分頻。圖1所示是占空比為1:1的36分頻的仿真波形圖,。
1.2 奇數(shù)倍分頻
奇數(shù)倍分頻有兩種實現(xiàn)方法,,其中之一完全可以通過計數(shù)器來實現(xiàn),如進行三分頻,,就可通過待分頻時鐘上升沿觸發(fā)計數(shù)器來進行模三計數(shù),,當計數(shù)器計數(shù)到鄰近值時進行兩次翻轉(zhuǎn)。比如可以在計數(shù)器計數(shù)到1時,,輸出時鐘進行翻轉(zhuǎn),,計數(shù)到2時再次進
行翻轉(zhuǎn)。這樣,,就在計數(shù)值鄰近的1和2進行了兩次翻轉(zhuǎn),。如此便實現(xiàn)了三分頻,其占空比為1/3或2/3,。
占空比1/15的15分頻設計的主要代碼如下:
如果要實現(xiàn)占空比為50%的三分頻時鐘,,則可通過待分頻時鐘下降沿觸發(fā)計數(shù),并以和上升沿同樣的方法計數(shù)進行三分頻,,然后對下降沿產(chǎn)生的三分頻時鐘和上升沿產(chǎn)生的時鐘進行相或運算,。即可得到占空比為50%的三分頻時鐘這是奇數(shù)分頻的第三種方法。這種方法可以實現(xiàn)任意的奇數(shù)分頻,。如將其歸類為一般的方法:對于實現(xiàn)占空比為50%的N倍奇數(shù)分頻,,首先要進行上升沿觸發(fā)以進行模N計數(shù),,計數(shù)選定到某一個值再進行輸出時鐘翻轉(zhuǎn),然后過(N-1)/2再次進行翻轉(zhuǎn),,就可得到一個占空比非50%的奇數(shù)n分頻時鐘,。再同時進行下降沿觸發(fā)的模N計數(shù),當其到達與上升沿觸發(fā)輸出時鐘翻轉(zhuǎn)選定值相同時,,再進行輸出時鐘翻轉(zhuǎn),,同樣,經(jīng)過(N-1)/2時,,輸出時鐘再次翻轉(zhuǎn)以生成占空比非50%的奇數(shù)n分頻時鐘,。將這兩個占空比非50%的n分頻時鐘相或運算,就可以得到占空比為50%的奇數(shù)n分頻時鐘,。
圖2所示是占空比為1:1的3分頻電路原理圖,。圖3為其仿真波形。
2 半整數(shù)分頻器設計
進行n+0.5分頻一般需要對輸入時鐘先進行操作,。其基本設計思想是:首先進行模n的計數(shù),,在計數(shù)到n-1時,將輸出時鐘賦為'1',,而當回到計數(shù)0時,,又賦為0,這樣,,當計數(shù)值為n-1時,,輸出時鐘才為1,因此,,只要保持計數(shù)值n-1為半個輸入時鐘周期,,即可實現(xiàn)n+0.5分頻時鐘。因此,,保持n-1為半個時鐘周期即是該設計的關鍵,。從中可以發(fā)現(xiàn),因為計數(shù)器是通過時鐘上升沿計數(shù),,故可在計數(shù)為n-1時對計數(shù)觸發(fā)時鐘進行翻轉(zhuǎn),,那么,時鐘的下降沿就變成了上升沿,。即在計數(shù)值為n-1期間的時鐘下降沿變成了上升沿,,也就是說,計數(shù)值n-1只保持了半個時鐘周期,。由于時鐘翻轉(zhuǎn)下降沿變成上升沿,,因此,計數(shù)值變?yōu)?,。所以,,每產(chǎn)生一個n+0.5分頻時鐘的周期,,觸發(fā)時鐘都要翻轉(zhuǎn)一次。圖4給出了通用的半整數(shù)分頻器的電路原理圖,。
圖5所示是一個分頻系數(shù)為2.5的分頻器電路,,該電路是用FPGA來設計半整數(shù)分頻器的。它由模3計數(shù)器,、異或門和D觸發(fā)器組成,。圖6是其仿真波形圖。
3 任意整數(shù)帶小數(shù)分頻
任意整數(shù)帶小數(shù)分頻的基本原理是采用脈沖吞吐計數(shù)器和鎖相環(huán)技術先設計兩個不同分頻比的整數(shù)分頻器,,然后通過控制單位時間內(nèi)兩種分頻比出現(xiàn)的不同次數(shù)來獲得所需要的小數(shù)分頻值,。若設計一個分頻系數(shù)為10.1的分頻器,即可以將分頻器設計成9次10分頻和1次11分頻,,這樣,,總的分頻值為:
F=(9×10+1×11)/(9+1)=10.1
從這種實現(xiàn)方法的特點可以看出,由于分頻器的分頻值不斷改變,,分頻后得到的信號抖動一般較大,。當分頻系數(shù)為N-0.5(N為整數(shù))時,可控制扣除脈沖的時間,,以使輸出成為一個穩(wěn)定的脈沖頻率,而不是一次N分頻,,一次N-1分頻,。一般而言,這種分頻由于分頻輸出的時鐘脈沖抖動很大,,故在設計中的使用已經(jīng)非常少,。但是,這也是可以實現(xiàn)的,。
4 結束語
利用本文介紹的方法可在對時鐘要求比較嚴格的FPGA系統(tǒng)中,,用FPGA內(nèi)嵌的鎖相環(huán)資源來實現(xiàn)分頻。該設計方法簡單方便,、節(jié)約資源,、可移置性強、便于系統(tǒng)升級,,因此,,在時鐘要求不太嚴格的系統(tǒng)中應用非常廣泛,同時在以后的FPGA設計發(fā)展中也有很大的應用空間,。