基于VHDL語言的數(shù)字頻率計(jì)的設(shè)計(jì)方案
數(shù)字頻率計(jì)是通訊設(shè)備、計(jì)算機(jī)、電子產(chǎn)品等生產(chǎn)領(lǐng)域不可缺少的測(cè)量?jī)x器。由于硬件設(shè)計(jì)的器件增加,使設(shè)計(jì)更加復(fù)雜,可靠性變差,延遲增加,測(cè)量誤差變大。通過使用EDA技術(shù)對(duì)系統(tǒng)功能進(jìn)行描述,運(yùn)用VHDL語言,使系統(tǒng)簡(jiǎn)化,提高整體的性能和可靠性。采用VHDL編程設(shè)計(jì)的數(shù)字頻率計(jì),除了被測(cè)信號(hào)的整形部分,鍵輸入和數(shù)碼顯示以外,其他都在一片F(xiàn)PGA上實(shí)現(xiàn),從而讓整個(gè)系統(tǒng)非常精簡(jiǎn),讓其具有靈活的現(xiàn)場(chǎng)更改性,在不改變硬件電路的基礎(chǔ)上,進(jìn)一步改進(jìn)提高系統(tǒng)的性能,使數(shù)字頻率計(jì)具有高速,精確度高,可靠性強(qiáng),抗干擾等優(yōu)點(diǎn),為數(shù)字系統(tǒng)進(jìn)一步的集成創(chuàng)造了條件。
2.數(shù)字頻率計(jì)的工作原理
頻率測(cè)量方法中,常用的有直接測(cè)頻法、倍頻法和等精度測(cè)頻法。中直接測(cè)頻法是依據(jù)頻率的含義把被測(cè)頻率信號(hào)加到閘門的輸入端,只有在閘門開通時(shí)間T(以ls計(jì))內(nèi),被測(cè)(計(jì)數(shù))的脈沖送到十進(jìn)制計(jì)數(shù)器進(jìn)行計(jì)數(shù)。直接測(cè)頻法比其他兩個(gè)方案更加簡(jiǎn)單方便可行,直接測(cè)頻法雖然在低頻段測(cè)量時(shí)誤差較大,但在低頻段我們可以采用直接測(cè)周法加測(cè)量,這樣就可以提高測(cè)量精度了。直接周期測(cè)量法是用被測(cè)周期信號(hào)直接控制計(jì)數(shù)門控電路,使主門開放時(shí)間等于Tx,時(shí)標(biāo)為Ts的脈沖在主門開放時(shí)間進(jìn)入計(jì)數(shù)器。設(shè)在Tx期間計(jì)數(shù)值為N,可以根據(jù)Tx=N×Ts來算得被測(cè)信號(hào)周期。因此本文采用低頻測(cè)周,高頻測(cè)頻的方法來提高精度,減小誤差。
3.主要功能模塊的實(shí)現(xiàn)
該系統(tǒng)設(shè)計(jì)的控制器是由狀態(tài)機(jī)實(shí)現(xiàn),通過在不同測(cè)量檔位,選擇合理的時(shí)基信號(hào)頻率降低誤差,確定各狀態(tài)轉(zhuǎn)移條件和狀態(tài)名,采用低頻檔位測(cè)周,高頻檔位測(cè)頻的方法。20MHz晶振送入分頻器,分出各檔時(shí)基信號(hào)和其它模塊所需的觸發(fā)信號(hào),分頻器將各檔時(shí)基信號(hào)傳給狀態(tài)機(jī),同時(shí)待測(cè)信號(hào)進(jìn)入狀態(tài)機(jī),狀念機(jī)進(jìn)行狀態(tài)轉(zhuǎn)換,將量程溢出信號(hào)和狀態(tài)顯示信號(hào)表征在發(fā)光二極管上。如圖表1所示。
3.1 狀態(tài)機(jī)模塊
首先對(duì)系統(tǒng)復(fù)位,如果此時(shí)狀態(tài)機(jī)的初始狀態(tài)為Fl00k,若超量程信號(hào)送入狀態(tài)機(jī),則狀態(tài)轉(zhuǎn)換到FlM,如果仍有超量程信號(hào)則狀態(tài)轉(zhuǎn)換到F10M,如果仍有超量程信號(hào)則狀態(tài)轉(zhuǎn)換到F100M,如果還有超量程信號(hào)則狀態(tài)轉(zhuǎn)換到Overflow H產(chǎn)生高溢出信號(hào);若欠量程信號(hào)送人狀態(tài)機(jī),則狀態(tài)轉(zhuǎn)換到P1ms,如果有超量程信號(hào)則狀態(tài)轉(zhuǎn)換到P10ms,如果仍有超量程信號(hào)則狀態(tài)轉(zhuǎn)換到P100ms,如果仍有超量程信號(hào)則狀態(tài)轉(zhuǎn)換到P 1 s,如果還有超量程則狀態(tài)轉(zhuǎn)換到OverflowL產(chǎn)生低溢出信號(hào)。如圖1所示。
3.2 計(jì)數(shù)器模塊
在“待計(jì)數(shù)信號(hào)”的兩個(gè)時(shí)鐘周期內(nèi)完成計(jì)數(shù)與控制信號(hào)(Over與Low)的傳輸,在量程合適的情況下,還將計(jì)數(shù)值輸出。這兩個(gè)時(shí)鐘周期內(nèi),第1個(gè)時(shí)鐘周期完成計(jì)數(shù),第2個(gè)時(shí)鐘周期完成控制信號(hào)的傳輸與計(jì)數(shù)值輸出。這樣做的好處是穩(wěn)定,將計(jì)數(shù)與控制信號(hào)傳輸分開進(jìn)行。避免了一些可能遇到的“時(shí)鐘跳變”.但這種做法的缺點(diǎn)也很明顯,那就是在測(cè)周期模式下,假如待測(cè)信號(hào)是1Hz的,那么系統(tǒng)可能需要2s(兩個(gè)時(shí)鐘周期)才能顯示正確的數(shù)值。
3.3 十分頻模塊
由于1kHz~10kHz的信號(hào)無論用測(cè)頻法還是測(cè)周期法都是不可行的,可以采用預(yù)分頻的方法,將1kHz~10kHz的信號(hào)十分頻,然后用測(cè)周期法測(cè)出周期,再計(jì)算出頻率。
3.4 同步整形電路模塊
通過同步整形電路處理外部的異步信號(hào),超量程和欠量程。源程序如下:
library ieee;use ieee.std_logic_1164.all;entity SignalLatch is4.系統(tǒng)的功能仿真和驗(yàn)證分析。
據(jù)狀態(tài)轉(zhuǎn)換圖,這里將狀態(tài)機(jī)的程序分成兩個(gè)進(jìn)程,進(jìn)程1完成狀態(tài)轉(zhuǎn)移過程,進(jìn)程2控制各狀態(tài)下的輸出值如下圖2所示,timecounter=clocktested為50KHz.
為了方便觀察,將數(shù)值改小,計(jì)數(shù)值大于100且小于或等于1000時(shí)輸出!將clock1設(shè)為50K,clock2計(jì)數(shù)時(shí)鐘設(shè)為5M,得出仿真如圖3所示Result為100符合計(jì)數(shù)要求。
如圖4所示給clk1一個(gè)5KHz的頻率,經(jīng)過十分頻后clk2輸出0.5KHz,clk1的周期是0.2ms,經(jīng)過十分頻后是2ms
同步整形電路仿真如圖5所示。
由以上模塊進(jìn)行仿真得出了頻率的測(cè)量。如圖6、7、8所示。
5.結(jié)論
本方案所設(shè)計(jì)的數(shù)字頻率計(jì)占用FPGA芯片資源較少,成本較低,減少了電路的尺寸,具有一定的實(shí)用價(jià)值。利用QuartusII平臺(tái)進(jìn)行了仿真和硬件測(cè)試,基本達(dá)到了設(shè)計(jì)的要求。從而證實(shí)了本方案的具有較好可靠性,靈活性以及實(shí)用性