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