霍海強 陳旭東 趙巖
摘要:針對計算機時間同步需求,設(shè)計了一種基于PCI Express(PCIe)總線的IRIG-B碼(B碼)解碼卡,該板卡接收外部B碼信號并解調(diào)出B碼時間信息,通過PCIe總線將B碼時間信息傳遞給計算機進而完成計算機時間同步。測試結(jié)果表明,計算機能夠同步到B碼時間,且B碼解碼精度優(yōu)于100 ns,能夠滿足多數(shù)應(yīng)用需求。
關(guān)鍵詞:PCIe;B碼;FPGA
中圖分類號:TN253文獻標(biāo)志碼:A文章編號:1008-1739(2021)15-51-4
0引言
時間是靶場、電力系統(tǒng)、導(dǎo)航定位、計算機網(wǎng)絡(luò)通信等領(lǐng)域的一個非常重要的參數(shù),同步精度指標(biāo)直接影響著系統(tǒng)工作的穩(wěn)定性與可靠性。為保障系統(tǒng)中各個設(shè)備之間時間的準(zhǔn)確性,通常配備時鐘源作為時間基準(zhǔn),將B碼等時頻信號傳輸?shù)接脮r設(shè)備,系統(tǒng)中計算機則配置B碼解碼卡從時鐘源獲取高精度的時間[1],從而與系統(tǒng)時間保持一致。鑒于B碼解碼卡僅用于傳輸時間信息,傳輸?shù)臄?shù)據(jù)量小,因此設(shè)計采用內(nèi)嵌PCIe硬核的FPGA實現(xiàn)PCIe總線通信,通過這樣的方式簡化設(shè)計難度,降低制作成本,同時能夠為計算機提供基于PCIe總線的時間信息[2]。
1總體設(shè)計
1.1 B碼授時原理
GJB 2991A-2008《B時間碼接口終端通用規(guī)范》規(guī)定,B碼的時幀速率為1幀/秒,1幀包含100個脈沖(碼元),碼元周期為10 ms。每個碼元序號由索引計數(shù)所確定,索引計數(shù)由準(zhǔn)時點起,0~99。碼元脈寬分為5 ms,2 ms,8 ms,2 ms表征二進制0;5 ms表征二進制1;8 ms表征位置識別標(biāo)志P[3]。在B碼的幀格式中,時幀的參考標(biāo)志由一個位置識別標(biāo)志和相鄰的參考碼元組成,Pr為幀參考點,其寬度為8 ms。每10個碼元有一個位置識別標(biāo)志:P1,P2,P3,…,P9,P0,它們均為8 ms寬度。一個時間格式幀從幀參考標(biāo)志開始,因此連續(xù)2個8 ms寬脈沖表明時幀中秒的開始,從第2個8 ms開始對碼元進行編碼,分別為第0,1,2,…,99個碼元。B碼共100個碼元,使用部分碼元表示年、天、時、分、秒、潤秒鋒信息,第2個8 ms的上升沿代表秒始信號,通過對B碼進行解碼進而獲得時間信息及秒始信號,即完成B碼授時,B碼格式如圖1所示[4]。
2總體架構(gòu)設(shè)計
基于PCIe總線的B碼解碼卡由解碼卡、驅(qū)動和上位機軟件三部分組成。B碼解碼卡完成B碼解碼、搭建底層PCIe鏈路功能;驅(qū)動程序構(gòu)建上位機軟件與解碼卡之間的PCIe鏈路;上位機軟件通過驅(qū)動讀取B碼解碼卡解出的時間信息,進而更新本地時間,完成計算機B碼授時,總體架構(gòu)設(shè)計如圖2所示。
3解碼卡設(shè)計
3.1硬件電路設(shè)計
解碼卡主要由電平轉(zhuǎn)換芯片、FPGA、Flash及電源芯片等組成,其中FPGA選用XILINX公司內(nèi)置PCIe硬核的SPARTAN 6系列,鑒于計算機上電過程中BIOS需要在500 ms內(nèi)掃描到PCIe硬件,因此FPGA及Flash需要在500 ms內(nèi)具備運行狀態(tài),為了保證FPGA上電程序?qū)霑r間滿足上述要求,解碼卡采用并行BPI Flash保證程序?qū)霑r間。硬件設(shè)計框圖如圖3所示。
解碼卡通過電平轉(zhuǎn)換芯片將外部B(DC)碼轉(zhuǎn)換為LVTTL電平送入FPGA,F(xiàn)PGA可使用內(nèi)時頻或外時頻解調(diào)出B碼時間信息及1 PPS信號建立本地時間基準(zhǔn),計算機通過金手指為解碼卡供電,并通過PCIe通信鏈路設(shè)置解碼卡參數(shù),讀取B碼解碼時間。
3.2 FPGA程序設(shè)計
3.2.1 B碼解碼程序設(shè)計
根據(jù)B碼特性,2個連續(xù)8 ms碼元的第2個8 ms代表秒始,因此搜索這2個碼元最為關(guān)鍵[5-6],在獲得秒始后,根據(jù)碼元計數(shù)可得B碼時間信息,具體流程如下。
①FPGA以晶振的10 MHz為參考時鐘分頻出1 kHz脈沖,對外部輸入B碼脈寬進行計數(shù),判別出各個碼元的脈寬;
②根據(jù)連續(xù)2個8 ms脈寬碼元,獲得秒始信號Pr;
③根據(jù)Pr位置及后續(xù)碼元脈寬,獲得各個位置碼元值;
④存儲各個碼元值,根據(jù)國軍標(biāo)規(guī)定的年、天、時、分、秒、潤、秒對應(yīng)的碼元位置及碼元值,確定B碼解碼時間;
⑤根據(jù)Pr位置提取秒始信號,獲得秒沿1 PPS信號并輸出。
在1 PPS信號上升沿秒以上進行加一秒操作,秒以下計數(shù)清零,同時秒以下計數(shù)以晶振10 MHz為時鐘進行累加,提供秒以下時間信息。
3.2.2 PCIe通信鏈路程序設(shè)計
解碼卡FPGA的PCIe通信鏈路程序由PCIe硬核及邏輯程序組成,通過例化FPGA廠家封裝的IP核即可調(diào)用PCIe硬核,另外,可根據(jù)具體需求對PCIe IP核的各個寄存器進行設(shè)置,其中包括BAR、ID、性能寄存器、結(jié)構(gòu)寄存器等多個參數(shù)。需要注意的是,當(dāng)需要插入2張解碼卡時,2張卡的ID不能相同,否則會造成沖突。
完成IP核設(shè)置之后,在FPGA頂層文件中,根據(jù)上位機動態(tài)庫寄存器地址及對應(yīng)的操作、IP核參數(shù)等設(shè)計PCIe讀寫操作模塊,建立與上位機之間的PCIe總線通信基礎(chǔ)。FPGA建立PCIe硬核之后,需要調(diào)用PCIe的Tx_Engine、Rx_Engine才能進行PCIe收發(fā)操作,發(fā)送引擎和接收引擎狀態(tài)機如圖4和圖5所示,根據(jù)Tx_Engine、Rx_Engine狀態(tài)機,在FPGA中建立對應(yīng)的控制邏輯即可完成FPGA的PCIe鏈路通信工作。
4上位機驅(qū)動及軟件設(shè)計
上位機需要使用驅(qū)動才能建立PCIe通信,完成對解碼卡的讀寫操作。為簡化應(yīng)用程序設(shè)計、擴展用戶應(yīng)用,在安裝驅(qū)動的基礎(chǔ)上,建立動態(tài)庫完成驅(qū)動函數(shù)的調(diào)用,然后用戶可根據(jù)動態(tài)庫接口,在相應(yīng)的軟件中調(diào)用動態(tài)庫函數(shù)即可完成解碼卡狀態(tài)設(shè)置、B碼時間提取等工作。
4.1驅(qū)動及動態(tài)庫設(shè)計
為簡化設(shè)計流程,使用Jungo公司的Windriver軟件包完成驅(qū)動開發(fā),該軟件包可以大幅簡化設(shè)備驅(qū)動程序開發(fā)和硬件訪問程序,將底層芯片復(fù)雜操作(如DMA傳輸?shù)龋┓庋b起來,并提供動態(tài)庫接口調(diào)用說明即可。
基于Windriver驅(qū)動接口,在Visual Studio環(huán)境下開展了動態(tài)庫函數(shù)設(shè)計工作,動態(tài)庫函數(shù)的優(yōu)勢在于用戶應(yīng)用軟件不再關(guān)心底層硬件,有助于后續(xù)各種上位機應(yīng)用軟件開發(fā)。驅(qū)動及動態(tài)庫函數(shù)是底層硬件與應(yīng)用程序之間通信的橋梁,如圖6所示。
根據(jù)實際工程應(yīng)用需求,設(shè)計了動態(tài)庫接口函數(shù),如表1所示。上位機用戶軟件通過調(diào)用動態(tài)庫的接口函數(shù)即可完成解碼卡狀態(tài)設(shè)置及時間讀寫工作。當(dāng)需要增加新功能時,在動態(tài)庫函數(shù)中增加新的定義函數(shù),并在FPGA中增加對應(yīng)寄存器的操作即可。
4.2軟件設(shè)計
完成驅(qū)動及動態(tài)庫函數(shù)設(shè)計后,在上位機使用Visual Studio開展應(yīng)用軟件設(shè)計。為滿足多種應(yīng)用需求,軟件界面設(shè)計97/08版本選擇、內(nèi)B碼/外B碼選擇、內(nèi)時鐘/外時鐘選擇、外部B碼狀態(tài)、B碼時間設(shè)置等功能,可設(shè)置解碼卡工作在不同版本、不同B碼源、不同時鐘源(外部有高性能時鐘源)。在軟件運行過程中,將自動存儲B碼時間及B碼狀態(tài),每小時保存一個“.txt”文件,當(dāng)外部B碼丟失或B碼時間錯誤時,可為后續(xù)分析問題及解決問題提供數(shù)據(jù)支撐。軟件界面如圖7所示。
5測試結(jié)果分析
對解碼卡進行測試,測試框圖如圖8所示。時頻信號產(chǎn)生器內(nèi)置銣鐘,產(chǎn)生B碼、10 MHz和1 PPS信號,分別送入解碼卡及計數(shù)器;解碼卡插到計算機PCIe×1槽位,解調(diào)外部B碼并將解出的1 PPS送入計數(shù)器進行測量,同時,計算機存儲測量結(jié)果及解碼卡解碼時間信息。
解碼卡時間存儲結(jié)果如圖9所示,最后一位為標(biāo)志位,當(dāng)外部B碼有效時為A,無效時為V。
時間間隔計數(shù)器測試結(jié)果如圖10所示,時頻信號產(chǎn)生器1 PPS與解碼1 PPS存在55 ns左右的偏差,經(jīng)分析,由于B碼傳輸為單向傳輸,傳輸路徑將導(dǎo)致時頻信號產(chǎn)生器輸出端B碼與解碼卡輸入端B碼信號存在12 ns固定的偏差,該偏差與線纜類型及線纜長度有關(guān),解碼卡解調(diào)1 PPS與B碼輸入存在33 ns左右偏差,該偏差與信號在FPGA內(nèi)部傳輸路徑有關(guān)。當(dāng)前B碼解碼精度一般在200 ns,能夠滿足大多數(shù)應(yīng)用的需求。
6結(jié)束語
介紹了基于PCIe總線的B碼解碼板卡的設(shè)計與實現(xiàn),鑒于PCIe總線數(shù)據(jù)流量較小,板卡使用內(nèi)嵌PCIe硬核的FPGA實現(xiàn)底層B碼解碼及PCIe通信,解碼精度優(yōu)于100 ns,與使用專用PCIe橋接芯片方案相比,方案更加簡潔,同時降低了生產(chǎn)成本。另外,在上位機使用Windriver建立PCIe驅(qū)動,然后設(shè)計與FPGA程序?qū)?yīng)的動態(tài)庫及應(yīng)用程序即可通過PCIe總線讀取B碼解碼時間信息,最終完成對計算機的授時,實現(xiàn)計算機時間與系統(tǒng)時間同步。
參考文獻
[1]任連芳.基于PCI+Express總線的數(shù)據(jù)傳輸與存儲[D].南京:南京理工大學(xué),2010.
[2]張森峰.基于PCI+Express的數(shù)據(jù)傳輸適配卡設(shè)計[D].太原:中北大學(xué),2009.
[3]張明迪.基于FPGA的IRIG-B碼解碼設(shè)計[D].哈爾濱:哈爾濱工程大學(xué),2011.
[4]陳利.基于FPGA的IRIG-B碼基帶產(chǎn)生電路的設(shè)計與實現(xiàn)[D].蘇州:蘇州大學(xué),2014.
[5]耿家慶.新一代的GPS-B碼解碼授時系統(tǒng)設(shè)計[D].濟南:山東大學(xué),2014.
[6]吳煒,周燁,黃子強.FPGA實現(xiàn)IRIG-B(DC)碼編碼和解碼的設(shè)計[J].電子設(shè)計工程,2010,18(12):162-164.