摘要:在設(shè)計(jì)數(shù)字電路過程中,通常所需的頻率要根據(jù)給定的頻率進(jìn)行分頻來得到。時(shí)鐘分頻又分為整數(shù)分頻和小數(shù)分頻,有時(shí)還有會有分?jǐn)?shù)分頻。當(dāng)基準(zhǔn)時(shí)鐘與所需的頻率成整數(shù)倍關(guān)系時(shí)為整數(shù)分頻,可以采用標(biāo)準(zhǔn)的計(jì)數(shù)器實(shí)現(xiàn),也可以采用可編程邏輯器件實(shí)現(xiàn)。當(dāng)基準(zhǔn)時(shí)鐘與所需的頻率不成整數(shù)倍關(guān)系時(shí)為小數(shù)分頻,可以采用小數(shù)分頻器實(shí)現(xiàn)分頻。本文通過XC2V1000-4FG456型號的FPGA對8192kHz的基準(zhǔn)時(shí)鐘進(jìn)行分頻,分別得到1024kHz、512kHz、256kHz和1kHz的時(shí)鐘頻率。設(shè)計(jì)中利用了VHDL硬件描述語言,通過ISE9.1邏輯設(shè)計(jì)工具和Modelsim6.5仿真工具完成了數(shù)字分頻器的設(shè)計(jì)。
關(guān)鍵詞:分頻器;FPGA;VHDL;Modelsim6.5
中圖分類號:TP332文獻(xiàn)標(biāo)識碼:A
文章編號:
Design of Digital Frequency Divider Based on the FPGA
Zhaoli,Zhao Zhiguo,Tang Fangfu
Zhuhai Orbita Control Engineering Co.,Ltd., Zhuhai 519080, China
Abstract: In the process of designing a digital circuit, the frequency is usually required to be divided according to the given frequency. Clock frequency divided into integer and fractional frequency division, and sometimes there will be fractional frequency. When the reference clock and the integer times frequency relations for integer frequency division, can use the standard counter, can also be realized by using programmable logic devices.When the reference clock and the frequency of the required no integer times relationship for decimal frequency division, and the decimal frequency divider can be used to realize frequency division. In this paper, the 8192kHz reference clock is divided by the XC2V1000-4FG456 model FPGA to obtain the clock frequencies of 1024kHz, 512kHz, 256kHz and 1kHz respectively. The design uses the VHDL hardware description language, through the ISE9.1 logic design tools and Modelsim6.5 simulation tools to complete the design of digital frequency divider.
Key words:Frequency Divider; FPGA; VHDL; Modelsim6.5
1. 概述
隨著集成電路技術(shù)的快速發(fā)展,半導(dǎo)體存儲、微處理器等相關(guān)技術(shù)的發(fā)展得到了飛速發(fā)展。FPGA以其可靠性強(qiáng)、運(yùn)行快、并行性等特點(diǎn)在電子設(shè)計(jì)中具有廣泛的意義。作為一種可編程邏輯器件,F(xiàn)PGA在短短二十年中從電子設(shè)計(jì)的外圍器件逐漸演變?yōu)閿?shù)字系統(tǒng)的核心。伴隨著半導(dǎo)體工藝技術(shù)的進(jìn)步,F(xiàn)PGA器件的設(shè)計(jì)技術(shù)取得了飛躍發(fā)展及突破。
分頻器通常用來對某個(gè)給定的時(shí)鐘頻率進(jìn)行分頻,以得到所需的時(shí)鐘頻率。在設(shè)計(jì)數(shù)字電路中會經(jīng)常用到多種不同頻率的時(shí)鐘脈沖,一般采用由一個(gè)固定的晶振時(shí)鐘頻率來產(chǎn)生所需要的不同頻率的時(shí)鐘脈沖的方法進(jìn)行時(shí)鐘分頻。
在FPGA的設(shè)計(jì)中分頻器是使用頻率較高的基本設(shè)計(jì),在很多的設(shè)計(jì)中也會經(jīng)常用到芯片集成的鎖相環(huán)資源,如用Xilinx的DLL以及Altera的PLL來進(jìn)行時(shí)鐘的分頻、倍頻與相移。在一些對時(shí)鐘精度不高的場合,會經(jīng)常利用硬件描述語言來對時(shí)鐘源進(jìn)行時(shí)鐘分頻。
分頻器是一種基本電路,一般包括數(shù)字分頻器、模擬分頻器和射頻分頻器。根據(jù)不同設(shè)計(jì)的需要,有時(shí)還會要求等占空比。數(shù)字分頻器采用的是計(jì)數(shù)器的原理,權(quán)值為分頻系數(shù)。模擬分頻器就是一個(gè)頻率分配器,用帶阻帶通實(shí)現(xiàn)(比如音箱上高中低喇叭的分配器)。射頻分頻器也是濾波器原理,用帶內(nèi)外衰減,阻抗匹配實(shí)現(xiàn)。
隨著FPGA技術(shù)的發(fā)展,基于FPGA技術(shù)的硬件設(shè)計(jì)數(shù)字分頻器已成為數(shù)字系統(tǒng)設(shè)計(jì)的研究重點(diǎn)。數(shù)字分頻器通常分為整數(shù)分頻器和小數(shù)分頻器。在有些需求下還要分?jǐn)?shù)分頻器。
本設(shè)計(jì)是基于FPGA的數(shù)字分頻器,通過VHDL硬件設(shè)計(jì)語言,在Modelsim6.5上對設(shè)計(jì)的分頻器進(jìn)行仿真驗(yàn)證。
2. 數(shù)字分頻器的設(shè)計(jì)
數(shù)字分頻器的設(shè)計(jì)與模擬分頻器的設(shè)計(jì)不同,數(shù)字分頻器可以使用觸發(fā)器設(shè)計(jì)電路對時(shí)鐘脈沖進(jìn)行時(shí)鐘分頻。分頻器的一個(gè)重要指標(biāo)就是占空比,即在一個(gè)周期中高電平脈沖在整個(gè)周期中所占的比例。占空比一般會有1:1,1: N等不同比例的要求,由于占空比的比例要求不一樣,所以采用的時(shí)鐘分頻原理也各不同。在FPGA的數(shù)字分頻器設(shè)計(jì)中,主要分為整數(shù)分頻器、小數(shù)分頻器和分?jǐn)?shù)分頻器?,F(xiàn)在分別介紹整數(shù)分頻器的設(shè)計(jì)、小數(shù)分頻器的設(shè)計(jì)和分?jǐn)?shù)分頻器的設(shè)計(jì)。
2.1 整數(shù)分頻器的設(shè)計(jì)
整數(shù)分頻器是指基準(zhǔn)時(shí)鐘與所需的時(shí)鐘頻率成整數(shù)倍關(guān)系。整數(shù)分頻器的分頻種類一般包括奇數(shù)分頻和偶數(shù)分頻。雖然時(shí)鐘分頻原理會根據(jù)時(shí)鐘分頻的要求不同而不同,但均可采用標(biāo)準(zhǔn)計(jì)數(shù)器原理來實(shí)現(xiàn)。
偶數(shù)分頻器的設(shè)計(jì)原理較為簡單,主要是利用計(jì)數(shù)器來實(shí)現(xiàn)。假設(shè)要進(jìn)行n(n為偶數(shù))分頻,設(shè)定一個(gè)在分頻時(shí)鐘上升沿觸發(fā)的計(jì)數(shù)器循環(huán)計(jì)數(shù)來實(shí)現(xiàn)。當(dāng)計(jì)數(shù)器值為0-((n/2)-1)時(shí),輸出時(shí)鐘信號進(jìn)行翻轉(zhuǎn),同時(shí)給計(jì)數(shù)器一個(gè)復(fù)位信號,使下一個(gè)時(shí)鐘上升沿到來時(shí),計(jì)數(shù)器重新開始計(jì)數(shù),由此不斷循環(huán)。
奇數(shù)分頻器的設(shè)計(jì)原理與偶數(shù)分頻的設(shè)計(jì)方法很相似,都是通過計(jì)數(shù)器來實(shí)現(xiàn)的。如果要進(jìn)行n(n為奇數(shù))分頻,直接設(shè)計(jì)n進(jìn)制的計(jì)數(shù)器即可。還有一種方法就是選擇兩個(gè)計(jì)數(shù)器cnt1和cnt2,分別在時(shí)鐘上升沿和下降沿觸發(fā)計(jì)數(shù)。cnt1和cnt2均當(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ù),如此進(jìn)行循環(huán)下去。由此可知,計(jì)數(shù)器cnt1和cnt2的實(shí)現(xiàn)方法一樣,只是翻轉(zhuǎn)邊沿不一樣,最終輸出的時(shí)鐘為clkout = clk1 + clk2。
2.2 小數(shù)分頻器的設(shè)計(jì)
小數(shù)分頻的基本原理是采用脈沖吞吐計(jì)數(shù)器和鎖相環(huán)技術(shù)先設(shè)計(jì)兩個(gè)不同分頻比的整數(shù)分頻器,然后通過控制單位時(shí)間內(nèi)兩種分頻比出現(xiàn)的不同次數(shù)來獲得所需的小數(shù)分頻值,分頻系數(shù)為N-0.5(N為整數(shù))時(shí),可控制扣除脈沖的時(shí)間,以使輸出成為一個(gè)穩(wěn)定的脈沖頻率,而不是一次N分頻,一次N-1分頻。
小數(shù)分頻器有很多種設(shè)計(jì)方案,但其基本原理是一樣的,都是在若干個(gè)分頻周期中采取某種方法使幾個(gè)周期多計(jì)一個(gè)數(shù)或少計(jì)一個(gè)數(shù),從而在整個(gè)計(jì)數(shù)周期的總體平均意義上獲得一個(gè)小數(shù)分頻比。還有一種分頻方法就是,利用狀態(tài)機(jī)和計(jì)數(shù)器。假設(shè)時(shí)鐘信號的頻率為1khz,需要產(chǎn)生750khz的分頻信號,其分頻系數(shù)為6/8。基本設(shè)計(jì)思想是,在8個(gè)時(shí)鐘信號中保留6個(gè)時(shí)鐘信號。這種方法是需要預(yù)先設(shè)定狀態(tài)機(jī)的個(gè)數(shù),主要用于已經(jīng)知道需要使用哪一個(gè)小數(shù)分頻系數(shù)的情況下。如果分頻系數(shù)發(fā)生變化,則需要在程序內(nèi)部進(jìn)行修改。
雙模前置小數(shù)分頻的設(shè)計(jì)方法是,假設(shè)要進(jìn)行m,n時(shí)鐘分頻(其中m、n都是整數(shù),且n<10),因?yàn)橹挥幸晃恍?shù),所以總共要進(jìn)行10次分頻??偟囊?guī)律是:進(jìn)行n次m+1分頻,10-n次m分頻。例如,設(shè)計(jì)一個(gè)分頻系數(shù)為3.6的分頻器,將小數(shù)部分的6按倍累加,假設(shè)累加的值為a,如果a<10,則進(jìn)行3分頻,如果a<10下一次則加上6。此后,如果a>=10,則進(jìn)行4分頻,4分頻過后再將累加值減去4后與10比較以決定下一次分頻是4分頻還是3分頻,這樣分頻器設(shè)計(jì)成6次4分頻,4次3分頻,總的分頻值為(6×4+4×3)/(6+4) = 3.6。
2.3 分?jǐn)?shù)分頻器的設(shè)計(jì)
分?jǐn)?shù)分頻器的數(shù)據(jù)輸入部分與小數(shù)分頻基本相同,差別僅在于數(shù)碼管顯示部分顯示三位分頻系數(shù)。由于分?jǐn)?shù)在一定情況下可以轉(zhuǎn)化為小數(shù)進(jìn)行計(jì)算,所以分?jǐn)?shù)分頻的設(shè)計(jì)思想與小數(shù)分頻的很相似。假設(shè)進(jìn)行分頻,總分頻數(shù)由分母m決定,規(guī)律是進(jìn)行n次j+1分頻和m-n次j分頻。兩種分頻交替進(jìn)行的計(jì)算方法和小數(shù)分頻的很類似。累加分結(jié)果是大于等于分母還是小于分母決定是進(jìn)行j分頻還是j+1分頻。
3. 數(shù)字分頻器的FPGA設(shè)計(jì)及仿真
利用FPGA對8192kHz的基準(zhǔn)時(shí)鐘進(jìn)行時(shí)鐘分頻,分別得到1024kHz、512kHz、256kHz和1kHz的時(shí)鐘頻率,需要分別進(jìn)行8分頻、16分頻、32分頻和8192分頻。在利用FPGA進(jìn)行設(shè)計(jì)整數(shù)分頻器時(shí),通過VHDL硬件描述語言利用計(jì)數(shù)器方式來實(shí)現(xiàn)。
3.1 1024kHz時(shí)鐘分頻
根據(jù)所需的時(shí)鐘頻率為1024kHz的時(shí)鐘,而晶振時(shí)鐘的頻率為8192kHz,晶振時(shí)鐘與所需的時(shí)鐘頻率恰巧是8倍的整數(shù)倍關(guān)系,因此需要對8192kHz的晶振時(shí)鐘進(jìn)行8分頻來獲得所需要的時(shí)鐘。根據(jù)整數(shù)倍分頻器的設(shè)計(jì)方法原理,通過ISE9.1邏輯設(shè)計(jì)工具,利用VHDL硬件描述語言來進(jìn)行8分頻的分頻器設(shè)計(jì)。然而8又是偶數(shù),所以需要設(shè)計(jì)的是偶數(shù)分頻器。對設(shè)計(jì)的內(nèi)容通過Modelsim6.5仿真軟件進(jìn)行仿真驗(yàn)證,結(jié)果如圖3-1所示。
圖3-1 1024kHz時(shí)鐘分頻
由圖3-1得知,當(dāng)8192kHz的晶振時(shí)鐘輸入8個(gè)時(shí)鐘,系統(tǒng)輸出1個(gè)時(shí)鐘,即一個(gè)1024kHz頻率的時(shí)鐘。程序設(shè)計(jì)中采用計(jì)數(shù)器來實(shí)現(xiàn),當(dāng)計(jì)數(shù)器值為0-((n/2)-1)=-3時(shí),輸出時(shí)鐘信號進(jìn)行翻轉(zhuǎn),同時(shí)給計(jì)數(shù)器一個(gè)復(fù)位信號,使下一個(gè)時(shí)鐘上升沿到來時(shí),計(jì)數(shù)器重新開始計(jì)數(shù),不斷循環(huán)下去。
3.2 512kHz時(shí)鐘分頻
根據(jù)所需的時(shí)鐘頻率為512kHz的時(shí)鐘,而晶振時(shí)鐘的頻率為8192kHz,晶振時(shí)鐘與所需的時(shí)鐘頻率恰巧是16倍的整數(shù)倍關(guān)系,因此需要對8192kHz的晶振時(shí)鐘進(jìn)行16分頻來獲得所需要的時(shí)鐘。根據(jù)整數(shù)倍分頻器的設(shè)計(jì)方法原理,通過ISE9.1邏輯設(shè)計(jì)工具,利用VHDL硬件描述語言來進(jìn)行16分頻的分頻器設(shè)計(jì)。然而16又是偶數(shù),所以需要設(shè)計(jì)的是偶數(shù)分頻器。對設(shè)計(jì)的內(nèi)容通過Modelsim6.5仿真軟件進(jìn)行仿真驗(yàn)證,結(jié)果如圖3-2所示。
圖3-2 512kHz時(shí)鐘分頻
由圖3-2得知,當(dāng)8192kHz的晶振時(shí)鐘輸入16個(gè)時(shí)鐘,系統(tǒng)輸出1個(gè)時(shí)鐘,即一個(gè)512kHz頻率的時(shí)鐘。程序設(shè)計(jì)中采用計(jì)數(shù)器來實(shí)現(xiàn),當(dāng)計(jì)數(shù)器值為0-((n/2)-1)=-7時(shí),輸出時(shí)鐘信號進(jìn)行翻轉(zhuǎn),同時(shí)給計(jì)數(shù)器一個(gè)復(fù)位信號,使下一個(gè)時(shí)鐘上升沿到來時(shí),計(jì)數(shù)器重新開始計(jì)數(shù),不斷循環(huán)下去。
3.3 256kHz時(shí)鐘分頻
根據(jù)所需的時(shí)鐘頻率為256kHz的時(shí)鐘,而晶振時(shí)鐘的頻率為8192kHz,晶振時(shí)鐘與所需的時(shí)鐘頻率恰巧是32倍的整數(shù)倍關(guān)系,因此需要對8192kHz的晶振時(shí)鐘進(jìn)行32分頻來獲得所需要的時(shí)鐘。根據(jù)整數(shù)倍分頻器的設(shè)計(jì)方法原理,通過ISE9.1邏輯設(shè)計(jì)工具,利用VHDL硬件描述語言來進(jìn)行32分頻的分頻器設(shè)計(jì)。然而32又是偶數(shù),所以需要設(shè)計(jì)的是偶數(shù)分頻器。對設(shè)計(jì)的內(nèi)容通過Modelsim6.5仿真軟件進(jìn)行仿真驗(yàn)證,結(jié)果如圖3-3所示。
圖3-3 256kHz時(shí)鐘分頻
由圖3-3得知,當(dāng)8192kHz的晶振時(shí)鐘輸入32個(gè)時(shí)鐘,系統(tǒng)輸出1個(gè)時(shí)鐘,即一個(gè)256kHz頻率的時(shí)鐘。程序設(shè)計(jì)中采用計(jì)數(shù)器來實(shí)現(xiàn),當(dāng)計(jì)數(shù)器值為0-((n/2)-1)=-15時(shí),輸出時(shí)鐘信號進(jìn)行翻轉(zhuǎn),同時(shí)給計(jì)數(shù)器一個(gè)復(fù)位信號,使下一個(gè)時(shí)鐘上升沿到來時(shí),計(jì)數(shù)器重新開始計(jì)數(shù),不斷循環(huán)下去。
3.4 1kHz時(shí)鐘分頻
根據(jù)所需的時(shí)鐘頻率為1kHz的時(shí)鐘,而晶振時(shí)鐘的頻率為8192kHz,晶振時(shí)鐘與所需的時(shí)鐘頻率恰巧是8192倍的整數(shù)倍關(guān)系,因此需要對8192kHz的晶振時(shí)鐘進(jìn)行8192分頻來獲得所需要的時(shí)鐘。根據(jù)整數(shù)倍分頻器的設(shè)計(jì)方法原理,通過ISE9.1邏輯設(shè)計(jì)工具,利用VHDL硬件描述語言來進(jìn)行8192分頻的分頻器設(shè)計(jì)。然而8192又是偶數(shù),所以需要設(shè)計(jì)的是偶數(shù)分頻器。對設(shè)計(jì)的內(nèi)容通過Modelsim6.5仿真軟件進(jìn)行仿真驗(yàn)證,結(jié)果如圖3-4所示。
圖3-4 1kHz時(shí)鐘分頻
由圖3-4得知,當(dāng)8192kHz的晶振時(shí)鐘輸入8個(gè)時(shí)鐘,系統(tǒng)輸出1個(gè)時(shí)鐘,即一個(gè)1kHz頻率的時(shí)鐘。程序設(shè)計(jì)中采用計(jì)數(shù)器來實(shí)現(xiàn),當(dāng)計(jì)數(shù)器值為0-((n/2)-1)=-4095時(shí),輸出時(shí)鐘信號進(jìn)行翻轉(zhuǎn),同時(shí)給計(jì)數(shù)器一個(gè)復(fù)位信號,使下一個(gè)時(shí)鐘上升沿到來時(shí),計(jì)數(shù)器重新開始計(jì)數(shù),不斷循環(huán)下去。
4. 結(jié)束語
本文給出了基于FPGA的數(shù)字分頻器設(shè)計(jì)方法。采用計(jì)數(shù)器設(shè)計(jì)方法實(shí)現(xiàn)了對8192kHz的基準(zhǔn)時(shí)鐘進(jìn)行分頻,分別得到1024kHz、512kHz、256kHz和1kHz的時(shí)鐘頻率。其他的偶數(shù)倍分頻也可采用類似的方法分頻的到需要的頻率時(shí)鐘。通過在Modelsim6.5仿真工具驗(yàn)證了設(shè)計(jì)的正確性。
參考文獻(xiàn)
[1] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].北京航空航天大學(xué)出版社,2008
[2] (美)Parag K.Lala著,喬廬峰等譯.現(xiàn)代數(shù)字設(shè)計(jì)與VHDL [M].電子工業(yè)出版社,2010
[3] 潘松,黃繼業(yè),潘明.EDA技術(shù)實(shí)用教程[M].科學(xué)出版社,2010
[4] 張奇惠,武超,王二萍,蔣俊華,張偉風(fēng).基于VerilogHDL的分頻器的優(yōu)化設(shè)計(jì)[J].河南大學(xué)學(xué)報(bào)(自然科學(xué)出版).2007,37(4):343
[5] 王世元,謝開明,石亞偉,陳孟鋼,龍正吉.一種新的可控分頻器的FPGA實(shí)現(xiàn)[J].西南大學(xué)學(xué)報(bào)(自然科學(xué)版)2007,29(1):89-93
[6] 劉亞海,林爭輝.基于FPGA的小數(shù)分頻器的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2008,28(3):113-117
[7] 蔡曉燕,F(xiàn)PGA數(shù)字邏輯設(shè)計(jì)[M].清華大學(xué)出版社,2013
[8] 徐志軍,徐光輝.CPLD/FPGA的開發(fā)與應(yīng)用[M].電子工業(yè)出版社,2002
[9] 王誠,薛小剛,鐘信潮.FPGA/CPLD設(shè)計(jì)工具[M].人民郵電出版社,2003
[10] 李秋生.一種改進(jìn)的小數(shù)分頻器設(shè)計(jì)方法[J].現(xiàn)代電子技術(shù).2009,08:43-46
[11] 徐德成.任意數(shù)分頻設(shè)計(jì)方法[J].科技廣場.2007,(11):219-220
[12] 古良玲,楊永明,郭巧惠.基于FPGA的半整數(shù)及整數(shù)分頻器的參數(shù)化設(shè)計(jì)[J].電子器件,2005,28(2): 404-406