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