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