谷 濤,黃 勇,盧 晨
(廣西民族大學(xué) 信息科學(xué)與工程學(xué)院,廣西 南寧 530006)
Verilog HDL是電子設(shè)計(jì)的主流硬件描述語言之一(另一個(gè)是VHDL),采用硬件描述語言完成電路設(shè)計(jì)是當(dāng)前數(shù)字電路設(shè)計(jì)的主流方法.Quartus II是Altera公司的綜合性PLD/FPGA開發(fā)軟件,支持原理圖、VHDL、VerilogHDL 以及 AHDL(Altera Hardware Description Language)等多種設(shè)計(jì)輸入形式[1].Modelsim是MENTOR公司推出的業(yè)界最優(yōu)秀的HDL語言仿真軟件,Quartus II可以方便地調(diào)用Modelsim進(jìn)行電路設(shè)計(jì)的RTL級(jí)和門級(jí)仿真.盡管在目前大部分設(shè)計(jì)中,可以使用芯片廠家集成的鎖相環(huán)資源進(jìn)行時(shí)鐘的分頻,但通過硬件描述語言設(shè)計(jì)的時(shí)鐘分頻電路可以節(jié)省芯片內(nèi)部的鎖相環(huán)資源,而且消耗不多的邏輯單元就可以達(dá)到對(duì)時(shí)鐘操作的目的.所以在時(shí)鐘要求不高的電路設(shè)計(jì)中,使用語言來說設(shè)計(jì)分頻電路是必要的也是廣泛應(yīng)用的.筆者以Quartus II為設(shè)計(jì)平臺(tái),基于Verilog語言設(shè)計(jì)了一個(gè)任意整數(shù)分頻器,并在Modelsim中完成仿真[2-3].
任意整數(shù)不是奇數(shù)就是偶數(shù),所以筆者的設(shè)計(jì)思路分別對(duì)輸入時(shí)鐘源進(jìn)行奇分頻和偶分頻,然后再判斷分頻比是奇數(shù)還是偶數(shù).如果是奇數(shù)則選擇奇分頻器輸出的信號(hào)為最終輸出信號(hào)(此時(shí)偶分頻器在執(zhí)行分頻,但分頻比不符合要求),如果是偶數(shù)則選擇偶分頻器輸出的信號(hào)為最終輸出信號(hào)(此時(shí)奇分頻器在執(zhí)行分頻,但分頻比不符合要求).電路構(gòu)造簡單,在一定程度上縮短了輸入到輸出的時(shí)延.任意整數(shù)分頻器的實(shí)現(xiàn)框架如圖1所示.
如圖1所示,輸入信號(hào)clk分別經(jīng)過奇數(shù)分頻和偶數(shù)分頻,然后根據(jù)分頻比是奇數(shù)還是偶數(shù),選擇分頻后的輸出作為最終的輸出信號(hào)clkk.分頻比是奇數(shù),選擇奇數(shù)分頻后的輸出,是偶數(shù)則選擇偶數(shù)分頻后的輸出.對(duì)于二進(jìn)制形式的分頻比k,只需要根據(jù)最后一位是1還是0即可判定它是奇數(shù)還是偶數(shù).例如輸入分頻比是k[3∶0],可以根k[0]來判斷分頻比的奇偶性.
圖1 任意整數(shù)分頻器的實(shí)現(xiàn)原理框圖Fig.1Implementation principle of arbitrary integer frequency divider
k倍奇數(shù)分頻有兩種實(shí)現(xiàn)辦法:
1)首先進(jìn)行k/2分頻(帶小數(shù),即等于(k-1)/2+0.5),然后再進(jìn)行二分頻得到[4].這種辦法需要先實(shí)現(xiàn)小數(shù)分頻,比較麻煩,所以筆者采用第二種奇分頻方法.
2)通過計(jì)數(shù)器來實(shí)現(xiàn).一般的方法為:對(duì)于實(shí)現(xiàn)占空比為50%的k倍奇數(shù)分頻,首先進(jìn)行輸入時(shí)鐘上升沿觸發(fā)模k計(jì)數(shù)(從0計(jì)到k-1),計(jì)數(shù)到1時(shí)輸出時(shí)鐘翻轉(zhuǎn),然后經(jīng)過(k-1)/2個(gè)脈沖上升沿計(jì)數(shù)到(k+1)/2時(shí)輸出時(shí)鐘再次翻轉(zhuǎn).然后繼續(xù)計(jì)數(shù),計(jì)到k-1時(shí)計(jì)數(shù)器清零繼續(xù)計(jì)數(shù),再次計(jì)到1時(shí)輸出時(shí)鐘再翻轉(zhuǎn)一次.這樣可以得到一個(gè)占空比非50%的奇數(shù)k分頻時(shí)鐘.再者同時(shí)進(jìn)行輸入時(shí)鐘下降沿觸發(fā)模k計(jì)數(shù)(從0計(jì)到k-1),計(jì)數(shù)到1時(shí)輸出時(shí)鐘翻轉(zhuǎn),然后經(jīng)過(k-1)/2個(gè)脈沖下降沿計(jì)數(shù)到(k+1)/2時(shí)輸出時(shí)鐘再次翻轉(zhuǎn).然后繼續(xù)計(jì)數(shù),計(jì)到k-1時(shí)清零并繼續(xù)計(jì)數(shù),再次計(jì)到1時(shí)輸出時(shí)鐘再翻轉(zhuǎn)一次.這樣得到另一個(gè)占空比非50%的奇數(shù)k分頻時(shí)鐘.兩個(gè)模k計(jì)數(shù)依次這樣循環(huán)下去,得到的輸出時(shí)鐘為兩個(gè)占空比非50%的輸入時(shí)鐘k分頻.把它們相或運(yùn)算,得到占空比為50%的奇數(shù)k分頻時(shí)鐘.以5分頻為例,奇數(shù)分頻的實(shí)現(xiàn)原理如圖2.
圖2 5分頻原理圖Fig.2Schematic diagram of frequency divider(mode=5)
以5分頻為例,在圖2中可以看到,k1內(nèi)部的計(jì)數(shù)器對(duì)clk的上升沿計(jì)數(shù),k1的輸出波形初始為低電平,遇到第1個(gè)上升沿計(jì)0,遇到第2個(gè)上升沿計(jì)1,此時(shí)k1的輸出波形翻轉(zhuǎn)為高電平.遇到第3個(gè)上升沿計(jì)2,遇到第4個(gè)上升沿計(jì)3,此時(shí)k1的輸出波形翻轉(zhuǎn)為低電平.遇到第5個(gè)上升沿計(jì)4,第6個(gè)上升沿計(jì)數(shù)器清零,第7個(gè)上升沿計(jì)1,此時(shí)k1的輸出波形再次翻轉(zhuǎn),為高電平.然后依次類推……我們可以看到從第2個(gè)上升沿到第7個(gè)上升沿之間,k1的輸出波形形成了一個(gè)完整的脈沖.隨著第8個(gè)及后續(xù)上升沿的到來,k1的計(jì)數(shù)器計(jì)數(shù)和輸出波形依次循環(huán)下去.k1的輸出波形是對(duì)clk的5分頻,但占空比不是50%.k2的內(nèi)部計(jì)數(shù)器計(jì)數(shù)和輸出波形翻轉(zhuǎn)辦法與k1類似,只不過k2是對(duì)clk的下降沿計(jì)數(shù).從圖2中還可以看到把k1和k2相或,可以得到占空比為50%的5分頻信號(hào)k.
偶數(shù)分頻原理為:當(dāng)進(jìn)行占空比為50%的k倍偶數(shù)分頻時(shí),可以由待分頻信號(hào)clk的上升沿去觸發(fā)計(jì)數(shù)器計(jì)數(shù).當(dāng)計(jì)數(shù)器從0計(jì)數(shù)到(k/2)-1時(shí),輸出信號(hào)進(jìn)行翻轉(zhuǎn),同時(shí)給計(jì)數(shù)器賦值為零.待分頻信號(hào)clk的下一個(gè)上升沿到來時(shí)重新從0開始計(jì)數(shù),計(jì)數(shù)到(k/2)-1時(shí),輸出信號(hào)再次進(jìn)行翻轉(zhuǎn),計(jì)數(shù)器再次賦值為零,以此循環(huán)下去.采用這種方法可以實(shí)現(xiàn)占空比為50% 的任意偶數(shù)倍分頻[5].這里不再做詳細(xì)敘述.
因?yàn)榭梢愿鶕?jù)k[0]來判斷分頻比k[n∶0]的奇偶性,所以把k[0]作為選擇輸出信號(hào)的依據(jù).k[0]=1選擇奇數(shù)分頻的輸出作為最終輸出信號(hào),k[0]=0選擇偶數(shù)分頻的輸出作為最終輸出信號(hào).這個(gè)在Verilog中可以用條件賦值語句實(shí)現(xiàn),具體語句將在下面的程序中給出.
module kfenpin(rst_n,clk,k,clkk);// 該 例 中任意整數(shù)k為輸入值k
程序中rst_n是全局的復(fù)位信號(hào);clk是輸入的待分頻時(shí)鐘信號(hào);k是輸入的分頻比,該例程序中是4位二進(jìn)制輸入信號(hào),可以改變位寬來達(dá)到實(shí)現(xiàn)更大分頻比的目的;clkk是分頻后的輸出信號(hào).
任意整數(shù)k分頻器的測試程序如下:
在上述設(shè)計(jì)程序和測試程序下,在Quartus II程序中調(diào)用Modelsim,可以看到仿真結(jié)果.
在測試程序中,k賦不同的值,就可以得到相應(yīng)的分頻輸出.下面給出k=2,k=7,k=8的仿真結(jié)果:
可以看到除了最初的幾個(gè)周期外(具體幾個(gè)周期與分頻比有關(guān)),輸出信號(hào)是輸入信號(hào)的k分頻.該例程序的2分頻的仿真測試也可以通過.
圖3 k=2時(shí)的仿真結(jié)果(2分頻輸出)Fig.3The simulation results when k =2(2divider output)
圖4 k=7時(shí)的仿真結(jié)果(7分頻輸出)Fig.4The simulation results when k =7(7divider output)
圖5 k=8時(shí)的仿真結(jié)果(8分頻輸出)Fig.5The simulation results when k =8(8divider output)
[1]潘松,等.EDA技術(shù)實(shí)用教程-Verilog HDL版[M].北京:科學(xué)出版社,2013.
[2]帥旗.基于FPGA的全數(shù)字鎖相環(huán)的設(shè)計(jì)與實(shí)現(xiàn)[D].大連理工大學(xué)工程碩士學(xué)位論文,2013.
[3]張成.基于FPGA的全數(shù)字鎖相環(huán)的設(shè)計(jì)與應(yīng)用[D].合肥工業(yè)大學(xué)碩士學(xué)位論文,2010.
[4]鄧玉元,等.數(shù)字電路中等占空比分頻器的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2006(24).
[5]黃國達(dá).基于FPGA的任意整數(shù)分頻器的設(shè)計(jì)[J].福建電腦,2013(7).