田 園,李大鵬,蒲 愷,李玉發(fā)
(中航工業(yè)計(jì)算所,西安 710119)
?
基于FPGA的IRIG-B編解碼設(shè)計(jì)與實(shí)現(xiàn)
田 園,李大鵬,蒲 愷,李玉發(fā)
(中航工業(yè)計(jì)算所,西安 710119)
隨著系統(tǒng)間時間同步要求的提高,IRIG-B碼被越來越多的應(yīng)用于系統(tǒng)間的時統(tǒng)模塊中;針對傳統(tǒng)的單片機(jī)及專用芯片實(shí)現(xiàn)方法已經(jīng)不能滿足產(chǎn)品的可靠性和可移植性的問題,對基于FPGA的IRIG-B編解碼設(shè)計(jì)和實(shí)現(xiàn)方法進(jìn)行了研究;提出了一種將BCD碼和二進(jìn)制碼之間相互轉(zhuǎn)換的迭代算法;結(jié)合FPGA設(shè)計(jì)方法對IRIG-B編碼和解碼方法進(jìn)行了研究;通過對實(shí)驗(yàn)方法進(jìn)行仿真,結(jié)果表明該方法能夠正確有效的對時間信息進(jìn)行IRIG-B格式的解碼和編碼,并且FPGA內(nèi)部的實(shí)現(xiàn)形式可以大大減少外部芯片及電路的使用,從而大幅提升產(chǎn)品的可靠性和可移植性。
IRIG-B;FPGA;編碼;解碼
伴隨通信設(shè)備應(yīng)用的發(fā)展,時間同步技術(shù)應(yīng)用于越來越多的系統(tǒng)中,用于同步系統(tǒng)間不同設(shè)備或分系統(tǒng)的時間,例如信息分發(fā)系統(tǒng)、測控系統(tǒng)、定位系統(tǒng)。RIG時間序列碼是一種常用于時間系統(tǒng)中的串行時間碼,它是由美國靶場間儀器組(inter-range instrumentation group,簡稱IRIG)在1959年設(shè)計(jì),特點(diǎn)是可靠性高、傳輸距離遠(yuǎn)、具有標(biāo)準(zhǔn)接口及使用方法靈活[1]。IRIG碼有A、B、D、E、G、H六種,它們的區(qū)別是碼流速率不同及所表示的時間信息不同,IRIG-B應(yīng)用最為廣泛[2]。目前,IRIG_B廣泛應(yīng)用于氣象、通信、遠(yuǎn)程控制、測量等設(shè)備中,全球定位系統(tǒng)(global positioning system)的接收設(shè)備就是采用IRIG_B碼作為標(biāo)準(zhǔn)。
現(xiàn)場可編程門陣列(FPGA)作為設(shè)計(jì)的核心,應(yīng)用于目前大多數(shù)產(chǎn)品的設(shè)計(jì)中,往往一片F(xiàn)PGA就可以完成所有軟硬件的功能。以往很多IRIG-B的設(shè)計(jì)都是基于單片機(jī)或?qū)S媒獯a芯片實(shí)現(xiàn),使用不夠靈活,且精度不高。需要一種能夠融合到FPGA的IRIG-B設(shè)計(jì)方法,使得設(shè)計(jì)更加靈活、精度更高且易移植。
IRIG-B碼有支流(DC)碼和交流(AC)碼兩種存在形式。DC碼是以脈沖寬度編碼方式[3]。AC碼是對DC碼以1 kHz的正弦波進(jìn)行幅度調(diào)制后形成的,用以適合遠(yuǎn)距離傳送。本文對DC碼進(jìn)行研究。
IRIG-B碼格式示意圖見圖1。IRIG-B碼有3種碼元,分別為P碼、1碼和0碼。每個碼元占時10 ms,用高電平的時間來區(qū)分各種碼元,P碼、1碼和0碼分別對應(yīng)的高電平時間為8 ms、5 ms和2 ms。P碼是用于編解碼時對碼流進(jìn)行定位,1碼和0碼分別對應(yīng)邏輯“1”和邏輯“0”。每個B碼是以連續(xù)的兩個P碼作為開始,第一個P碼是位置碼,第二個P碼是秒脈沖(PPS),秒脈沖的上升沿是該B碼的準(zhǔn)時刻參考點(diǎn)(on-time reference point)。IRIG-B碼為每秒一幀,每幀分為10個字段,每個字段10個碼元,就是10個bit信息,共100個碼元100位信息[4]。將100個碼元按照0~99進(jìn)行編碼,則碼元中時間信息的具體分布為:第0、9、19、29、39、49、59、69、79、89為10個位置P碼,分別為P0~P9;P0和P1之間為“秒”時間區(qū)域;P1和P2之間為“分”時間區(qū)域;P2和P3之間為“時”時間區(qū)域;P3和P4之間為“天”時間區(qū)域;P4和P5之間為“百天”時間區(qū)域;P5和P6之間為“年”時間區(qū)域;P6和P8之間為控制信息區(qū)域;P8和下一個P0之間為TOD(Time Of Day)時間區(qū)域,TOD是指當(dāng)前時刻是當(dāng)天的第多少秒。P0~P8之間為BCD編碼,最后的TOD時間為標(biāo)準(zhǔn)二進(jìn)制編碼。
圖1 IRIG-B碼示意圖
傳統(tǒng)的IRIG-B碼編解碼電路通常采用單片機(jī)的A/D接口結(jié)合外圍電路實(shí)現(xiàn)[5]。現(xiàn)有使用單片機(jī)的通信設(shè)備很少,大部分設(shè)計(jì)中采用FPGA作為設(shè)計(jì)核心,所以可以將IRIG-B碼單片機(jī)實(shí)現(xiàn)的全部工作合并進(jìn)FPGA,使得設(shè)計(jì)更加緊湊、合理。
2.1 BCD碼轉(zhuǎn)換
IRIG-B碼中除TOD信息是二進(jìn)制編碼外,其余時間信息都是使用BCD(Binary-Coded Decimal)碼標(biāo)準(zhǔn)。BCD碼也叫二/十進(jìn)制碼,含義是指二進(jìn)制編碼的十進(jìn)制碼。BCD碼的每個十進(jìn)制數(shù)字用一串單獨(dú)的二進(jìn)制比特來存儲,較為常見的是4個比特位標(biāo)識一個十進(jìn)制數(shù)字,最終德BCD碼對外表現(xiàn)形式為二進(jìn)制,表達(dá)的是十進(jìn)制數(shù)字。
年份的編碼在IRIG標(biāo)準(zhǔn)和IRIG-B時間編碼的文檔中,進(jìn)對年份的十位和個位進(jìn)行編碼。例如2015年,IRIG-B碼的年份為15年。時間信息格式如15年200日12時30分40秒,需要轉(zhuǎn)換為8421格式的BCD碼才能為IRIG-B接收端接收。FPGA內(nèi)部使用的編碼方式是二進(jìn)制,因此需要一種FPGA可實(shí)現(xiàn)的將二進(jìn)制時間信息與BCD碼相互轉(zhuǎn)換的方法。
假設(shè)一二進(jìn)制數(shù)為X,將其轉(zhuǎn)換為8421格式的BCD碼Y(初始值設(shè)為0)的過程如下:
1) 如果X>=80,則Y=Y&&1,且Y左移1位,X=X-80;
2) 如果X>=40,則Y=Y&&1,且Y左移1位,X=X-40;
3) 如果X>=20,則Y=Y&&1,且Y左移1位,X=X-20;
4) 如果X>=10,則Y=Y&&1,且Y左移1位,X=X-10;
5) 如果X>=8,則Y=Y&&1,且Y左移1位,X=X-8;
6) 如果X>=4,則Y=Y&&1,且Y左移1位,X=X-4;
7) 如果X>=2,則Y=Y&&1,且Y左移1位,X=X-2;
8) 如果X>=1,則Y=Y&&1,且Y左移1位,X=X-1。
BCD碼轉(zhuǎn)換Y為二進(jìn)制數(shù)X的方法如下:
1) 如果Y[0]=1,則X=X+1,Y右移1位;
2) 如果Y[0]=1,則X=X+2,Y右移1位;
3) 如果Y[0]=1,則X=X+4,Y右移1位;
4) 如果Y[0]=1,則X=X+8,Y右移1位;
5) 如果Y[0]=1,則X=X+10,Y右移1位;
6) 如果Y[0]=1,則X=X+20,Y右移1位;
7) 如果Y[0]=1,則X=X+40,Y右移1位;
8) 如果Y[0]=1,則X=X+80,Y右移1位。
2.2 IRIG-B解碼
IRIG-B解碼的過程就是將一個IRIG-B碼的波形解碼為最終的時間信息,所以需要將B碼的波形先轉(zhuǎn)換為BCD碼,再將BCD碼轉(zhuǎn)換為二進(jìn)制碼。
針對波形的解碼是基于單獨(dú)碼元的解碼。IRIG-B的碼元占時均為10 ms,P碼元、0碼元和1碼元分別占用高電平時間為8 ms、2 ms和5 ms。從以上描述可知,碼元識別的最小分辨率為1 ms,因此檢測一個碼元必須以1 kHz或更快的時鐘頻率對IRIG-B的波形進(jìn)行采集才能將P碼元、0碼元和1碼元進(jìn)行區(qū)分。設(shè)計(jì)中不需要采用外部輸入源的方式進(jìn)行時鐘獲取,可采用FPGA內(nèi)部鎖相環(huán)(PLL)將內(nèi)部使用始終變換為可用頻率的時鐘。例如將25 MHz變換為1 MHz,再利用邏輯代碼將1 MHz轉(zhuǎn)換為1 kHz的時鐘頻率。設(shè)計(jì)中為提高碼元的精確識別,使用1 MHz頻率的時鐘對IRIG-B進(jìn)行碼元采集。解碼時對P碼元、0碼元和1碼元的采集計(jì)數(shù)值分別為8 000、2 000和5 000。這樣做的原因是如果時鐘信號存在漂移,采用1 kHz的時鐘頻率采集計(jì)數(shù)時分別為8、2、5,如果始終存在漂移或因其他行為,很容易造成碼元識別錯誤。針對時鐘漂移的問題[6],采用1 MHz的時鐘,可以采用范圍鑒別的方法識別碼元,例如9000~7000計(jì)數(shù)識別為P碼元,1000~3000識別為0碼元,4000~6000識別為1碼元。
解碼時首先從碼元的識別開始,將IRIG-B碼的波形使用1 MHz的時鐘進(jìn)行一個時鐘周期的延遲,延遲后利用原波形與延遲后的波形(Irig-B-delay)產(chǎn)生新的A脈沖和B脈沖,如圖2所示。A脈沖及B脈沖生成條件如下:
Pulse A = irig-b=’1’ and irig-b-delay=’0’
Pulse B = irig-b=’0’ and irig-b-delay=’1’
A脈沖表示B碼中單個碼元的開始,B脈沖表示B碼單個碼元高電平的結(jié)束。設(shè)置循環(huán)計(jì)數(shù)器從A脈沖開始計(jì)時至下一個脈沖值,使得計(jì)數(shù)在0到9999之間循環(huán)。每當(dāng)檢測到B脈沖的存在,記錄下計(jì)數(shù)值為cnt,判斷cnt是否為3種碼元范圍識別中的一種,如果是則可分別判斷當(dāng)前碼元屬于P碼、1碼或0碼,若計(jì)數(shù)值不為8、5、2中的一種可認(rèn)為碼元無效。
圖2 碼元解碼示意圖
在單個碼元提取的基礎(chǔ)上可以實(shí)現(xiàn)對B碼中時間信息的提取。連續(xù)出現(xiàn)2個pps秒脈沖則認(rèn)為是一個B碼完整幀的開始,因此需要先對兩個連續(xù)的P碼進(jìn)行定位后,再對B碼中其余碼元表示的信息進(jìn)行提取和解析。提取完兩個P碼后,后續(xù)的B碼波形可分為10個類似的部分:第一部分代表秒時間段;第二部分代表分時間段;第三部分代表時時間段;第四部分代表天時間段;第五部分代表百天時間段;第六部分代表年時間段;后續(xù)代表控制字段和TOD字段。每個時間段占時100 ms,并且以P碼開始。使用寄存器將B碼中的BCD碼保存下來。為了產(chǎn)生一個連續(xù)解碼的效果,需要從解析到第一個P碼開始計(jì)數(shù),當(dāng)計(jì)數(shù)到99時,加上之前解析的P碼共100個碼元占時1微秒代表一個完整IRIG-B幀解析完成。設(shè)計(jì)狀態(tài)機(jī)如圖3所示。各狀態(tài)描述如下:
圖3 解碼狀態(tài)機(jī)
IDLE狀態(tài):①檢測到P碼元進(jìn)入P0狀態(tài),否則繼續(xù)在IDLE狀態(tài)等待P碼元。
P0狀態(tài):②檢測到1碼元、0碼元或不可識別的碼元則進(jìn)入IDLE狀態(tài);③檢測到P碼元進(jìn)入P狀態(tài)。
P狀態(tài):④檢測到P碼元繼續(xù)處于P狀態(tài),⑤檢測到1碼元或0碼元進(jìn)入REV狀態(tài),⑥檢測到不可識別碼元進(jìn)入IDLE狀態(tài)繼續(xù)等待幀頭。
REV狀態(tài):⑦檢測到1碼元或0碼元,且計(jì)數(shù)器小于99,繼續(xù)處于DATA狀態(tài);⑧檢測到P碼元且計(jì)數(shù)值小于99,進(jìn)入P狀態(tài);⑨檢測到不可識別碼元,或檢測到1碼元或0碼元且計(jì)數(shù)值大于等于99,進(jìn)入IDLE狀態(tài);⑩檢測到P碼元,且計(jì)數(shù)器大于等于99,則進(jìn)入P0狀態(tài)。
在REV狀態(tài)中,依據(jù)當(dāng)前B碼碼元數(shù)計(jì)數(shù)判斷當(dāng)前處于哪個信息的采集時間。若碼元計(jì)數(shù)值小于10時,處入秒信息讀取狀態(tài),若碼元計(jì)數(shù)值小于20大于10時,處入分信息讀取狀態(tài);若碼元計(jì)數(shù)值小于30大于20時,處入時信息讀取狀態(tài);若碼元計(jì)數(shù)值小于40大于30時,處入天信息讀取狀態(tài);若碼元計(jì)數(shù)值小于50大于40時,處入百天信息讀取狀態(tài);若碼元計(jì)數(shù)值小于60大于50時,處入年信息讀取狀態(tài)。將收集到的BCD碼格式的秒、分、時、天、百天、年信息存放于寄存器中,再使用3.1描述的方法轉(zhuǎn)換為2進(jìn)制格式即可用于上層軟件直接調(diào)用。
2.3 IRIG-B編碼
IRIG-B編碼的過程類似于IRIG-B解碼的逆過程,如圖所示,先對時間信息進(jìn)行檢查,再將符合要求的時間信息進(jìn)行二進(jìn)制碼到BCD碼的轉(zhuǎn)換,最終將BCD碼發(fā)出。
時間信息的檢查主要目的是通過檢查時間信息的數(shù)據(jù)是否合理性,濾除不合理的時間,避免接收端收到錯誤的時間信息。時間信息使用寄存器格式存放,在初始是二進(jìn)制碼格式的。檢查時間信息是否合理主要是檢查年信息是否超過99,日信息是否超過356,時信息是否超過24,分信息和秒信息是否超過60。如果存在上述任意一種情況則該時間數(shù)據(jù)就不合理,不能發(fā)送。將合理的二進(jìn)制時間信息同過3.1中所述的迭代方式,變化為8421BCD碼存放于6個8位寄存器中。與解碼類似,第一個代表秒時間段,第二個代表分時間段,第3個代表時時間段,第4個代表天時間段,第5個代表百天時間段,第6個代表年時間段。
設(shè)計(jì)狀態(tài)機(jī)對時間信息進(jìn)行發(fā)送,見圖4。對P碼元、1碼元和0碼元的發(fā)送采用1 kHz進(jìn)行0-9的循環(huán)小計(jì)數(shù)發(fā)送,控制輸出電平的高低。采用一個0-99的大循環(huán)計(jì)數(shù)控制狀態(tài)的遷移,計(jì)數(shù)從PPS狀態(tài)開始,各狀態(tài)描述如下。
IDLE狀態(tài):①發(fā)送P碼元進(jìn)入PPS狀態(tài)。
PPS狀態(tài):②發(fā)送P碼元進(jìn)入P狀態(tài),設(shè)置計(jì)數(shù)值為0。
P狀態(tài):③發(fā)送P碼元,進(jìn)入SEND狀態(tài),計(jì)數(shù)值增1。
圖4 編碼狀態(tài)機(jī)
DATA狀態(tài):當(dāng)計(jì)數(shù)值小于10時,依次對秒信息各位進(jìn)行發(fā)送;當(dāng)計(jì)數(shù)值小于20大于10時,依次對分信息各位進(jìn)行發(fā)送;當(dāng)計(jì)數(shù)值小于30大于20時,依次對時信息各位進(jìn)行發(fā)送;當(dāng)計(jì)數(shù)值小于40大于30時,依次對天信息各位進(jìn)行發(fā)送;當(dāng)計(jì)數(shù)值小于50大于40時,依次對百天信息各位進(jìn)行發(fā)送;當(dāng)計(jì)數(shù)值小于60大于50時,依次對年信息各位進(jìn)行發(fā)送。④當(dāng)計(jì)數(shù)為9、19、29、39、49、59、69、79、89時進(jìn)入P狀態(tài),⑤當(dāng)計(jì)數(shù)為99進(jìn)入PPS狀態(tài)。
采用xilinx的FPGA進(jìn)行功能驗(yàn)證。使用verilog進(jìn)行編碼,仿真結(jié)果見圖5和圖6。圖中cycle為每個信息段的0-9計(jì)數(shù),big_cnt為每個B碼幀的0-99計(jì)數(shù),year、day、hour、min、sec分別代表二進(jìn)制格式的年、天、時、分、秒。圖5中code_in為外界輸入B碼,time1、time2、time3、time4為保存B碼的8421BCD格式碼的寄存器。圖6中time_sec、time_min、time_day、time_bday、time_year分別代表秒、分、時、天、百天、年的BCD格式碼,code_out為B碼輸出。仿真結(jié)果表明,該方法能夠正確有效的對IRIG-B碼進(jìn)行解碼和編碼,并可正確的進(jìn)行時間信息的二進(jìn)制碼格式與BCD格式碼相互轉(zhuǎn)換。
圖5 解碼過程仿真圖
圖6 編碼過程仿真圖
本文通過對IRIG-B碼原理進(jìn)行分析,基于FPGA提出了一種基于二進(jìn)制與BCD碼相互轉(zhuǎn)換,結(jié)合內(nèi)部狀態(tài)機(jī)進(jìn)行IRIG-B碼編碼和解碼的方法,并采用xilinx的FPGA進(jìn)行了仿真驗(yàn)證。仿真結(jié)果表明,該方法能夠滿足基于正確有效的對該時間碼進(jìn)行解碼和編碼,并且FPGA內(nèi)部的實(shí)現(xiàn)形式可以大大減少外部編解碼芯片電路的使用,從而大幅提升產(chǎn)品可靠性。
[1] 郭 彬,單慶曉,肖昌炎,等.電網(wǎng)時鐘系統(tǒng)的北斗/GPS雙模同步技術(shù)研究[J].計(jì)算機(jī)測量與控制,2011,19(1):139-141.
[2] 張 斌,張東來,王 超.基于FPGA的IRIG-B(DC)碼同步解碼設(shè)計(jì)[J].測控技術(shù),2008,27(2):45-47.
[3] Telecommunications and Timing Group Irig Standard 200-98[S].Secretariat Range Commanders Council,1998
[4] 熊立智,唐普英.基于FPGA的IRIG-B解碼電路設(shè)計(jì)與實(shí)現(xiàn)[J].通信技術(shù),2010,43(8):231-235.
[5] 佟 剛,崔 明,曹永剛,等.MSP430F149在IRIG-B碼解碼中的應(yīng)用[J].計(jì)算機(jī)測量與控制,2007,15(11):1597-1610.
[6] 任 宏,王志林,羅純哲.時統(tǒng)對時精度測量設(shè)備的設(shè)計(jì)與研究[J].電子技術(shù)應(yīng)用,2009,10:127-130.
Design and Implementation of IRIG-B Encoding and Decoding Based on FPGA
Tian Yuan, Li Dapeng, Pu Kai,Li Yufa
(China aeronautical Computing Technique Research Institute, Xi’an 710119,China)
With the increase of the time synchronization requirements of the system, the IRIG-B code is used more and more in the time system module; in view of the traditional single chip microcomputer and special chip implementation method cannot meet the reliability and portability of the product, the design and implementation of FPGA based on IRIG-B is studied;a new iterative algorithm is presented for converting between BCD codes and binary codes; research on IRIG-B encoding and decoding method based on FPGA design method; through simulation experiments, the results show that the proposed method can correct the time information of IRIG-B format decoding and encoding, and the implementation of FPGA can greatly reduce the use of external chips and circuits, thus greatly improving the reliability and portability of the products.
IRIG-B; FPGA; code; decode
2015-09-15;
2015-10-30。
田 園(1985-),男,陜西富平人,工程師,碩士,主要從事機(jī)載網(wǎng)絡(luò)技術(shù)方向的研究。
1671-4598(2016)03-0218-03
10.16526/j.cnki.11-4762/tp.2016.03.059
TP15
A