本發明屬于通信技術領域。
背景技術:隨著當今電子技術日新月異的發展,時間同步得到了越來越重要的應用。IRIG-B碼作為一種串行時間碼,是一種重要的時間同步傳輸的方式,以其實際突出的優越性能,成為時統設備首選的標準碼型,廣泛的應用到電信、電力、軍事等重要行業或部門。對IRIG-B碼的編碼和譯碼一般有三種方式:基于FPGA的編碼譯碼、基于單片機的編碼譯碼以及專用的譯碼芯片。但是現有的IRIG-B碼的處理系統多是針對于IRIG-B碼(DC碼)的譯碼,需要外部的IRIG-B碼的信號源才能完成對譯碼系統的自檢,此種方式在設備研制過程中是十分不方便的。
技術實現要素:本發明為了解決現有的IRIG-B碼的處理系統需要外部的IRIG-B碼的信號源才能完成對譯碼系統的自檢,譯碼功能的準確性無法得到檢驗的問題,提出了基于FPGA的IRIG-B碼編碼譯碼系統及其編碼譯碼方法。基于FPGA的IRIG-B碼編碼譯碼系統,它包括GPS/北斗雙系統模塊、FPGA、單片機、DAC芯片、比較器芯片、上位機和PCI轉接卡,FPGA內嵌存儲控制模塊、AC碼編碼控制邏輯模塊、DC碼編碼控制邏輯模塊、DC譯碼控制邏輯模塊和AC碼譯碼控制邏輯模塊,所述GPS/北斗雙系統模塊用于輸出時間信息并同時發送給單片機和存儲控制模塊,存儲控制模塊用于將接收到的時間信息作為原始的時間源,還用于將該原始的時間源通過PCI轉接卡輸入到上位機,單片機用于將接收到的時間信息進行譯碼并輸出給DC碼編碼控制邏輯模塊和AC碼編碼控制邏輯模塊,DC碼編碼控制邏輯模塊用于將單片機發送來的時間信息進行DC碼的編碼,AC碼編碼控制邏輯模塊根據接收到的單片機發送來的時間信息進行AC碼的編碼,DAC芯片用于接收AC碼編碼控制邏輯模塊輸出的調制后的信息,并進行D/A轉換,比較器芯片用于采集輸入的AC碼的零點,AC碼譯碼控制邏輯模塊用于控制數據采集芯片采集AC碼的幅值,并將其轉換為DC碼,DC譯碼控制邏輯模塊用于對輸入DC碼譯碼,轉換為時間信息。基于FPGA的IRIG-B碼編碼譯碼系統的編碼譯碼的方法為:步驟一:GPS/北斗雙系統模塊每秒鐘產生一次時間信息和一個秒脈沖信號,步驟二:將步驟一所述的時間信息發送到單片機,單片機將接收到的時間信息進行譯碼,得到時間信息,步驟三:將步驟二所述時間信息同時輸入到AC碼編碼控制邏輯模塊和DC碼編碼控制邏輯模塊,同時執行步驟四和步驟五,步驟四:DC碼編碼控制邏輯模塊對接收到的時間信息進行編碼,完成對DC碼的編碼,執行步驟八,步驟五:AC碼編碼控制邏輯模塊根據接收到的DC碼對FPGA中產生的1KHz的正弦波進行幅度調制,完成對AC碼的編碼,步驟六:將調制后的信號輸入到DAC芯片,得到IRIG-B的AC碼的模擬量信息,步驟七:將步驟六得到的模擬量信息經過比較器輸入到AC碼譯碼控制邏輯模塊,得到DC碼數字序列,并輸入到DC譯碼控制邏輯模塊,步驟八:DC譯碼控制邏輯模塊將接收到的DC碼數字序列進行譯碼,得到時間信息,根據IRIG-B碼的協議,P脈沖是一種位置標志位碼元,每兩個連續的“P”脈沖,之后表示一組新的時間信息的到來,判斷出每一個碼元所表達的具體含義,當檢測到IRIG-B碼的兩個“P”脈沖之后,在下一個碼元開始的上升沿把譯出的信息賦值到相應的表示時間信息的寄存器變量中,然后輸入到上位機,即完成對DC碼的譯碼和AC碼的譯碼。本發明通過系統的編碼功能實現對系統譯碼功能的檢驗,系統本身可以完成自檢功能。編碼的基準源來自于GPS/北斗雙系統模塊,把譯碼的結果和GPS/北斗雙系統模塊的時間信息通過CPCI總線上傳到上位機,即將自檢的結果與原始的時間源作比較可以很方便的檢驗系統的譯碼功能的準確性,實現了在沒有IRIG-B碼外部信號的情況下完成對譯碼功能的自檢。本發明的主要優點是:1.FPGA配合外圍DAC芯片實現對IRIG-B碼的兩種形式AC碼及BC碼的編碼輸出;2.FPGA配合外圍比較器芯片實現對IRIG-B碼的兩種形式AC碼及BC碼的輸入譯碼;3.通過對譯碼和編碼功能的輸入輸出環回,實現系統的自檢,而不需要外部的IRIG-B碼的信號源。4.IRIG-B碼(AC碼及DC碼)編碼的時間基準來自系統上的GPS/北斗雙系統模塊,通過對譯碼結果和GPS/北斗雙系統模塊產生的時間進行比較可以更好的對系統的準確性進行驗證。5.本系統的編碼所用的時鐘與譯碼所用的時鐘不同,可以更好的模擬外部的IRIG-B碼的輸入。6.本方法設計的各部分功能模塊具有獨立性與通用性,可應用于其它設計。附圖說明圖1為系統整體工作框圖;圖2為AC碼與DC碼的關系示意圖;圖3為AC碼編碼控制邏輯的狀態圖;圖4為DC碼譯碼控制邏輯狀態圖;圖5為DC碼譯碼結果輸出控制邏輯狀態圖;圖6為AC碼的輸入與過零比較的關系示意圖;圖7為過零比較器零點附近產生抖動問題示意圖;圖8為本發明的工作流程;圖9為具體實施方式五所述的編碼譯碼的方法的流程圖。具體實施方式具體實施方式一:參見圖1說明本實施方式,本實施方式所述的基于FPGA的IRIG-B碼編碼譯碼系統,它包括GPS/北斗雙系統模塊1、FPGA2、單片機3、DAC芯片4、比較器芯片5、上位機6和PCI轉接卡7,FPGA2內嵌存儲控制模塊2-1、AC碼編碼控制邏輯模塊2-2、DC碼編碼控制邏輯模塊2-3、DC譯碼控制邏輯模塊2-4和AC碼譯碼控制邏輯模塊2-5,所述GPS/北斗雙系統模塊1用于輸出時間信息并同時發送給單片機3和存儲控制模塊2-1,存儲控制模塊2-1用于將接收到的時間信息作為原始的時間源,還用于將該原始的時間源通過PCI轉接卡7輸入到上位機6,單片機3用于將接收到的時間信息進行譯碼并輸出給DC碼編碼控制邏輯模塊2-3和AC碼編碼控制邏輯模塊2-2,DC碼編碼控制邏輯模塊2-3用于將單片機3發送來的時間信息進行DC碼的編碼,AC碼編碼控制邏輯模塊2-2根據接收到的單片機3發送來的時間信息進行AC碼的編碼,DAC芯片4用于接收AC碼編碼控制邏輯模塊2-2輸出的調制后的信息,并進行D/A轉換,比較器芯片5用于采集輸入的AC碼的零點,AC碼譯碼控制邏輯模塊2-5用于控制數據采集芯片采集AC碼的幅值,并將其轉換為DC碼,DC譯碼控制邏輯模塊2-4用于對輸入DC碼譯碼,轉換為時間信息。本實施方式所述的FPGA2通過PCI轉接卡7與上位機6相連是指通過PCI轉接卡把模塊插到計算機的PCI插槽中;在上位機6中安裝模塊的驅動;在安裝GPS/北斗雙系統模塊1上安裝GPS/北斗雙系統模塊1的天線;本實施方式所述GPS/北斗雙系統模塊1、FPGA2、單片機3、DAC芯片4和比較器芯片5集成在板卡上。具體實施方式二:本實施方式是對具體實施方式一的進一步限定,所述DAC芯片4采用DAC7714實現,所述DAC7714為12位的串行輸入的D/A轉換器。具體實施方式三:本實施方式是對具體實施方式一的進一步限定,所述比較器芯片5為過零比較器芯片。具體實施方式四:參見圖9說明本實施方式,具體實施方式一所述的基于FPGA的IRIG-B碼編碼譯碼系統的編碼譯碼的方法為:步驟一:GPS/北斗雙系統模塊1每秒鐘產生一次時間信息和一個秒脈沖信號,步驟二:將步驟一所述的時間信息發送到單片機3,單片機3將接收到的時間信息進行譯碼,得到時間信息,步驟三:將步驟二所述時間信息同時輸入到AC碼編碼控制邏輯模塊2-2和DC碼編碼控制邏輯模塊2-3,同時執行步驟四和步驟五,步驟四:DC碼編碼控制邏輯模塊2-3對接收到的時間信息進行編碼,完成對DC碼的編碼,執行步驟八,步驟五:AC碼編碼控制邏輯模塊2-2根據接收到的DC碼對FPGA中產生的1KHz的正弦波進行幅度調制,完成對AC碼的編碼,步驟六:將調制后的信號輸入到DAC芯片,得到IRIG-B的AC碼的模擬量信息,步驟七:將步驟六得到的模擬量信息經過比較器輸入到AC碼譯碼控制邏輯模塊2-5,得到DC碼數字序列,并輸入到DC譯碼控制邏輯模塊2-4,步驟八:DC譯碼控制邏輯模塊2-4將接收到的DC碼數字序列進行譯碼,得到時間信息,根據IRIG-B碼的協議,P脈沖是一種位置標志位碼元,每兩個連續的“P”脈沖,之后表示一組新的時間信息的到來,判斷出每一個碼元所表達的具體含義,當檢測到IRIG-B碼的兩個“P”脈沖之后,在下一個碼元開始的上升沿把譯出的信息賦值到相應的表示時間信息的寄存器變量中,然后輸入到上位機,即完成對DC碼的譯碼和AC碼的譯碼。本實施方式中DC譯碼控制邏輯模塊2-4輸出的DC碼和GPS/北斗雙系統模塊的時間信息上傳到上位機,即將自檢的結果與原始的時間源作比較,從而實現對譯碼功能的自檢。本發明可以通過板卡上的測試孔用示波器觀察產生的DC碼和AC碼;通過在上位機中觀察AC碼譯碼產生的信息、DC碼譯碼產生的信息以及GPS/北斗雙系統模塊1產生的時間信息來實現系統的自檢,具體工作流程如圖8所示。本實施方式中的IRIG-B碼是時間系統中的一種常用串行傳輸方式,B碼分為直流(DC)碼和交流(AC)碼,直流碼為脈寬編碼方式;交流碼是以1KHz的正弦波載頻對直流碼進行幅度調制后形成的。一幀B碼共包含10組100位數據,每組數據周期為100ms、包含10個碼元,每個碼元為10ms寬度,脈沖不同寬度表示不同編碼信息,GPS/北斗雙系統模塊1每秒鐘產生一次時間信息和一個秒脈沖信號,其中每個秒脈沖信號包含100個碼元,所述碼元分為三種,即P脈沖、數字“1”和數字“0”,所述P脈沖的高電平寬度為8ms,低電平寬度為2ms,所述數字“1”的高電平寬度為5ms,低電平寬度為5ms,所述數字“0”的高電平寬度為2ms,低電平寬度為8ms,P脈沖是一種位置標志位碼元,一幀B碼共包含10個P脈沖,把100位碼元分成10組。為了準確測出碼元所表示的信息,同時考慮到降低邏輯資源的占用,采用200us的時鐘檢測每一個碼元。考慮到外部信號可能有毛刺以及抖動的情況,當檢測到碼元的高電平寬度低于400us時不做處理。為了提高對DC碼譯碼的準確性,進行了容錯處理。用周期為200us的時鐘檢測每一個碼元的高電平的時間長度T,根據不同T的值來判斷碼元所表示的信息。本實施方式所述的GPS/北斗雙系統模塊1每秒鐘產生一次時間信息和一個秒脈沖信號(1PPS),所述時間信息和秒脈沖信號是同時產生的,時間信息的數據格式為:“$GPRMC,123400.000,A,4002.2178,N,11618.1057,E,0.026,181.631,180411,,E,A*2C”對于GPS/北斗雙系統模塊1產生時間信息的數據的譯碼FPGA2和單片機3都可以完成,由單片機3來譯碼更加簡單。GPS/北斗雙系統模塊1產生時間信息的數據接口為UART串口,時間信息發送到單片機3。單片機3對時間信息進行譯碼后發送到FPGA2,FPGA2分別用不同的寄存器表示時間信息的不同部分,即DW_sec_ge[3:0]表示時間信息中秒的個位、DW_sec_shi[3:0]表示時間信息中秒的十位、DW_min_ge[3:0]表示時間信息中分的個位、DW_min_shi[3:0]表示時間信息中分的十位等等。例如:當時間信息是2013年01月21日16時47分39秒時,秒的個位為9則DW_sec_ge[3:0]=1001、秒的十位為4則DW_sec_shi[3:0]=0100,依此類推DW_min_ge[3:0]=0111、DW_min_shi[3:0]=0001。在產生時間信息的下一個脈沖,表示時間信息的各個寄存器變量值賦給DC譯碼控制邏輯模塊2-4,DC譯碼控制邏輯模塊2-4也把相應的時間信息存儲在寄存器變量中。由于IRIG-B碼在1秒時間內有100個碼元,因此用18.432M時鐘對秒脈沖信號進行100分頻產生信號a_100pps_in,即100PPS信號。用100PPS信號來產生IRIG-B碼的碼元,在每一個100PPS信號的上升沿產生一個碼元,因此100個100PPS信號時間長度即1秒產生100個碼元。IRIG-B碼的起始信號與秒脈沖信號的上升沿同步,因此用上面方法在1S內產生的誤差最大為1個18.432M時鐘信號的時鐘長度,即1/18432000秒約等于54ns。由于100PPS信號來源于秒脈沖信號的分頻,在每一個秒脈沖信號的上升沿開始100分頻,因此誤差不積累,即產生的IRIG-B碼的理論最大誤差只有54ns。對應的每一個碼元,是時間信號還是P脈沖是有IRIG-B碼的協議規定的。例如秒的個位用第1、2、3、4碼元表示,時間為2013年01月21日16時47分37秒時,秒的個位為7,用二進制表示為0111,則第1、2、3、4碼元分別對應著1110。DC譯碼控制邏輯模塊2-4對于每個碼元信息的產生是根據IRIG-B碼的協議和接收的時間信息來決定的。每一個碼元的時間長度是10ms,用18.432M的時鐘計數,用寄存器tmp_P[31:0]表示計數的個數,從0記到184319是10ms,然后從0開始計數。當tmp_P<n時IRIG-B碼輸出為1,當tmp_P>=n時IRIG-B碼輸出為0,當碼元為P脈沖式時n=147455,即高電平時間長度為8ms。依此類推碼元為“1”時n=92159、推碼元為“0”時n=36863,其他情況n=36863。tmp_P在兩種情況復位歸零,一是tmp_P>=184319時,二是100pps的上升沿,這保證了tmp_P在碼元的上升沿開始計數。由于用18.432M時鐘計數,同上面分析,每個碼元信息的理論最大誤差只有54ns,且誤差不累加。在GPS/北斗雙系統模塊1產生時間信息的下一個脈沖,表示時間信息的各個寄存器變量值賦給DC譯碼控制邏輯模塊2-4,DC譯碼控制邏輯模塊2-4在第99個碼元(共有100個碼元,從0開始,第99個碼元是最后一個碼元并且不表示時間信息)的上升沿把有時間信息決定的N值賦給各個碼元的tmp_P。因此產生的IRIG-B碼表示的時間信息與GPS/北斗雙系統模塊1產生時間信息之間差2秒。具體實施方式五:參見圖3說明本實施方式,本實施方式是對具體實施方式四的進一步限定,所述步驟五所述的AC碼編碼控制邏輯模塊2-2中DC碼對FPGA產生1KHz的正弦波進行幅度調制的具體方法為:AC碼編碼控制邏輯模塊的輸入為DC碼DC_IN,在DC_IN的上升沿,標志值DC_IN高電平的輸入,這時把ROM的地址ROM_ADD復位為0,控制FPGA2的ROM從地址0到地址ROM_ADD依次讀出Nx,讀出的Nx輸入到DACC7714的控制邏輯中,控制DAC芯片4輸出相應的幅值,每讀一次Nx,ROM的地址ROM_ADD加1,然后延時20us,50次后ROM_ADD復位為0,輸出高幅值正弦波,在DC_IN的下降沿,標志值DC_IN低電平的輸入,把ROM的地址ROM_ADD復位為50,依次讀取Nx50次,然后ROM_ADD復位為50,輸出低幅值正弦波,將得到的正弦波進行查表,實現AC碼編碼。本實施方式中的IRIG-B碼的AC碼是用DC碼對1KHz的正弦波進行幅度調制而成的,因此在產生AC碼時,也是在DC碼的基礎上產生的。AC碼產生的是1KHz的正弦波,因此需要外圍DAC芯片在FPGA2的控制下產生。每一個碼元有10個周期的正弦波,每個正弦波的周期為1ms,正弦波的幅值由碼元所表示的信息決定。例如表示“P”脈沖的碼元高電平為8ms,低電平為2ms,則產生的正弦波為8個高幅值的正弦波,2個低幅值的正弦波。AC碼與DC碼的關系如圖2所示:AC碼的產生是基于FPGA2的查找表法實現的。AC碼的產生只需要兩種類型的正弦波:高幅值正弦波和低幅值正弦波,高幅值正弦波和低幅值正弦波的幅值比是由AC碼所要求的調制比決定的。產生AC碼所用的外圍芯片為DAC7714,此芯片為12位的串行輸入的DA轉換器,不同的輸入對應著不同的輸出。輸入的數據與輸出的電壓的關系有如下公式(1)給出:各參數的含義:Vout:DAC的電壓輸出VREFL:負參考電壓VREFH:正參考電壓N:數字量輸入數字量輸入的范圍為0-4096,對應的輸出為-10V~10V。根據采樣定理對1KHz的正弦波進行采樣,采樣頻率最少為5KHz。DAC7714完成一次輸出需要11us,輸出頻率能夠達到90KHz。根據DAC芯片的輸入輸出特性同時考慮到正弦波曲線的光滑性,把高幅值正弦波的一個周期內的幅值按時間均勻分成50等份即采樣頻率為50KHz,根據得到的Voutx計算出相應的Nx,計算過程有LabVIEW編寫的一個軟件自動完成。有LabVIEW根據計算公式(1)計算得到的50個12位的二進制數分別存儲到一個以HEX為后綴的文件中,對應的地址分別為0-49,FPGA2內的ROM從這個文件中讀取相應的數據。同理由低幅值正弦波得到的50個數存儲到地址為50-99的空間中去。具體實施方式六:本實施方式是對具體實施方式四的進一步限定,所述步驟四所述的DC碼編碼控制邏輯模塊2-3產生DC碼數字序列的方法為::根據IRIG-B碼的協議和接收的時間信息,用18.432M時鐘對每一個秒脈沖信號進行100分頻,產生信號a_100pps_in,即100PPS信號,用100PPS信號來產生IRIG-B碼的碼元,在每一個100PPS信號的上升沿產生一個碼元,每一個碼元的時間長度是10ms,用18.432M的時鐘計數,用寄存器tmp_P[31:0]表示計數的個數,從0記到184319是10ms,然后從0開始計數,當tmp_P<n時IRIG-B碼輸出為1,當tmp_P>=n時IRIG-B碼輸出為0,當碼元為P脈沖式時n=147455,即高電平時間長度為8ms,碼元為“1”時n=92159,碼元為“0”時n=36863,其它情況n=36863,當tmp_P>=184319或100pps的上升沿時,tmp_P復位歸零,DC碼編碼控制邏輯模塊2-3在第99個碼元的上升沿把有時間信息決定的N值賦給各個碼元的tmp_P。具體實施方式七:參見圖4和圖5說明本實施方式,本實施方式是對具體實施方式四的進一步限定,所述AC碼編碼控制邏輯模塊2-2包括如下工作狀態:AC碼編碼控制邏輯模塊2-2處于空閑狀態時輸入DC碼,當DC碼處于下降沿時,AC碼編碼控制邏輯模塊2-2由空閑狀態轉入低幅值正弦波輸出狀態,當DC碼處于上升沿時,AC碼編碼控制邏輯模塊2-2由空閑狀態轉入高幅值正弦波輸出狀態,當DC碼處于上升沿時,AC碼編碼控制邏輯模塊2-2由低幅值正弦波輸出狀態轉入高幅值正弦波輸出狀態,當DC碼處于下降沿時,AC碼編碼控制邏輯模塊2-2由高幅值正弦波輸出狀態轉入低幅值正弦波輸出狀態。具體實施方式八:參見圖6說明本實施方式,本實施方式是對具體實施方式四的進一步限定,所述AC碼譯碼控制邏輯模塊2-5的具體工作過程為:將AC碼編碼輸入經過一個過零比較器,在過零比較輸出的上升沿之后延時250us正好檢測到AC碼輸入的峰值,這時控制ADC芯片采集AC碼的輸入,設AC碼高正弦波的最大峰值為X,低正弦波的最大峰值為Y,AD采集的值為Z,當Y<Z<=X時輸出高電平,當Z<=Y時輸出低電平。本實施方式中的AC碼譯碼控制邏輯模塊2-5檢測到高電平后開始計時,如果高電平的時間長度不夠20us,則重新開始計算高電平,這樣就可以很好的解決過零比較器在零點附近抖動的問題。過零比較器零點附近產生抖動問題示意圖如圖7所示。DC碼的輸出與AC碼的輸入相比正好延遲了250us即四分之一個周期,AC轉換為DC碼之后,輸入到DC譯碼控制邏輯模塊2-4就可以完成對AC碼模塊的譯碼。具體實施方式九:參見圖4和圖5說明本實施方式,本實施方式是對具體實施方式四的進一步限定,所述DC譯碼控制邏輯模塊2-4譯碼的具體工作狀態為:當DC碼高電平輸入時,由空閑狀態轉入干擾判斷狀態,在干擾判斷狀態時,對輸入的DC碼進行判斷,如果有毛刺以及抖動,則由干擾判斷狀態轉入空閑狀態,如果沒有毛刺以及抖動,則由干擾判斷狀態轉入高電平計數狀態,檢測到碼元寬度X大于6.2ms時,由高電平計數狀態轉入P脈沖處理狀態,檢測到碼元寬度X大于3.8ms且小于6.2ms時,由高電平計數狀態轉入數字1處理狀態,檢測到碼元寬度X大于1.4ms且小于3.8ms時,由高電平計數狀態轉入數字0處理狀態;所述DC譯碼控制邏輯模塊2-4結果輸出的具體工作狀態為:當檢測到兩個連續的“P”脈沖信號時,由空閑狀態轉入狀態標志狀態,當DC碼輸入上升沿時,由狀態標志狀態轉入數據輸出狀態,數據輸出狀態轉入延時狀態,接著由延時狀態轉回空閑狀態。本實施方式中譯出的時間與DC碼表示的時間之間差1s,這是不可避免的。本發明實現了IRIG-B碼的環回自檢,DC碼編碼的輸出信號在板卡的外面環回到DC碼譯碼的輸入信號,DC譯碼控制邏輯模塊2-4把DC碼的時間信息譯出后放到相應的寄存器中,通過CPCI總線上傳到上位機中,用LabVIEW編寫的軟件顯示,GPS/北斗雙系統模塊1產生的時間信息一路發送的單片機3譯碼,另一路直接發送到FPGA2,FPGA2中的串行接收模塊把收到的串行數據轉換為并行數據存儲到FIFO中,根據FIFO收到的數據個數,再把FIFO中的數據轉移到FPGA2中的RAM中去,這樣上位機就可以隨時讀取FPGA2中收到的GPS/北斗雙系統模塊1發來的時間信息,解決了能把FIFO讀空的問題。上位機讀取到GPS/北斗雙系統模塊1產生的原始信息后會對它進行譯碼,把時間信息譯出來,DC碼從原始信息經歷編碼譯碼之后與原始信息相比延時了3秒,AC碼延時了3.25秒。在LabVIEW編寫的上位機軟件中可以很方便的觀察DC碼譯碼信息、AC碼譯碼信息和原始的時間信息。