王 鵬,連帥彬,孫秋菊,鐘莉娟
(1. 信陽師范學(xué)院 物理電子工程學(xué)院,河南 信陽 464000;2. 同濟(jì)大學(xué) 通信軟件及專用集成電路設(shè)計中心,上海 200092)
數(shù)字頻率計是電子測量最常用的儀器,目前其硬件實現(xiàn)方案有2種:基于微處理器的軟件測量方案和基于現(xiàn)場可編程門陣列(FPGA)的硬件測量方案.前者主要采用處理器自帶的定時器/計數(shù)器實現(xiàn)頻率、周期測量[1,2],開發(fā)難度較小,但由于處理器先天串行執(zhí)行架構(gòu)的特點,測量精度與實時性難以保證.此外還有部分微處理器方案采用FFT算法直接得到輸入信號的頻譜信息[2],雖然結(jié)果更為精確,但FFT的運算量過大,一般只有專用DSP芯片才能勝任,同時還要使用高速A/D芯片完成模數(shù)轉(zhuǎn)換,使整個系統(tǒng)的成本大大提高.與微處理器方案相比,另一種實現(xiàn)策略的核心是FPGA器件,F(xiàn)PGA包含大量的查找表和寄存器,且內(nèi)部各模塊之間可以并行工作,極大地增強(qiáng)了其處理能力.但FPGA存在代碼量及開發(fā)難度較大,調(diào)試也更為困難等缺點.
隨著現(xiàn)代測試需求的不斷增加,頻率計的功能也已不再單一,不少工程不僅要求能對mV級弱小信號進(jìn)行可靠檢測,還要支持方波占空比等功能,測量范圍也越來越寬,某些精密測量領(lǐng)域更是對誤差和輸入幅度提出了十分苛刻的要求.本設(shè)計主要面向工業(yè)測試領(lǐng)域,輸入信號幅度為10 mV~1 V, 頻率范圍達(dá)到1 Hz~100 MHz,且支持占空比和雙通道信號時間間隔測量功能,測量相對誤差的絕對值不大于10-4.由于指標(biāo)要求很高,使用傳統(tǒng)的單片機(jī)難以保證測量精度,而FPGA則可以有效應(yīng)對該問題,這也符合目前儀器儀表中后者應(yīng)用更為廣泛的實際情況[3].而且由于FPGA的并行獨特優(yōu)勢,未來FPGA在電子儀器中的角色還將得到進(jìn)一步加強(qiáng)[4].
為了達(dá)到指標(biāo)要求,設(shè)計在模擬前端采用OPA657高速運放和ADCMP561比較器實現(xiàn)輸入信號放大及整形,此后利用FPGA對輸入波形進(jìn)行頻率、周期、占空比等測量,并由單片機(jī)作后續(xù)數(shù)據(jù)處理.
該數(shù)字頻率計的設(shè)計難點主要是前端小信號放大整形和后端的數(shù)字信號測量及處理,且需要支持脈沖占空比和雙通道同頻信號時間間隔測量等功能,實際上已經(jīng)是一臺功能比較完備的高精度寬帶信號數(shù)字參數(shù)測量儀.
采用FPGA完成該頻率計各項功能的數(shù)字測量從原理上完全可行,但由于FPGA難以直接完成浮點及除法等復(fù)雜運算,而這些運算對測量結(jié)果顯示是必不可少的,雖然可以使用Nios II、Microblze等軟核技術(shù)在FPGA內(nèi)部構(gòu)建CPU,并通過軟件編程的方式解決該問題[5],但這種方案實質(zhì)是通過耗費大量的可編程資源實現(xiàn)的.以Altera公司的FPGA為例,即使是最精減的Nios II內(nèi)核也要占用近1000個LE和大量的片內(nèi)RAM[6],而且構(gòu)建的軟核是典型的RISC架構(gòu)CPU,主頻及處理能力均不占優(yōu)勢,再加上FPGA是一種相對高端的電子元器件,利用寶貴的LE資源實現(xiàn)軟核并不符合工程化理念.因此,軟核技術(shù)雖然已經(jīng)推出多年,但始終未成為FPGA設(shè)計的主流.近年來,Altera和Xilinx公司也已經(jīng)不再大力宣傳各自的軟核處理器,而是不約而同地推出了功能更為強(qiáng)大、內(nèi)嵌ARM硬核的SoC芯片,如Altera公司的Arria系列[7]、Xilinx公司的Zynq系列[8].當(dāng)然,此類SoC剛推向市場不久,全面普及仍需時日,本設(shè)計采用的仍是傳統(tǒng)的FPGA芯片,為了解決前述問題,在FPGA內(nèi)部實現(xiàn)了一個異步串行模塊,將測量得到的各種基礎(chǔ)數(shù)據(jù)通過該模塊發(fā)送至片外的單片機(jī),由單片機(jī)進(jìn)一步作相應(yīng)的算術(shù)運算得到最終測量結(jié)果,并送至LCD顯示.這樣雖然增加了一顆芯片,但單片機(jī)的價格低廉,因此從總體上看,F(xiàn)PGA+單片機(jī)比FPGA+軟核方案更為可取.
由于系統(tǒng)最小輸入正弦波信號有效值僅為10 mV,如此小的信號難以直接供比較器整形使用,而且設(shè)計對頻帶要求達(dá)到1 Hz~100 MHz,必須先對其進(jìn)行無失真放大,為此可使用具有極高帶寬的高速運放,選用TI公司的OPA657,該運放采用結(jié)型場效應(yīng)管輸入設(shè)計,增益帶寬積達(dá)到了1.6 GHz.利用OPA657運放組建同相放大電路,其放大增益設(shè)定為26 dB,輸入輸出均采用50 Ω阻抗匹配以保證高頻信號傳輸質(zhì)量,原理圖見圖 1.
圖1 OPA657同相放大電路原理圖Fig. 1 In-phase amplifier schematic with OPA657
輸入小信號經(jīng)過OPA657完成放大處理后,即可由過零比較器將其整形成標(biāo)準(zhǔn)方波,傳統(tǒng)的比較器通常直接采用TTL單端數(shù)字邏輯電平輸出,如ADCMP601/602等,但單端邏輯電平對高頻信號的支持能力較弱,為此采用架構(gòu)更為先進(jìn)的差分電平輸出比較器ADCMP561取代之,其接口邏輯為PECL/LVPECL電平,支持最高頻率可達(dá)800 MHz,而且具有很強(qiáng)的驅(qū)動能力,更重要的是,主流FPGA的I/O引腳可以方便地指定為LVPECL電平,可與ADCMP561實現(xiàn)無縫連接.
經(jīng)過上述處理后,輸入信號無論是正弦波還是方波,到達(dá)FPGA的端口信號均已經(jīng)變?yōu)闃?biāo)準(zhǔn)的LVPECL電平信號,利用圖 1所示原理圖完成了相應(yīng)的PCB制作,經(jīng)測試表明,在增益為26 dB時,即使輸入信號有效值低至10 mV仍可完成信號無失真放大與整形,且輸入頻率范圍完全符合要求.
該模塊用于實現(xiàn)對輸入信號周期/頻率.時間間隔及占空比的測量,也是整個數(shù)字頻率計的核心模塊,選用Altera公司的EP3C5E144型FPGA作為硬件實現(xiàn)平臺,該FPGA包含5136個LE和2個PLL,用戶最大可用I/O也達(dá)到了95個,是目前市面上比較常用的低成本中等規(guī)模FPGA芯片,并在片外配置一片20 MHz晶振提供工作時鐘,該時鐘經(jīng)過FPGA內(nèi)部的PLL模塊后,分別得到再生的100 MHz和40 MHz兩路相參時鐘,其中前者用于方波占空比測量,后者則用于其余模塊.
首先完成對正弦波頻率周期的測量. 原理上,應(yīng)對低頻信號采用測周法,而對高頻信號采用測頻法,但由于輸入信號頻率變化很大,而且要求測量相對誤差小,必須對整個頻率范圍進(jìn)行合理的量程劃分,并采用不同的測量方式.
量程1: 1 Hz~1 kHz,采用測周法,由40 MHz時鐘對輸入信號的連續(xù)兩個上升沿計數(shù),可得出相應(yīng)周期,然后再換算成頻率.在最壞情況下,測量1 kHz信號仍可保證至少有40 000個計數(shù)值.測量最大用時為1 s.
量程2: 1~10 kHz,采用測周法,由40 MHz時鐘對連續(xù)10個上升沿計數(shù)得出相應(yīng)周期,然后再換算成頻率.在最壞情況下,測量10 kHz數(shù)據(jù)仍可保證至少有40 000個計數(shù)值.測量最大用時為10 ms.
量程3: 10~100 kHz,采用測周法,由40 MHz時鐘對連續(xù)100個上升沿計數(shù),得出相應(yīng)周期.然后再換算成頻率.在最壞情況下,測量100 kHz數(shù)據(jù)仍可保證至少有40 000個計數(shù)值.測量最大用時為10 ms.
量程4: 大于100 kHz且小于5 MHz,采用測頻法,在1 s內(nèi)對輸入信號的上升沿固定計數(shù),至少能計數(shù)100 000個點.測量用時為1 s.
量程5: 大于5 MHz,為了減輕計數(shù)器的位寬要求,對輸入信號的128分頻信號進(jìn)行計數(shù)(128恰好為27,可以方便地用7位計數(shù)器實現(xiàn)),此時在1 s內(nèi)能至少計數(shù)39 062個點.測量用時為1 s.
按照上述量程劃分,在任意一個工作量程內(nèi),均可以保證1次測量結(jié)果計數(shù)值至少為39 062,而相應(yīng)的計數(shù)誤差僅為±1,即相對誤差絕對值不超過1/39062,約合2.56×10-5,且最大測量時間為1 s,符合要求.
此外,設(shè)計還支持量程自動切換功能,具體實現(xiàn)方式為:利用本地40 MHz時鐘域產(chǎn)生定時長度為1 s的計數(shù)器,在每個定時區(qū)間內(nèi),記錄輸入信號的上升沿個數(shù),該數(shù)值每1 s刷新一次,數(shù)值的大小可以直觀地表示輸入信號的頻率,并以此決定當(dāng)前的工作量程.
可以看到,在該數(shù)字測量模塊中,對輸入信號的上升沿進(jìn)行檢測十分關(guān)鍵,由于該信號相對本地時鐘是典型的異步信號,如果不作特殊處理,將會導(dǎo)致亞穩(wěn)態(tài)的擴(kuò)散,甚至影響整個狀態(tài)機(jī)的正常工作[12].本設(shè)計采用了3級D寄存器同步處理,這是因為亞穩(wěn)態(tài)出現(xiàn)的概率隨時間的增加以指數(shù)曲線的形式迅速下降,因此可以通過多級寄存器減輕其影響.一般地,采用2級寄存器同步可使亞穩(wěn)態(tài)出現(xiàn)概率降低至10-10左右,采用3級亞穩(wěn)態(tài)則可使出現(xiàn)亞穩(wěn)態(tài)的概率基本為零,而且同步化后的信號與本地時鐘之間的相位關(guān)系也得到了保證,對應(yīng)的電路如圖2所示(其中本地時鐘即為40 MHz時鐘信號,異步輸入為經(jīng)過放大整形的方波及其128分頻信號):
圖2 同步化結(jié)構(gòu)示意圖Fig. 2 Synchnizing strategy architecture
經(jīng)過同步化后,記該信號為din,利用下述Verilog代碼即可方便地實現(xiàn)對上升沿的檢測,并將計數(shù)值保存在cycle_no變量中.
always @ (posedge clk)
begin
din_d1 <= din;
din_d2 <= din_d1;
end
always @ (posedge clk)
begin
if (clr)
cycle_no <= 27'd0;
else if (din_d2 == 1'b0 && din_d1 == 1'b1)
cycle_no <= cycle_no + 1'b1;
end
對于2路方波的時間間隔測量,其實質(zhì)就是測量2路同源信號的相位差,要求輸入信號的頻率范圍為1 Hz~1 MHz,最小時間間隔為0.1 μs,且相對誤差不大于10-2,而對于0.1 μs的時間間隔,采用40 MHz時鐘在1個輸入信號時鐘周期內(nèi)計數(shù)值只能達(dá)到4,相對誤差很大.大幅度提高本地時鐘頻率固然可以減輕該因素影響,但由于電路的動態(tài)功耗與頻率的二次方成正比,而隨著納米制程可編程芯片的全面應(yīng)用,動態(tài)功耗占據(jù)整體功耗的比例越來越高,頻率提高導(dǎo)致功耗增加,并將帶來散熱困難、穩(wěn)定性下降、布局布線耗時增加甚至失敗等一系列問題,因此該策略的應(yīng)用范圍十分有限.本設(shè)計保持了工作頻率40 MHz不變,轉(zhuǎn)而采用多周期統(tǒng)計求平均的方式減少測量誤差,達(dá)到設(shè)計指標(biāo)要求.
記2路同源信號為sig_a和sig_b,圖3給出了一種可能的波形示例,此時信號sig_b從時間尺度上滯后sig_a較少.如果直接測量該間隔,則需要累積許多個信號周期才可以達(dá)到所需精度,這會導(dǎo)致測量時間的延長,此時轉(zhuǎn)而測量sig_a相對sig_b滯后的時間長度,可在較短時間內(nèi)完成時間間隔的測量.同樣地,如果是sig_a從時間尺度上滯后sig_b較少,則應(yīng)統(tǒng)計sig_b相對sig_a滯后的時間長度.
圖3 同源信號相位示意圖Fig. 3 Homogenous signal phase diagram
設(shè)計同時使用了2個計數(shù)器cnt1和cnt2,前者用于記錄從sig_a上升沿到sig_b上升沿的本地時鐘計數(shù),后者則記錄sig_b上升沿到sig_a上升沿的本地時鐘計數(shù),二者并行工作,直到其中某個計數(shù)器的值超過50 000為止,并記錄對應(yīng)的輸入信號時鐘周期個數(shù).然后將計數(shù)值換算成真實時間并除以輸入信號時鐘周期個數(shù)即可得到sig_a與sig_b之間的時間間隔.由于每次測量本地計數(shù)值均超過50 000,相當(dāng)于對小時間間隔情形采用多周期累積方式求平均,大大減少了測量誤差.
另一方面,采用該策略,當(dāng)輸入信號頻率為1 MHz時,可保證cnt1和cnt2中總有一個在1個完整的輸入信號時鐘周期內(nèi)計數(shù)值達(dá)到0.9 μs×40 MHz=36,至多需要1389個輸入信號時鐘周期=1.389 ms就可使計數(shù)值達(dá)到50 000以上,也即每隔1.389 ms就可以完成一次時間間隔測量.而當(dāng)輸入信號頻率為100 Hz時,1個輸入信號時鐘周期內(nèi)即可保證cnt1和cnt2中有一個計數(shù)值超過50 000,即每隔10 ms可以完成一次時間間隔測量,因此,在整個量程范圍內(nèi)的測量時間均優(yōu)于設(shè)計指標(biāo)要求.
該模塊還需要支持方波占空比測量功能,且頻率范圍為1 Hz~5 MHz,被測脈沖信號占空比的范圍為10%~90%,顯示分辨率為0.1%,測量相對誤差的絕對值不大于10-2.從原理上講,仍可以通過本地40 MHz時鐘對輸入信號的單周期內(nèi)高電平持續(xù)時間進(jìn)行計數(shù)實現(xiàn),但在最壞情況下,輸入信號為10%,占空比5 MHz方波時,其高電平持續(xù)時間只有20 ns,還不足1個40 MHz時鐘周期.為此,一方面需要提高本地時鐘,本設(shè)計采用了100 MHz區(qū)域時鐘來完成占空比測量,另一方面可采用類似時間間隔測量的思路,使用2個計數(shù)器(以下記作cnt1和cnt2)分別統(tǒng)計高電平和低電平持續(xù)時間,這樣可保證每個輸入信號周期內(nèi)總有1個計數(shù)器計滿至少10個100 MHz時鐘周期,然后再通過多輸入時鐘周期測量減少隨機(jī)誤差.
該模塊的功能相對單純,用于把數(shù)字測量模塊的測量數(shù)據(jù)傳輸給單片機(jī),采用固定19 200 bps波特率即可滿足需要,每隔1 s啟動一次數(shù)據(jù)傳輸,數(shù)據(jù)傳輸以幀為單位,每幀固定長度為8個字節(jié),幀頭固定為AA,幀尾則是校驗和字節(jié),可用于檢驗當(dāng)前數(shù)據(jù)幀傳輸是否正確,并依此實現(xiàn)自動重發(fā)糾錯機(jī)制.
整個異步串行模塊共支持4種不同數(shù)據(jù)幀,分別為:周期參數(shù)幀,傳輸內(nèi)容為輸入信號完整周期內(nèi)的本地時鐘計數(shù)值;頻率參數(shù)幀,傳輸內(nèi)容為1 s時長內(nèi)輸入信號或其128分頻信號的上升沿計數(shù);時間間隔測量幀,傳輸內(nèi)容為輸入信號測量周期數(shù)及相應(yīng)的時間間隔本地時鐘計數(shù)值;占空比參數(shù)幀,傳輸內(nèi)容為由本地時鐘計數(shù)值表征的輸入信號測量周期及高低電平持續(xù)時間.上述4種數(shù)據(jù)幀均具有不同的功能識別碼,接收方可以根據(jù)識別碼不同進(jìn)行相應(yīng)的處理.
輔助模塊主要包括全局復(fù)位模塊和功能切換模塊,其中全局復(fù)位模塊的設(shè)計及實現(xiàn)已經(jīng)十分成熟,不再詳述,僅對功能切換模塊實現(xiàn)作簡要介紹,由于該頻率計具有多種測量功能,為此需要采用相應(yīng)的按鍵進(jìn)行功能切換,共3種工作模式,分別是測頻模式、測時間間隔模式和測占空比模式,只需要采用3個獨立的物理按鍵即可實現(xiàn),為實現(xiàn)可靠的按鍵檢測,在Verilog設(shè)計中加入了消抖處理.
單片機(jī)的作用就是接收FPGA傳輸?shù)母鞣N信息幀,恢復(fù)出各種測量關(guān)鍵數(shù)據(jù),并進(jìn)行簡單的數(shù)據(jù)處理,即可得到頻率值、時間間隔值和占空比等測量結(jié)果,然后送至LCD顯示器即可.其中頻率部分的顯示還需要加入自動單位切換,這可以通過判斷頻率值的大小并進(jìn)行縮放的方式實現(xiàn).
由于單片機(jī)僅承擔(dān)輔助數(shù)據(jù)處理及顯示驅(qū)動功能,對性能要求不高,采用最常見的MCS-51單片機(jī)系列即可,單芯片典型價格僅為1~2元,遠(yuǎn)低于ARM架構(gòu)的各類32位CPU,性價比優(yōu)勢十分突出,本設(shè)計選用的具體芯片型號為STC89C51.
顯示模塊需要能顯示數(shù)字、中英文等,因此點陣型LCD是較為合適的選擇,本設(shè)計采用的是12864型LCD,并編寫了相應(yīng)的單片機(jī)驅(qū)動程序,可支持頻率計的各種測量結(jié)果顯示.
該頻率計的核心是FPGA處理模塊,采用Verilog 可綜合HDL語言完成整個數(shù)字測量模塊功能,并在Quartus II 13.0下通過了綜合與布局布線,共占用769個LE,靜態(tài)時序分析報告40 MHz和100 MHz時鐘域的最高頻率分別達(dá)到117.33 MHz和131.89 MHz,時序裕量超過30%.
利用雙通道DDS信號源對該頻率計進(jìn)行了完整的功能測量,證實可以完成所有指標(biāo),而且由于采用了性能優(yōu)異的運算放大器和差分輸出比較器,即使在輸入信號幅度小于10 mV時仍能正常工作,全頻帶范圍內(nèi)典型相對誤差為1.5×10-5~4.5×10-5.該誤差來源一方面是測試計數(shù)誤差,另一方面則是由于本地晶振固有的誤差.為了進(jìn)一步減少相對誤差,可以通過對不同量程的典型測量結(jié)果進(jìn)行誤差標(biāo)定并存儲在FPGA內(nèi)部,在實際測量頻率時通過二次補(bǔ)償修正該誤差.這也是設(shè)計未來的主要改進(jìn)方向.
對低成本多功能自適應(yīng)數(shù)字頻率計進(jìn)行了深入的研究與分析,利用具有大帶寬的高速運放OPA657和差分電平輸出比較器ADCMP561 實現(xiàn)對輸入小信號的無失真放大及整形,由FPGA對LVPECL差分信號進(jìn)行接收并完成后續(xù)的參數(shù)測量,最終通過LCD顯示測量結(jié)果,經(jīng)專業(yè)儀器測試表明實測性能達(dá)到設(shè)計要求.由于MCS-51單片機(jī)的引入,該方案較好地解決了FPGA難以完成復(fù)雜運算的難題,更具工程實用性,與現(xiàn)有的FPGA內(nèi)建軟核思路相比,設(shè)計制造成本可降低50%,同時測試精度并未受到影響,設(shè)計軟硬件劃分合理,且所有功能均通過HDL編程語言實現(xiàn),可升級性強(qiáng),未來還可以進(jìn)一步添加峰峰值測量、波形變換等功能,具有很強(qiáng)的參考價值.