基于CPLD的簡易數(shù)字頻率計的設計
摘要:CPLD器件的出現(xiàn)給現(xiàn)代電子設計帶來了極大的方便和靈活性,使復雜的數(shù)字電子系統(tǒng)設計變?yōu)樾酒壴O計,同時還可以很方便地對設計進行在線修改。首先介紹了頻率計的測頻原理,然后利用CPLD芯片進行測頻計數(shù),從而實現(xiàn)了簡易數(shù)字頻率計的設計。此頻率計的設計采用基于VHDL的“Top-Down”(自上而下)的設計方法,從系統(tǒng)總體要求出發(fā),自上而下地逐步將設計內容細化,最后完成系統(tǒng)硬件的整體設計。所設計的電路在GW48系列SoPC/EDA實驗箱上通過硬件仿真,下載到目標器件上運行,能夠滿足實際測量頻率的要求。
關鍵詞:CPLD;VHDL;頻率計;設計
0 引言
目前已經(jīng)有不少文獻分別從不同的角度對此問題進行了討論和研究。有基于FPGA實現(xiàn)的,F(xiàn)PGA的保密性差,它的分段式布線結構決定了其延遲的不可預測性,它的編程信息需存放在外部存儲器上,使用方法復雜;也有用標準邏輯器件實現(xiàn)的,用標準邏輯器件使系統(tǒng)布線復雜、體積功耗大、可靠性差、設計周期長,交流和修改不方便。該頻率計采用先進的EDA技術及自上而下的設計,使用CPLD芯片,CPLD具有連續(xù)連接結構,易于預測延時,使電路仿真更加準確,且編程方便、速度快、集成度高、價格低,從而使系統(tǒng)研制周期大大縮短,產品的性能價格比提高。本頻率計采用流行的VHDL語言編程,并在設計平臺實現(xiàn)了全部編程設計。該數(shù)字頻率計的設計及實現(xiàn)具有良好的應用價值和推
廣前景。下面對該頻率計的軟硬件設計進行詳細論述。
1 測頻原理
1.1 頻率的定義
頻率定義為在單位時間內,記錄被測信號的變化周期數(shù)(或脈沖個數(shù))。若記錄被測信號的的變化周期數(shù)(或脈沖個數(shù))為Nx,則被測頻率Fx的數(shù)值為Nx,單位為:Hz。
1.2 基本性能指標
測頻范圍為:1 Hz~1 MHz;
測頻精度:相對誤差為1 Hz。
1.3 頻率計的功能分析
由于數(shù)字頻率計是一個需對數(shù)字信號進行測量和顯示的系統(tǒng),由一片CPLD完成各種測試功能(對被測信號進行計數(shù)等),最后將測量結果送數(shù)碼管顯示輸出,因此測頻需要設置控制電路、計數(shù)電路、鎖存電路、譯碼電路,將這些電路設計好的各部分連接起來成為一個整體的電路寫人CPLD芯片中,外圍電路由顯示電路、產生1 Hz的方波電路組成。
控制電路是對計數(shù)電路、鎖存電路和譯碼電路進行時序的控制。其控制要求為:先使計數(shù)電路在1 s內進行計數(shù),接著在下一個1 s內鎖存計數(shù)的結果,最后將鎖存的數(shù)據(jù)進行譯碼和顯示。在第一個測量顯示周期結束后,控制電路將再次發(fā)出控制信號,先對功能電路清零,然后使系統(tǒng)開始第二個測量周期的工作。
計數(shù)電路是對被測信號的頻率進行計數(shù)的主功能電路。根據(jù)頻率的定義和測頻的基本原理,必須由一個脈寬為1 s的對被測信號脈沖計數(shù)的允許信號,其測量結果為被測信號在1 s內的脈沖個數(shù),即被測信號的頻率。由于被測信號的頻率測頻范圍為1 Hz~1 MHz,因此用計數(shù)電路測量時,使用6個輸出為4位的二進制數(shù)計數(shù)器。此計數(shù)器從個位開始到高位分別進行計數(shù),使低位計數(shù)器的進位與高位計數(shù)器的被測信號輸入端相連,從計數(shù)器電路的結構可知,該電路輸出信號是由從低位到高位的多組4位二進制表示的十進制數(shù)組成的,用來分別表示被測信號的個、十、百、千等位的數(shù)值。
鎖存電路的主要功能是對計數(shù)器計數(shù)輸出的數(shù)據(jù)進行鎖定保存。即使在前級計數(shù)電路的計數(shù)器清零以后,鎖存器依然有保存的數(shù)據(jù)存在,不會造成數(shù)據(jù)的丟失。鎖存電路中的鎖存器是對單個十進制計數(shù)器數(shù)據(jù)進行保存,因此鎖存器的個數(shù)與前一級計數(shù)電路的十進制計數(shù)器的個數(shù)相同。
譯碼電路的功能是將鎖存器保存并將輸出的4位二進制代碼表示的十進制數(shù)進行譯碼轉換,將其轉換為能直接驅動數(shù)碼管顯示的十進制數(shù)字字符的輸出信號。
顯示電路由共陰數(shù)碼管電路構成。由于被測信號的頻率測頻范圍為1 Hz~1 MHz,因此需要6個數(shù)碼管對其進行顯示。
2 頻率計各模塊設計
2.1 頻率計原理框圖
此頻率計的流程為:被測信號fin輸入到CPLD芯片,在控制信號為1 Hz時,在CPLD芯片里完成對被測信號的測頻、計數(shù)、鎖存、譯碼,輸出信號接數(shù)碼管顯示,如圖1所示。
[!--empirenews.page--]
2.2 CPLD模塊原理框圖
由于是一種集成度很高并且可進行用戶定制的數(shù)字芯片,因此測試功能都用一塊CPLD芯片來實現(xiàn)。在硬件電路設計時,可先將CPLD的內部電路分為控制、計數(shù)、鎖存及譯碼四個電路模塊分別進行設計,然后再將這四個電路模塊有機地結合成一個能完成測頻功能的整體系統(tǒng)。其CPLD模塊原理框圖如圖2所示。
2.2.1 控制電路模塊
為實現(xiàn)控制功能,控制電路模塊需輸出三個信號:一是允許對被測信號計數(shù)的計數(shù)信號CNT-EN;二是將前1 s計數(shù)器的計數(shù)值存入鎖存器的鎖存信號LOAD;三是為下一個周期計數(shù)做準備的計數(shù)器清零信號RST-CNT。上述三個信號產生的順序是:先提供計數(shù)信號,這種信號使計數(shù)器在1 s內計數(shù),即周期為2 s的信號;接著是提供鎖存信號,這種信號對計數(shù)值進行鎖存,與計數(shù)信號反向;最后是發(fā)出清零信號,這種信號可對計數(shù)器清零。計數(shù)器清零結束后又可重新計數(shù),計數(shù)進入第二個周期??刂齐娐纺K實際上是一個控制器,它需要一個周期為1 s的信號作為產生并控制控制器輸出的時基信號CLKK??刂齐娐纺K中各信號符號及端口功能如圖3所示。
2.2.2 計數(shù)電路模塊
計數(shù)電路模塊將對被測信號進行十進制計數(shù)。它雖然由6個十進制計數(shù)器組成,但采用CPLD后,設計時只要先制作單個十進制計數(shù)器,然后再將多個結構相同的單個十進制計數(shù)器在CPLD內部進行連接就可組合成一個完整的計數(shù)電路模塊。為實現(xiàn)其功能,十進制計數(shù)器需要設置三個輸入端:即被測信號輸入端CLK、計數(shù)器狀態(tài)清零端RST和計數(shù)器工作使能端ENA。
需要設置四個輸出端,即OUTY[0],OUTY[1],OUTY[2]和OUTY[3],由這四個輸出端輸出4位二進制代碼來表示十進制數(shù)。同時,還需要設置進位輸出端COUNT。需要設置四個輸出端,即OUTY[0],OUTY[1],OUTY[2]和OUTY[3],由這四個輸出端輸出4位二進制代碼來表示十進制數(shù)。同時,還需要設置進位輸出端COUNT。設置進位輸出端COUNT是因為單個十進制計數(shù)器只能表示被測信號頻率在個、十、百、千等位中的一個數(shù)位的數(shù)據(jù)。被測信號的頻率是從個位計數(shù)器開始計數(shù)的,被測信號變化一次,個位計數(shù)器輸出加1,當被測信號變化10次時,個位計數(shù)器輸出為0,而十位計數(shù)器輸出加1,當十位計數(shù)器計滿10次時,十位計數(shù)器輸出為0,而百位計數(shù)器輸出加1,依次類推,直至千位、萬位或更高位。上述十進制計數(shù)器都是滿10進1,且進位時計數(shù)器清零并重新計數(shù)。計數(shù)電路模塊中的單個計數(shù)器符號及端口功能如圖4所示。
[!--empirenews.page--]
2.2.3 鎖存電路模塊
鎖存電路模塊可使顯示電路的工作穩(wěn)定而可靠,避免計數(shù)電路模塊清零時引起顯示閃爍的現(xiàn)象。鎖存電路模塊是由多個鎖存器組成。每個鎖存器都是用來鎖存與其單獨相連的計數(shù)器的輸出數(shù)據(jù)。由于每個鎖存器鎖存的都是4位二進制代碼表示的十進制數(shù),其功能完全相同,因此只需要設計制作一個鎖存器就可連接組合成一個鎖存電路模塊。為實現(xiàn)其功能,鎖存器需設置一個使鎖存器工作的使能端LOAD,四個數(shù)據(jù)輸入端即DIN[0],DIN[1],DIN[2]和DIN[3],并由它們輸入計數(shù)器的計數(shù)值,還需設置四個鎖存數(shù)據(jù)的輸出端:即DOUT[0],DOUT[1],DOUT[2]和DOUT[3]。鎖存電路模塊中單個鎖存器的符號及端口功能如圖5所示。
2.2.4 譯碼電路模塊
譯碼電路模塊可對表示十進制數(shù)的4位二進制代碼進行編碼,此模塊可直接連接數(shù)碼管驅動器,從而驅動數(shù)碼管顯示出相應的阿拉伯數(shù)字等字符。與鎖存器電路模塊設計一樣,它也只需要先設計一個單個的譯碼器,然后通過連接組合就可構成譯碼電路模塊,從而實現(xiàn)譯碼功能。為實現(xiàn)其功能,單個譯碼器需要設置4個數(shù)據(jù)輸入端:即d[0],d[1],d[2]和d[3],并由這些端口輸入鎖存電路模塊輸出的4位二進制數(shù)據(jù),需要設置7個輸出端:即q[0],q[1],q[2],q[3],q[4],q[5]和q[6],它們分別連接7段數(shù)碼管的7個顯示輸入端。譯碼電路模塊中單個譯碼器符號及端口功能如圖6所示。
3 軟件設計
根據(jù)前面的分析,采用VHDL語言設計一個簡易的數(shù)字頻率計,運用自頂向下的設計思想,將系統(tǒng)按功能逐層分割的層次化設計方法進行設計。在頂層對內部各功能塊的連接關系和對外的接口關系進行了描述,而功能塊的邏輯功能和具體實現(xiàn)形式則由下一層模塊來描述。即控制、計數(shù)、鎖存、譯碼四個實現(xiàn)數(shù)字頻率計的核心模塊,然后根據(jù)圖2可以將上述四個模塊VHDL源程序作為底層元件,使用QuartusⅡ開發(fā)工具,用該工具軟件所支持的語言——硬件描述語言VHDL,以文本的方式進行編程輸入。在編程時分別對控制、計數(shù)、鎖存、譯碼等電路模塊進行VHDL文本描述,使每個電路模塊以及器件都以文本的形式出現(xiàn),然后通過編譯、波形分析、仿真、調試來完善每個器件的功能。單個器件制作完成后,然后將它們生成庫文件,并產生相應的符號,最后用語言將各個己生成庫文件的器件的各個端口連接在一起,從而形成了頻率計主電路的軟件結構。在連接器件時,采用圖形輸入方式,即在圖形輸入界面中調出先制作好的庫文件器件符號,再將每個器件符號的各端口直接連線,從而構成頻率計主電路圖。頻率計主電路圖如圖7所示。仿真波形如圖8所示。
[!--empirenews.page--]
在GW48系列SoPC/EDA實驗箱上下載、調試后,被測信號為fin為十進制,實驗箱上的顯示值為Dsp(H)。Dsp(H)為十六進制,Dsp(D)為十進制,Clk=1 Hz,通過從實驗箱上給出的頻率值來驗證,從表1可以看到顯示結果。
從表1可以看出所顯示的結果與被測信號的頻率一致。從信號發(fā)生器中輸入測頻范圍內的任意頻率也可驗證。
還可以改變控制信號即Clk的大小從而改變測量范圍,當Clk=64 Hz時,理論值為:
把實驗箱上給出的頻率值做被測頻率,從表2可以看到顯示結果。
從表2可以看出所顯示的結果轉換后與被測信號的頻率一致。
4 結語
采用此種方法設計的簡易數(shù)字頻率計簡單、直觀,測頻范圍隨時可根據(jù)用戶需要進行調整,占用的CPLD芯片資源較少,不失為一個很好的數(shù)字頻率計設計解決方案。由此可見,采用這種技術設計的數(shù)字電子系統(tǒng),大大減少了電路板的尺寸,同時增加了系統(tǒng)可靠性和設計靈活性。