◆梁麗
基于FPGA的數字頻率計的設計與實現
◆梁麗
介紹基于FPGA的數字頻率計的開發過程、總體設計方案和各模塊的設計實現。借助于EDA平臺設計的數字頻率計,具有高速、精確、可靠、抗干擾性強和現場可編程等優點。
EDA技術;可編程邏輯器件;數字頻率計
10.3969/j.issn.1671-489X.2016.16.031
數字頻率計是計算機、通信設備、音頻視頻等科研生產領域不可缺少的測量儀器,以EDA工具作為開發手段。基于FPGA所設計的數字頻率計,具有高速、精確、可靠、抗干擾性強和現場可編程等優點。在設計中,所有頻段均采用直接測頻法對信號頻率進行測量,克服了逼近式換檔速度慢的缺點;在換檔設計方面,突破了以往改變閘門時間的方法,采用門控信號和被測信號對計數器的使能端進行雙重控制,使自動換檔的實現更加簡單可靠,提高了測量的精確度;在運算單元采用高速串行BCD碼除法,不僅提高了運算速度,而且減小了資源消耗。
設計一種基于FPGA的數字頻率計,要求:數字頻率計分為0~9.999 Hz、10.00~99.99 Hz、100.0~999.9 kHz和1000~9999 kHz四檔,且能夠實現自動換檔的功能。
數字頻率計總體框圖如圖1所示。數字頻率計由分頻器、計數器、鎖存器和譯碼器等模塊構成,系統有3個輸入信號,即兩個時鐘信號CLK、SIG和一個清除信號CLR。系統有5個輸出信號,即報警信號ALM、顯示信號Q、數碼管片選信號L、位控位A和位控位B。

圖1 數字頻率計總體框圖
分頻器模塊通過對時鐘信號CLK進行分頻,為計數器模塊提供1 s的閘門時間test-en。當test-en為高電平時,閘門被打開,被測信號的脈沖通過閘門進入計數器進行計數;當test-en下降沿到來時,產生一個鎖存信號,將計數值保存起來,由八段譯碼器譯碼并在數碼管顯示計數結果。鎖存數據后,在下次test-en上升沿到來之前產生清零信號,將計數器清零,為下次計數做準備。
采用模塊化的設計思想,依據系統設計要求自上至下地細化設計。頂層設計完成后,采用硬件描述語言對各模塊進行編程,在MAX+PLUSⅡ環境下進行編譯、功能仿真,創建各模塊的器件符號,待建立整體系統頂層文件時調用。
分頻器模塊分頻器模塊(FEN)通過對4 MHz時鐘信號進行分頻得到0.5 Hz時鐘,為計數器模塊(CORNA)提供1 s的閘門時間。根據給定的分頻值,分頻器模塊對4 MHz頻率進行1/2n的分頻,每來一個時鐘,中間值cnt狀態改變一次;經過n個cnt觸發處理后,就可以得到1/2n的分頻信號。
數碼管片選信號產生模塊數碼管片選信號產生模塊(SEL)把時鐘信號轉換成片選信號提供給輸出模塊。片選信號低電平時,表示其對應的數碼管可以進行顯示操作,數據信號輸出數碼管顯示所需的數據,即“000”“001”“010”“011”“100”“101”“110”和“111”。
計數器模塊計數器模塊(CORNA)通過對待測信號在基準時間內進行計數測量待測信號的頻率,完成對輸入時鐘信號的計數。由分頻器提供的使能信號DOOR為高電平時,允許計數;DOOR為低電平時,停止計數,并保持所計的數。當中間值c6不為零時,選擇4檔;當中間值c5不為零時,選擇3檔;當中間值c4不為零時,選擇2檔;否則選擇1檔,計數選檔結束后,將5個輸出信號傳給鎖存器。
鎖存器模塊鎖存器模塊(LOCK)在分頻器模塊輸出信號DOOR的下降沿到來時,將計數器的數值Q3、Q2、Q1、Q0、DANG鎖存。
數據輸出模塊數據輸出模塊(CH)對應于數碼管片選信號,將相應的數據送出,其中檔位也通過數碼管顯示。數據輸出模塊根據鎖存器和數碼管片選信號的輸出信號,實現數碼管的實時顯示。
八段譯碼驅動模塊八段譯碼驅動模塊(DISP)將輸入的BCD碼轉換為LED數碼管需要的數據,八段譯碼驅動模塊的仿真波形如圖2所示。

圖2 八段譯碼驅動模塊仿真圖

圖3 總體連接圖

圖4 系統仿真圖
D是八段譯碼驅動模塊的輸入信號,由數據輸出模塊輸出信號d賦予;Q是八段譯碼驅動模塊的輸出信號,對應于數碼管的8個顯示段。當d為“0000”時,q為3F;當d為“0001”時,q為06;當d為“0010”時,q為5B;當d為“0011”時,q為4F;當d為“0100”時,q為66;當d為“0101”時,q為6D;當d為“0110”時,q為7D;當d為“0111”時,q為27;當d為“1000”時,q為7F;當d為“1001”時,q為6F。
各模塊連接各模塊總體連接圖如圖3所示。CLK輸入至分頻器,SIG、CLR輸入至計數器,輸出報警信號ALM來自計數器,Q是八段譯碼器連接顯示器的輸出,L是數碼管片選信號產生模塊的輸出,輸出A和B是位控位[1]。
系統仿真波形如圖4所示。當輸入信號SIG、CLR、 CLK的值為“000”“010”“100”和“110”時,仿真波形相同。輸出信號Q在0.0~875.0 ns時為3F(即“0111111”),之后為0(即“0000000”)。輸出信號L在0.0~125.0 ns時為“000”,之后每隔250.0 ns依次為“001”“010”“011”“100”……輸出信號A和B為高電平。
EDA技術給電子系統設計帶來巨大的變革,特別是硬件描述語言的出現和發展,并與大規模可編程器件相結合,極大地提高了電子系統設計的效率和可用性,成為電子系統設計人員的得力助手。
[1]侯伯亨,劉凱,顧新.VHDL硬件描述語言與數字邏輯電路設計[M].西安:西安電子科技大學出社,2009.
G642.0
B
1671-489X(2016)16-0031-02
作者:梁麗,北京工商大學計算機與信息工程學院副教授,研究方向為電子技術及應用(100048)。