任意數(shù)值分頻器的FPGA實現(xiàn)
摘要:本文介紹了一種基于FPGA的多數(shù)值分頻器的設計,該分頻器可以實現(xiàn)占空比及分頻系數(shù)可調(diào),其分頻數(shù)值可以是整數(shù)、小數(shù)和分數(shù)。文章給出了使用Altera公司的Cyelon eII系列EP2C5Q208C型FPGA芯片中實現(xiàn)后的仿真結(jié)果和測試結(jié)果,這些結(jié)果表明設計的正確性和可行性。分頻器采用VHDL語言編程實現(xiàn),用戶可以自行設置分頻器功能,這種分頻器設計具有很強的實用性和可移值性。
FPGA是數(shù)字系統(tǒng)主流控制器之一,成為目前硬件設計的研究重點。工程人員在數(shù)字系統(tǒng)的設計過程中,總會遇到各種各樣數(shù)值的分頻要求,比如偶數(shù)分頻、奇數(shù)分頻、半整數(shù)分頻、小數(shù)分頻等等,通常一些數(shù)字系統(tǒng)設計中,系統(tǒng)不僅對信號頻率有要求嚴格,而且對占空比也有嚴格的要求。整數(shù)分頻器的實現(xiàn)比較簡單,可以采用標準的計數(shù)器或可編程邏輯器件得以設計實現(xiàn)。但0.5倍整數(shù)分頻和等占空比的奇數(shù)分頻實現(xiàn)起來就比較困難,小數(shù)分頻和分數(shù)分頻就更加困難難。計數(shù)器構(gòu)成的分頻器,大多只能實現(xiàn)整數(shù)分頻,或者只能實現(xiàn)半整數(shù)分頻和奇數(shù)分頻。而實現(xiàn)小數(shù)分頻的多數(shù)是專用分頻器,針對這一問題,本人首先設計了各種數(shù)值的分頻器,然后增加一個控制模塊,用拔碼開關(guān)選擇分頻類型,即由撥碼的二進制數(shù)確定是偶數(shù)分頻、奇數(shù)分頻、小數(shù)分頻還是分數(shù)分頻。各種數(shù)值分頻器由控制模塊決定其分頻的工作狀態(tài),最后綜合起來成為通用分頻器。根據(jù)分頻器分頻原理,摸索出了一種簡單的設計方法,設計了任意數(shù)值分頻器。
1 偶數(shù)分頻器的設計
偶數(shù)分頻最易于實現(xiàn),可以利用計數(shù)器實現(xiàn)。假設要設計M=2N的偶數(shù)分頻,當計數(shù)值計數(shù)到0到K-1時(K用于調(diào)節(jié)占空比),輸出的電平為1,計數(shù)器的計數(shù)值K到2N-1時,輸出的狀態(tài)為0。計數(shù)器計數(shù)到2N-1時計數(shù)器復位為0。如此循環(huán)下去,便可實現(xiàn)占空比為K/2N偶數(shù)分頻,這里M和K都是可調(diào)整的預置數(shù),K調(diào)整占空比,M調(diào)節(jié)分頻系數(shù)。圖1中M取值是6實現(xiàn)的是6分頻。即輸出時鐘頻率是輸入時鐘頻率的1/6。從圖1的仿真結(jié)果可以看出k=3=m/2,輸出時鐘占空比為50%。
2 奇數(shù)分頻器的設計
想要實現(xiàn)非50%占空比的奇數(shù)分頻,比如實現(xiàn)占空比為20%(1/5)、40%(2/5)、60%(3/5)、80%(4/5)的分頻器,我們可以采用類似于偶數(shù)分頻的方案就可以實現(xiàn)。但如果要實現(xiàn)占空比為50%的奇數(shù)分頻,就不能用偶數(shù)分頻中所采用的方案了。占空比50%奇數(shù)分頻實現(xiàn)起來會比較麻煩一點,這是因為計數(shù)值為奇數(shù),前半個和后半個周期所包含的不是整數(shù)個輸入時鐘脈沖clkin的周期。實現(xiàn)的方法很多,這里介紹一種占用資源少的方法。例如對時鐘脈沖CLKIN進行5分頻,前半個周期包含2.5個clkin周期,后半個周期包含2.5個clkin周期。需要定義兩個計數(shù)器,CNT1和CNT2,分別對輸入時鐘的上升沿和下降沿進行計數(shù),當計數(shù)值為0~((n/2)-1)時,輸出時鐘信號進行翻轉(zhuǎn),同時給計數(shù)器一個時鐘復位信號,下一個時鐘的上升沿到來時,計數(shù)器重新開始計數(shù),如此循環(huán)即可。計數(shù)器CNT1和CNT2計數(shù)方法完全一樣,只是翻轉(zhuǎn)邊沿不同。然后把這兩個計數(shù)值輸入一個組合邏輯作或運算,CLKOUT=CNT1+CNT2。圖2是CLKIN的5分頻。
推廣為一般方法:欲實現(xiàn)占空比為50%的2N+1分頻器,則需要對分頻時鐘上升和下降沿分別進行1/(2N+1)分頻,然后將兩個分頻所得的時鐘信號作或運算便可得到占空比為50%的2N+1分頻器。
3 小數(shù)分頻器的設計
實現(xiàn)小數(shù)分頻器的方法很多,但其原理都基本一樣,即通過可變分頻和多次平均的方法得到。本設計采用雙模前置小數(shù)分頻的方法設計。假設要進行m、n分頻(m、n都是整數(shù),且n<10),因為只有一位小數(shù),所以總共要進行10次分頻,總的規(guī)律是進行n次m+1分頻,10-n次m分頻。假設要進行k.mn分頻(k、m、n都是整數(shù)且m、n<10),由于小數(shù)是2位,所以總共要進行100次分頻,分頻的規(guī)律是進行mn次k+1分頻,100-mn次K分頻。也就是說不管是幾位小數(shù)總要進行兩種系數(shù)的分頻,兩種分頻究竟如何交叉進行,可以根據(jù)一定的規(guī)律計算出來,下面以2.7分頻為例進行講解。由上面的分析知道2.7分頻要進行7次3分頻,3次2分頻。總分頻值為:(7×3+3×2)/(7+3)=2.7,將小數(shù)部分7按倍累加,假設累加的值為A,如果A<10則進行2分頻,A<10的話下一次則加上7,此后,如果A≥10則進行3分頻,3分頻過后再將累加值減去3后與10比較以決定下一次分頻是7分頻還是2分頻,計算過程見表1。圖3是2.7小數(shù)分頻仿真波形。小數(shù)分頻器部分VHDL核心代碼如下:
4 分數(shù)分頻器設計
分數(shù)分頻器設計與小數(shù)分頻器的設計思想相似,假設進行分頻,總分頻次數(shù)是m決定的,分頻規(guī)律是:進行n次k+1分頻和m-n次k分頻。兩種分頻交替進行,計算方法也和小數(shù)分頻相似,是進行k分頻還是k+1分頻,要看累計值是大于分母還是小于分母。分頻計算過程見表2,只要在13次分頻中,進行7次3分頻,6次2分頻就可以的到,總分頻值為(7×3+6×2)/(7+6)=33/13。為了兩種分頻均勻,將分子累加,小于分母進行2分頻,大于等于分母作3分頻。表2是 的分頻規(guī)律。圖4是33/13分頻器仿真波形。
5 多數(shù)值分頻器的實現(xiàn)
將上述各模塊整合在一起,需要增加一個控制模塊,這樣就構(gòu)成了多數(shù)值分頻器。頂層原理圖見圖5。
當B=00時,實現(xiàn)整數(shù)分頻,當B=01時實現(xiàn)占空比50菰的奇數(shù)分頻,B=10時實現(xiàn)小數(shù)分頻,B=11時實現(xiàn)分數(shù)分頻。其中M、K控制整數(shù)分頻的分頻系數(shù)以及占空比。小數(shù)分頻時M、N分別調(diào)整整數(shù)部分和小數(shù)部分。分數(shù)分頻時K調(diào)整整數(shù)部分,M,N調(diào)整分母和分子值,雖然預置端口較多,但可調(diào)整性很好。
6 結(jié)束語
文中給出了基于FPGA的多數(shù)值分頻器的設計方法,設計采用自頂而下的設計方法,進行功能模塊的劃分,該分頻器可以實現(xiàn)偶數(shù)、奇數(shù)、小數(shù)、分數(shù)的分頻,有良好的可移值性,本設計選用EP2C5Q208C型FPGA芯片實現(xiàn),從綜合配置后的配置報告可以看出,本分頻器占用FPGA資源很小。仿真結(jié)果和硬件測試結(jié)果驗證了這個設計的有效性。對相關(guān)人員有一定的參考價值。