一個數(shù)字系統(tǒng)中往往需要多種頻率的時鐘脈沖作為驅(qū)動源,這樣就需要對FPGA的系統(tǒng)時鐘(頻率較高)進行分頻。比如在進行流水燈、數(shù)碼管動態(tài)掃描設計時不能直接使用系統(tǒng)時鐘(太快而肉眼無法識別),或者需要進行通信時,由于通信速度不能太高(由不同的標準限定),這樣就需要對系統(tǒng)時鐘分頻以得到較低頻率的時鐘。
分頻器主要分為偶數(shù)分頻、奇數(shù)分頻、半整數(shù)分頻和小數(shù)分頻,如果在設計過程中采用參數(shù)化設計,就可以隨時改變參量以得到不同的分頻需要。
在對時鐘要求不是很嚴格的FPGA系統(tǒng)中,分頻通常都是通過計數(shù)器的循環(huán)計數(shù)來實現(xiàn)的。
偶數(shù)分頻(2N)
偶數(shù)分頻最為簡單,很容易用模為N的計數(shù)器實現(xiàn)50%占空比的時鐘信號,即每次計數(shù)滿N(計到N-1)時輸出時鐘信號翻轉(zhuǎn)。
奇數(shù)分頻(2N+1)
使用模為2N+1的計數(shù)器,讓輸出時鐘在X-1(X在0到2N-1之間)和2N時各翻轉(zhuǎn)一次,則可得到奇數(shù)分頻器,但是占空比并不是50%(應為 X/(2N+1))。
得到占空比為50%的奇數(shù)分頻器的基本思想是:將得到的上升沿觸發(fā)計數(shù)的奇數(shù)分頻輸出信號CLK1,和得到的下降沿觸發(fā)計數(shù)的相同(時鐘翻轉(zhuǎn)值相同)奇數(shù)分頻輸出信號CLK2,
最后將CLK1和CLK2相或之后輸出,就可以得到占空比為50%的奇數(shù)分頻器。原理圖如下:
用Quartus II 得到的占空比為50%的9分頻時鐘輸出信號outclk如下:
半整數(shù)分頻(N-0.5)
基本設計思想為:首先進行模N的計數(shù),計數(shù)到N-1時輸出時鐘翻轉(zhuǎn);而且在計數(shù)返回到0時,輸出時鐘再次翻轉(zhuǎn)。
所以,只要使計數(shù)值N-1保持半個時鐘周期,即可實現(xiàn)N-0.5分頻時鐘。那么如何保持半個時鐘周期呢?
因為計數(shù)器是上升沿觸發(fā)計數(shù),如果在計數(shù)值=N-1時把計數(shù)器的觸發(fā)時鐘翻轉(zhuǎn),則時鐘的下降沿就變成了上升沿。即計數(shù)值=N-1時,時鐘馬上翻轉(zhuǎn),
則計數(shù)值保持半個時鐘周期后,會遇到上升沿而使計數(shù)值歸0. 然后計數(shù)器以翻轉(zhuǎn)了的時鐘繼續(xù)計數(shù),在產(chǎn)生N-0.5個分頻周期后,時鐘再次翻轉(zhuǎn)。
怎樣才能夠使計數(shù)器的觸發(fā)時鐘在N-1時翻轉(zhuǎn)呢? 由半整數(shù)分頻器的原理圖可知,將輸出時鐘二分頻后和輸入時鐘相異或就可使觸發(fā)時鐘翻轉(zhuǎn)。