郜繼紅,荀延龍,盧旭盛
(1.內(nèi)蒙古工業(yè)大學(xué) 電力學(xué)院,內(nèi)蒙古 呼和浩特 010051;2.內(nèi)蒙古工業(yè)大學(xué) 信息學(xué)院,內(nèi)蒙古 呼和浩特 010051)
FPGA是數(shù)字系統(tǒng)主流控制器之一,成為目前硬件設(shè)計(jì)的研究重點(diǎn)[1]。工程人員在數(shù)字系統(tǒng)的設(shè)計(jì)過程中,總會(huì)遇到各種各樣數(shù)值的分頻要求,比如偶數(shù)分頻、奇數(shù)分頻、半整數(shù)分頻、小數(shù)分頻等等,通常一些數(shù)字系統(tǒng)設(shè)計(jì)中,系統(tǒng)不僅對信號頻率有要求嚴(yán)格,而且對占空比也有嚴(yán)格的要求。整數(shù)分頻器的實(shí)現(xiàn)比較簡單,可以采用標(biāo)準(zhǔn)的計(jì)數(shù)器或可編程邏輯器件得以設(shè)計(jì)實(shí)現(xiàn)。但0.5倍整數(shù)分頻和等占空比的奇數(shù)分頻實(shí)現(xiàn)起來就比較困難 ,小數(shù)分頻和分?jǐn)?shù)分頻就更加困難難[2]。計(jì)數(shù)器構(gòu)成的分頻器,大多只能實(shí)現(xiàn)整數(shù)分頻,或者只能實(shí)現(xiàn)半整數(shù)分頻和奇數(shù)分頻。而實(shí)現(xiàn)小數(shù)分頻的多數(shù)是專用分頻器,針對這一問題,本人首先設(shè)計(jì)了各種數(shù)值的分頻器,然后增加一個(gè)控制模塊,用撥碼開關(guān)選擇分頻類型,即由撥碼的二進(jìn)制數(shù)確定是偶數(shù)分頻、奇數(shù)分頻、小數(shù)分頻還是分?jǐn)?shù)分頻。各種數(shù)值分頻器由控制模塊決定其分頻的工作狀態(tài),最后綜合起來成為通用分頻器。根據(jù)分頻器分頻原理,摸索出了一種簡單的設(shè)計(jì)方法,設(shè)計(jì)了任意數(shù)值分頻器。
偶數(shù)分頻最易于實(shí)現(xiàn),可以利用計(jì)數(shù)器實(shí)現(xiàn)[3-4]。假設(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%。
圖1 CLKIN的6分頻仿真結(jié)果Fig.1 Simulation results of 6 frequency divider
想要實(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)的方法很多,這里介紹一種占用資源少的方法。例如對時(shí)鐘脈沖CLKIN進(jìn)行5分頻,前半個(gè)周期包含2.5個(gè)clkin周期,后半個(gè)周期包含2.5個(gè)clkin周期。需要定義兩個(gè)計(jì)數(shù)器,CNT1和CNT2,分別對輸入時(shí)鐘的上升沿和下降沿進(jìn)行計(jì)數(shù),當(dāng)計(jì)數(shù)值為0~((n/2)-1)時(shí),輸出時(shí)鐘信號進(jìn)行翻轉(zhuǎn),同時(shí)給計(jì)數(shù)器一個(gè)時(shí)鐘復(fù)位信號,下一個(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分頻。
圖2 CLKIN的50%占空比的5分頻仿真Fig.2 Simulation results of 5 frequency divider for duty Ratio 50%
推廣為一般方法:欲實(shí)現(xiàn)占空比為50%的2N+1分頻器,則需要對分頻時(shí)鐘上升和下降沿分別進(jìn)行1/(2N+1)分頻,然后將兩個(gè)分頻所得的時(shí)鐘信號作或運(yùn)算便可得到占空比為50%的2N+1分頻器[4]。
實(shí)現(xiàn)小數(shù)分頻器的方法很多,但其原理都基本一樣,即通過可變分頻和多次平均的方法得到[5-6]。本設(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分頻。總分頻值為:(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核心代碼如下:
表1 2.7分頻計(jì)算序列計(jì)算值Tab.1 The value of 2.7 dividing calculation sequence
圖3 2.7小數(shù)分頻仿真波形Fig.3 Simulation waveform of 2.7 frequency divider
表2 分頻規(guī)律Tab.2 The law of frequency divider
表2 分頻規(guī)律Tab.2 The law of frequency divider
分頻次數(shù) 累加值 分頻系數(shù)1 7 2 2 14 3 3 11 2 4 18 3 5 15 3 6 12 2 7 19 3 8 16 3 9 13 2 10 10 2 11 17 3 12 14 3 13 11 2
圖4 33/13分頻器仿真波形Fig.4 Simulation waveform of 33/13 frequency divider
將上述各模塊整合在一起,需要增加一個(gè)控制模塊,這樣就構(gòu)成了多數(shù)值分頻器。頂層原理圖見圖5。
圖5 任意分頻器原理圖Fig.5 Schematic diagram of any frequency divider
當(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)整性很好。
文中給出了基于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é)果和硬件測試結(jié)果驗(yàn)證了這個(gè)設(shè)計(jì)的有效性。對相關(guān)人員有一定的參考價(jià)值。
[1]張靜亞.FPGA系統(tǒng)設(shè)計(jì)中資源分配的分析和研究[J].信息化研究,2009,35(3):37-39.
[2]王廣義,趙衛(wèi)華,趙艷秋.一種小數(shù)分頻器的設(shè)計(jì)及性能研究[J].自動(dòng)化技術(shù)與應(yīng)用,2007,26(9):101-102.
[3]潘松,黃繼業(yè).EDA技術(shù)實(shí)用教程[M].3版.北京:科學(xué)出版社,2006.
[4]劉愛榮,王振成,陳揚(yáng),等.EDA技術(shù)CPLD/FPGA開發(fā)應(yīng)用簡明教程[M].2版.北京:清華大學(xué)出版社,2013.
[5]李炯.一種基于FPGA的任意分頻器設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2012,25(24):185-186
[6]黃守麟.基于FPGA的超高精度任意小數(shù)分頻器的設(shè)計(jì)[J].計(jì)算機(jī)工程與應(yīng)用,2008,(33s):485-487.
[7]周鵬,和衛(wèi)星,匡敏馳,等.FPGA在PC-104系統(tǒng)I/O設(shè)備擴(kuò)展中的應(yīng)用[J].工業(yè)儀表與自動(dòng)化裝置,2013(2):50-53,72.
[8]程光偉,劉大偉.基于FPGA的異步FIFO的研究和設(shè)計(jì)[J].工業(yè)儀表與自動(dòng)化裝置,2013(2):67-69,75.