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