本文關鍵字:
摘要:采用XILINX公司的SpartanII系列FPGA芯片設計了一種基于數字移相技術的高精度脈寬測量系統,同時給出了系統的仿真結果和精度分析。與通常的脈沖計數法相比,該系統的最大測量誤差減小到原來的34.2%。關鍵詞:脈寬測量 數字移相 脈沖計數法 FPGA
在測量與儀器儀表領域,經常需要對數字信號的脈沖寬度進行測量。這種測量通常采用脈沖計數法,即在待測信號的高電平或低電平用一高頻時鐘脈沖進行計數,然后根據脈沖的個數計算待測信號寬度,如圖1所示。待測信號相對于計數時鐘通常是獨立的,其上升、下降沿不可能正好落在時鐘的邊沿上,因此該法的最大測量誤差為一個時鐘周期。例如采用80MHz的高頻時鐘,最大誤差為12.5ns。
提高脈沖計數法的精度通常有兩個思路:提高計數時鐘頻率和使用時幅轉換技術。時鐘頻率越高,測量誤差越小,但是頻率越高對芯片的性能要求也越高。例如要求1ns的測量誤差時,時鐘頻率就需要提高到1GHz,此時一般計數器芯片很難正常工作,同時也會帶來電路板的布線、材料選擇、加工等諸多問題。時幅轉換技術雖然對時鐘頻率不要求,但由于采用模擬電路,在待測信號頻率比較高的情況下容易受噪聲干擾,而且當要求連續測量信號的脈寬時,電路反應的快速性方面就存在一定問題。
區別于以上兩種方法,本文提出另一種利用數字移相技術提高脈寬測量精度的思路并使用FPGA芯片實現測試系統。
1 測量原理
所謂移相是指對于兩路同頻信號,以其中一路為參考信號,另一路相對于該參考信號做超前或滯后的移動形成相位差。數字移相通常采用延時方法,以延時的長短來決定兩數字信號間的相位差,本文提出的測量原理正是基于數字移相技術。如圖2所示,原始計數時鐘信號CLK0通過移相后得到CLK90、CLK180、CLK270,相位依次相差90°,用這四路時鐘信號同時驅動四個相同的計數器對待測信號進行計數。設時鐘頻率為f,周期為T,四個計數器的計數個數分別為m1、m2、m3和m4,則最后脈寬測量值為:
w=[(m1+m2+m3+m4)/4]×T (1)
可以看到,這種方法實際等效于將原始計數時鐘四倍頻,以4f的時鐘頻率對待測信號進行計數測量,從而將測量精度提高到原來的4倍。例如原始計數時鐘為80MHz時,系統的等效計數頻率則為320MHz,如果不考慮各路計數時鐘間的相對延遲時間誤差,其測量的最大誤差將降為原來的四分之一,僅為3.125ns。同時,該法保證了整個電路的最大工作頻率仍為f,避免了時鐘頻率提高帶來的一系列問題。
2 系統實現
系統實現的最關鍵部分是保證送入各計數器的時鐘相對延遲精度,即要保證計數時鐘之間的相位差。由于通常原始時鐘頻率已經相對較高(通常接近100MHz),周期在10~20ns之間,因此對時鐘的延遲時間只有幾ns,使用普通的延遲線芯片無法達到精度要求;同時為了避免電路板內芯片間傳送延遲的影響,保證測試系統的精度、穩定性和柔性。本文采用現場可編程門陣列(FPGA)來實現所提出的測量方法。系統結構如圖3所示。晶振產生原始輸入時鐘,通過移相計數模塊后得到脈寬的測量值,測量結果送入FIFO緩存中,以加快數據處理速度,最后通過PCI總線完成與計算機的數據傳輸。邏輯控制用來協調各模塊間的時序,保證系統的正常運行。為提高測試系統的靈活性和方便性,系統建立了內部寄存器,通過軟件修改寄存器的值可以控制測試系統的啟動停止,選擇測量高電平或低電平等。移相計數模塊、FIFO緩沖以及邏輯控制均在FPGA芯片內實現,芯片使用XILINX公司的SpartanII系列。
SpartanII系列是一款高性能、低價位的FPGA芯片,其最高運行頻率為200MHz,這里選用其中的XC2S15-6(-6為速度等級)。芯片提供了四個高精度片內數字延遲鎖定環路(Delay-Locked Loop,即DLL),可以保證芯片內時鐘信號的零傳送延遲和低的時鐘歪斜(Clock Skew);同時可以方便地實現對時鐘信號的常用控制,如移相、倍頻、分頻等。在HDL程序設計中,可以使用符號CLKDLL調用片內DLL結構,其管腳圖如圖4所示。主要管腳說明如下:
CLKIN:時鐘源輸入,其頻率范圍為25~100MHz。
CLKFB:反饋或參考時鐘信號,只能從CLK0或CLK2X反饋輸入。
CLK?眼0|90|180|270?演:時鐘輸出,與輸入時鐘同頻,但相位依次相差90°。其內部定義了屬性DUTY_CYCLE_CORRECTION,可以用來調整時鐘的占空比,值為FALSE時,輸出時鐘占空比和輸入時鐘一致,值為TRUE時將占空比調整為50%。
CLK2X:時鐘源倍頻輸出,且占空比自動調整為50%。
CLKDV:時鐘源分頻輸出,由屬性 CLKDV_DIVIDE控制N分頻,N可以為1.5、2、2.5、3、4、5、8或16。
LOCKED:該信號為低電平時,表示延遲鎖相環DLL還沒有鎖定信號,上述輸出時鐘信號未達到理想信號;當變為高電平時,表示鎖相環已經完成信號鎖定,輸出時鐘信號可用。若時鐘源輸入頻率大于60MHz,則系統鎖定時間大約需20μs。
利用DLL功能可以非??焖俜奖愕貥嫿ㄒ葡嘤嫈的K,實現本文前面介紹的測量方法。移相計數模塊結構如圖5所示。原始時鐘通過CLKDLL處理后得到的相位依次相差90°的四路時鐘輸出為CLK0、CLK90、CLK180和CLK270,它們分別作為四個相同的16位計數器的計數時鐘,待測信號連接計數器的使能端,同時控制四個計數器的啟動和停止。有了各計數器的計數結果,再通過加法器得到累加的計數個數,最后計算出信號脈寬值。
3 仿真和精度分析
圖6給出了FPGA芯片內部布線后用Modelsim進行仿真的結果。在RESET后就啟動移相計數模塊,開始對待測信號進行測量,完成一次測量后產生READY信號,同時輸出測量結果,以供后續部分使用。仿真的結果證明測試系統達到設計目標。
下面進一步對系統做深入的誤差分析。造成系統測量脈寬誤差的來源主要有系統原理誤差TS、時鐘相移誤差TP和信號延遲誤差Td以及計數時鐘抖晃TC,如圖7所示。
由前所述,當80MHz晶振時鐘輸入時,系統原理誤差TS=3.125ns。時鐘相移誤差為從CLKDLL中出來的四路時鐘信號之間本身的相位偏移,根據芯片提供的參數,其最大TP為200ps。計數時鐘抖晃是指從CLKDLL中輸出的時鐘信號本身周期的偏差,其最大TC為60ps。由于計數的時鐘周期數較多,故平均后其對整個系統的測量誤差影響可以忽略不計。
信號延遲誤差即為由于芯片內部各信號傳輸延遲不一致而造成的四個計數器計數的同步誤差。為分析該誤差情況,用ISE 5.1提供的Timing Analyzer程序對關鍵路徑做進一步的時間分析,得到的結果如表1所示。
表1 各信號到計數器的延遲分析(單位:ns)
計數器1 | 計數器2 | 計數器3 | 計數器4 | |
計數時鐘延遲CLK[0|90|180|270] | 3.294 | 3.562 | 3.640 | 3.149 |
待測信號延遲 | 3.962 | 4.665 | 4.843 | 4.767 |
時鐘相對信號延遲 | 0.668 | 1.103 | 1.203 | 1.618 |
延遲誤差Td | Td=1.618-0.668=0.950 |
表中第一欄為從CLKDLL中出來的計數時鐘到各自計數器的延遲時間,第二欄為用來控制計數器啟動停止的HF信號到四個計數器的時間。由于需要的是各計數時鐘間相對延遲時間,故第三欄給出時鐘相對于HF信號到計數器的延遲,即為第一欄和第二欄的差值。由此得出信號延遲誤差Td=0.950ns。
故有系統測量誤差Γ為:
Γ=TS+TP+Td=4.275ns (2)
即脈寬測量最大誤差為±4.275ns。與脈沖計數法比較,同樣的80MHz時鐘輸入,最大測量誤差減小到原來的34.2%。
本文在數字移相技術的基礎上設計了一種高精度的脈寬測量系統,使測量精度相對于脈沖計數法提高了多倍。若需進一步提高這種方法的測量精度,可以通過以下兩個方面進行改進:(1)繼續提高晶振頻率,尋求速度更快的FPGA芯片。晶振頻率越高,系統原理誤差越小。(2)減小信號延遲誤差。由前面可以看到,信號的延遲誤差對系統精度的影響占了很大的比例。減小各計數時鐘和待測信號到計數器的信號延遲的差異,可以有效地提高測量精度。由于FPGA內部信號延遲的時間均可以很方便地得到,因此在設計時可以通過調整內部各元件的放置位置以及連線來盡量減小延遲誤差,或者通過添加一些門電路來增加延時以使各信號延遲時間盡可能相同。