周振洲,席自強(qiáng),王 平
(1.太陽(yáng)能高效利用湖北省協(xié)同創(chuàng)新中心,湖北 武漢 430068;2.上海交通大學(xué) 電子信息工程與電氣工程學(xué)院,上海200240)
?
DCF77時(shí)間碼解碼方案的設(shè)計(jì)
周振洲1,席自強(qiáng)1,王 平2
(1.太陽(yáng)能高效利用湖北省協(xié)同創(chuàng)新中心,湖北 武漢 430068;2.上海交通大學(xué) 電子信息工程與電氣工程學(xué)院,上海200240)
提出了一種基于FPGA的DCF77解碼方案設(shè)計(jì)。實(shí)現(xiàn)過(guò)程中著重針對(duì)碼元識(shí)別部分進(jìn)行分析,設(shè)計(jì)了一種有限狀態(tài)機(jī)來(lái)完成對(duì)不同碼元的識(shí)別以及數(shù)據(jù)寫入等。通過(guò)Modelsim軟件對(duì)程序進(jìn)行了功能仿真,驗(yàn)證了該方案可以正確的進(jìn)行時(shí)間解碼。相比常用的IRIG-B碼,增加了星期的信息,并且每一幀只有60位,恰好與時(shí)間進(jìn)制相同,具有代碼簡(jiǎn)單、工作穩(wěn)定性強(qiáng)、易于移植等優(yōu)點(diǎn)。
DCF77碼;解碼;有限狀態(tài)機(jī);碼元識(shí)別
DCF77碼是德國(guó)無(wú)線長(zhǎng)波對(duì)時(shí)信號(hào)的時(shí)間碼,該時(shí)間格式碼包含年、月、日、時(shí)、分、星期等完整的絕對(duì)時(shí)間信息,在法國(guó)、德國(guó)等主要?dú)W洲國(guó)家得到了廣泛應(yīng)用[1-2]。我國(guó)電力、通訊、石化、冶金、國(guó)防、金融等一些行業(yè)中也都將DCF77作為一種重要的時(shí)間格式來(lái)使用[3-4]。本文介紹了DCF77碼的格式與規(guī)范,針對(duì)目前DCF77碼解碼方案較少,解碼過(guò)程不連續(xù)等問(wèn)題,提出了一種新的解碼方案。
DCF77時(shí)間碼是一種串行格式[5]的時(shí)間碼,它在秒信號(hào)的間隙傳輸時(shí)間信息;為方便理解時(shí)間碼的格式,這里引入“碼元”的概念[6]。將每幀信號(hào)中最小的單位定義為1個(gè)碼元。由于是在秒信號(hào)的間隙傳輸信息,所以得出在DCF77碼中,每幀包括60個(gè)碼元,每個(gè)碼元長(zhǎng)度都為1 000 ms,剛好對(duì)應(yīng)時(shí)間信息里的“秒”。
根據(jù)DCF77碼的特點(diǎn),共引入3種不同的碼元,如圖1所示。一個(gè)秒脈沖持續(xù)0.1 s(脈寬為0.1 s)表示二進(jìn)制編碼的“0”;持續(xù)0.2 s(脈寬為0.2 s)表示二進(jìn)制編碼的“1”;第59 s通常不進(jìn)行傳輸,脈寬為0。利用59 s的這種特殊性,將其作為起始標(biāo)志,用來(lái)檢測(cè)輸入時(shí)間信息的起點(diǎn)。
格式方面,由3個(gè)測(cè)試位P1,P2,P3擴(kuò)展成時(shí)間碼的3個(gè)主要段落:7位表示分鐘,6位表示小時(shí),22位表示包含星期數(shù)在內(nèi)的日期,具體編碼規(guī)則如表1所示。
圖1 3種碼元
碼元標(biāo)識(shí)數(shù)代表意義0分鐘,常為01~14保留,常為0續(xù)表115天線(0表示正常天線,1表示備用天線)16時(shí)區(qū)變化通告(0表示正常,1表示提前1h)17~18夏令時(shí)(01表示正常,10表示夏令時(shí)開啟)19潤(rùn)秒通告[7],一般提前1h通告(0表示潤(rùn),1表示不潤(rùn))20時(shí)間碼的起始位,常為121~27分鐘信息(位權(quán)分別為1,2,4,8,10,20,40min)28P1測(cè)試位,21~28位的奇偶校驗(yàn)應(yīng)為偶數(shù),常為129~34小時(shí)信息(位權(quán)分別為1,2,4,8,10,20h)35P2測(cè)試位,29~35位的奇偶校驗(yàn)應(yīng)為奇數(shù),常為036~41所在月的日信息(位權(quán)分別為1,2,4,8,10,20日)42~44星期信息(位權(quán)分別為1,2,4)45~49月份信息(位權(quán)分別為1,2,4,8,10月)50~57年份信息(位權(quán)分別為1,2,4,8,10,20,40,80年)58P3測(cè)試位,36~58的奇偶校驗(yàn)應(yīng)為奇數(shù),常為059通常,這一位不被傳輸;本文中當(dāng)作“起始標(biāo)志”來(lái)使用。
圖2給出了一幀完整的數(shù)據(jù)示意圖,其包含的二進(jìn)制信息[8]為: 000000000000000000101_1001101_ 0_110001 _1_100101111_1100000000000_1_0。為了更清晰地表示出起始標(biāo)志,把第59位碼元放到第1位。本文將就對(duì)此幀數(shù)據(jù)進(jìn)行解碼并進(jìn)行驗(yàn)證。根據(jù)前邊DCF77編碼規(guī)則可知,此幀數(shù)據(jù)代表的時(shí)間信息為:2000年2月29日23時(shí)59分,星期日。
圖2 DCF77編碼幀示意圖
程序首先需要對(duì)碼元進(jìn)行識(shí)別[9],通過(guò)對(duì)輸入的脈沖進(jìn)行計(jì)數(shù),首先找到起始標(biāo)志,然后根據(jù)脈沖的個(gè)數(shù)判斷該碼元是“0”還是“1”,接著采用狀態(tài)機(jī)對(duì)0~58位的數(shù)據(jù)依次進(jìn)行采集,最后根據(jù)DCF77的格式有序的對(duì)所采集到的信息進(jìn)行解碼,提取出所需要的時(shí)間信息[8]。
2.1 分頻模塊設(shè)計(jì)
為完成對(duì)數(shù)據(jù)的采樣,采用歸一化的時(shí)鐘[10-11],這里采用頻率為1 kHz的時(shí)鐘,每個(gè)間隔為1 ms。由于59 s作為起始標(biāo)志,是連續(xù)1 000 ms的低電平,為便于檢測(cè),這里統(tǒng)一選取對(duì)時(shí)鐘的負(fù)邊沿進(jìn)行計(jì)數(shù),完成時(shí)間數(shù)據(jù)采樣。當(dāng)data_in處于低電平時(shí),count_1_valid標(biāo)志置1,count_1開始計(jì)數(shù)。
2.2 碼元識(shí)別有限狀態(tài)機(jī)設(shè)計(jì)
針對(duì)碼元的幾種不同類型以及所代表的不同意義,本文設(shè)計(jì)了一個(gè)有限狀態(tài)機(jī)[12](FSM),包括5個(gè)狀態(tài):Idle,Judge,Start,St0,St1。該狀態(tài)機(jī)可以完成狀態(tài)的檢測(cè),脈沖計(jì)數(shù),開始標(biāo)志的判斷以及數(shù)據(jù)的寫入等功能。狀態(tài)轉(zhuǎn)移過(guò)程如圖3所示。其中,Idle為空閑狀態(tài),count_1_valid為計(jì)數(shù)有效標(biāo)志,只有在輸入數(shù)據(jù)處于負(fù)邊沿時(shí)才有效。同時(shí),狀態(tài)轉(zhuǎn)移到Judge狀態(tài),進(jìn)行判斷。
Judge為判斷狀態(tài),這里設(shè)置一個(gè)計(jì)數(shù)器count_1,來(lái)對(duì)1ms間隔的個(gè)數(shù)進(jìn)行計(jì)數(shù),通過(guò)間隔數(shù)的不同判斷采集到的碼元屬于哪種,并跳到對(duì)應(yīng)的狀態(tài)。前邊提到過(guò),為了方便檢測(cè),統(tǒng)一采取時(shí)鐘負(fù)邊沿進(jìn)行計(jì)數(shù)。所以碼元0,1以及起始標(biāo)志的計(jì)數(shù)應(yīng)分別為900,800,1 000。但是由于實(shí)際時(shí)間信息不可能做到絕對(duì)精確,所以,這里需要適當(dāng)?shù)姆艑挋z測(cè)門限[13]。經(jīng)過(guò)實(shí)際測(cè)試,這里選取880-920與780-820分別作為碼元0,1的門限,選取960作為起始標(biāo)志的門限。
Start為開始狀態(tài),前文中曾經(jīng)提到過(guò)由于59 s的特殊性,將其作為起始標(biāo)志來(lái)使用。所以當(dāng)Judge檢測(cè)到脈沖個(gè)數(shù)為>960時(shí)(59 s在低電平持續(xù)1 000 ms),視為檢測(cè)到起始標(biāo)志,同時(shí)置Start_f=1,采集信息開始。否則,返回Idle狀態(tài)。
St0,St1狀態(tài)分別在檢測(cè)到的脈沖個(gè)數(shù)為880-920和780-820時(shí)由Judge狀態(tài)跳入,同時(shí)分別置St0_f=1,St1_f=1,并且分別在寄存器data中寫入二進(jìn)制信息”0”或”1”。否則,返回Idle狀態(tài)。
圖3 狀態(tài)轉(zhuǎn)移圖
2.3 進(jìn)位模塊設(shè)計(jì)
由于DCF77碼的格式問(wèn)題,要在第21位開始才是有效的時(shí)間信息,但是真實(shí)時(shí)間的分鐘位在0 s的時(shí)候就會(huì)完成進(jìn)位,而不會(huì)等到21 s再進(jìn)位。所以需要在時(shí)間信息初始化后,完成自動(dòng)進(jìn)位操作。然后,再分別在分(data[28]),時(shí)(data[35]),日(data[42]),周(data[45]),月(data[50]),年(data[58])信息解析完畢時(shí)進(jìn)行核對(duì)。
具體進(jìn)位規(guī)則如下:分每逢60進(jìn)1,時(shí)每逢24進(jìn)1,月每逢12進(jìn)1,周每逢7進(jìn)1;需要特別關(guān)注的是月份[14],因?yàn)樯婕暗矫磕暧写笤?1天和小月30天的區(qū)別以及閏年2月份天數(shù)的不同,所以根據(jù)圖4所示的流程進(jìn)行設(shè)計(jì)。
圖4 月份進(jìn)位模塊設(shè)計(jì)流程圖
2.4 信息解析模塊設(shè)計(jì)
按照DCF77碼的格式,根據(jù)BCD編碼的規(guī)則,分別將解析出的時(shí)間信息賦給寄存器minute,hour,day,week,month,year。Verilog算法[15-16]描述如下:
assign year=data[50]+2*data[51]+4*data[52]+8*data[53]+10*data[54]+20*data[55]+40*data[56]+80*data[57];assign month=data[45]+2*data[46]+4*data[47]+8*data[48]+10*data[49];
assign week=data[42]+2*data[43]+4*data[44];assign day=data[36]+2*data[37]+4*data[38]+8*data[39]+10*data[40]+20*data[41];
assign hour=data[29]+2*data[30]+4*data[31]+8*data[32]+10*data[33]+20*data[34];assign minute=data[21]+2*data[22]+4*data[23]+8*data[24]+10*data[25]+20*data[26]+40*data[27];
assign second=count_2;
由于minute,hour,day,week,month,year分別在第27,34,41,44,49,57位接受信息完畢,所以均在接受完畢后的下一位將信息賦給對(duì)應(yīng)的值寄存器XX_r,并且與自進(jìn)位的數(shù)值進(jìn)行判斷,如果相同,則保持不變,如果不同,就把賦予的值代替自進(jìn)位的數(shù)值,完成自動(dòng)糾正。Verilog算法描述如下:
always @ (count_2)
begin
if (count_2==0) minute_r<=minute_r+1'd1;
if (count_2==28) minute_r<=minute;
if (count_2==35) hour_r<=hour;
if (count_2==42) day_r<=day;
if (count_2==45) week_r<=week;
if (count_2==50) month_r<=month;
if (count_2==58) year_r<=year;
end
3.1 狀態(tài)機(jī)功能驗(yàn)證
如圖8所示,首先查找到起始標(biāo)志start_f,并開始記錄時(shí)間信息。通過(guò)狀態(tài)機(jī)進(jìn)行判斷,確定碼元的類型,并激活不同的標(biāo)志位st0_f,st1_f,然后在data中分別寫入0或這1。直到第59位,這一分鐘的信息寫入完畢,然后清空data寄存器,準(zhǔn)備下一分鐘信息的記錄[16]。
圖5 狀態(tài)機(jī)仿真示意圖
3.2 信息解析驗(yàn)證
由圖6可以看出解析得到的時(shí)間信息為2000年2月29日23時(shí)59分,星期日,與上文所得結(jié)論一致,證明解碼正確。
3.3 進(jìn)位模塊功能驗(yàn)證
通過(guò)圖7中的對(duì)比可以看出,New Group中并未采用進(jìn)位模塊設(shè)計(jì),所以信息只有在下一分鐘的第28,35,42,45,50,58位才會(huì)分別解析出來(lái),中間出現(xiàn)了明顯的“斷層現(xiàn)象”,這與日常計(jì)時(shí)明顯不符。而采用了進(jìn)位模塊設(shè)計(jì)后則可以在起始標(biāo)志位之后(00 s)完成自動(dòng)進(jìn)位,使時(shí)間解碼保持了連續(xù)性。從圖中可以看出,在檢測(cè)到第2個(gè)start_f之后時(shí)間變?yōu)?000年3月1日0時(shí)0分,星期一,驗(yàn)證成功。
圖6 解碼結(jié)果驗(yàn)證
圖7 進(jìn)位功能驗(yàn)證
本文采用有限狀態(tài)機(jī)的方法解決了碼元識(shí)別的問(wèn)題,并且使用進(jìn)位模塊設(shè)計(jì)避免了可能遇到的時(shí)間信息解析不連貫的問(wèn)題,可以成功的對(duì)DCF77碼進(jìn)行解碼,得到所需的時(shí)間信息。整體基于Verilog語(yǔ)言設(shè)計(jì),代碼簡(jiǎn)單、移植性強(qiáng),經(jīng)過(guò)Modelsim仿真軟件驗(yàn)證,該解碼方案正確可靠。
[1] 于斌,米秀杰.ModelSim電子系統(tǒng)分析及仿真[M].北京:電子工業(yè)出版社,2011.
[2] 周國(guó)平,屈少君.DCF77時(shí)間格式碼產(chǎn)生器的設(shè)計(jì)[C].西安:第20屆測(cè)控、計(jì)量、儀器儀表學(xué)術(shù)年會(huì),2010.
[3] 高志遠(yuǎn),劉長(zhǎng)虹.廠站自動(dòng)化系統(tǒng)中應(yīng)用網(wǎng)絡(luò)時(shí)間同步技術(shù)探討[J].電力自動(dòng)化設(shè)備,2006,26(7):84-89.
[4] 童寶潤(rùn).時(shí)間統(tǒng)一系統(tǒng)[M].北京:國(guó)防工業(yè)出版社,2003.
[5] 馬紅皓,胡永輝.GPS&IRIG-B時(shí)間系統(tǒng)分析[J].電子科技,2007,190(7):21-25.
[6] 顧陽(yáng)陽(yáng),付道文.基于FPGA的IRIG-B碼解碼器設(shè)計(jì)[J].電子科技,2015,28(5):39-42.
[7] 楊志剛,鄭麗麗.IRIG-B碼終端中閏秒時(shí)間的處理[J].電子科技,2013,26(6):89-93.
[8] 康華光.電子技術(shù)基礎(chǔ)數(shù)字部分[M].北京:高等教育出版社,2004.
[9] 盧偉明,盧偉平.基于FPGA的IRIG-B(DC)碼解碼[J].現(xiàn)代電子技術(shù),2012,35(11):88-90.
[10] Zhou Caiqin,Li Shizhong,Liang Guoqiang.Design of IRIG-B(AC) encoder based on FPGA[J].Journal of Measurement Science and Instrumentation,2015,6(3):291-294.
[11] 秦娟,徐月超.利用FPGA的IRIG-B碼解碼新方法[J].信號(hào)處理,2015,31(12):1654-1657.
[12] 周國(guó)平,邢燦華.IRIG-B格式時(shí)間編碼電路的設(shè)計(jì)[J].機(jī)械制造與自動(dòng)化,2005,34(2):88-90.
[13] 王麗敏,胡永輝.基于FPGA的IRIG-B(DC)碼的解碼方案設(shè)計(jì)與實(shí)現(xiàn)[J].時(shí)間頻率學(xué)報(bào),2012,35(4):228-234.
[14] 賈磊,崔永俊等.基于FPGA的IRIG-B(DC)碼解碼卡的設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2015,23(6):2143-2155.
[15] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].北京:北京航空航天大學(xué)出版社,2008.
[16] 張明.Verilog HDL實(shí)用教程[M].成都:電子科技大學(xué)出版社,1999.
Design of a DCF77 Code Decoding Scheme
ZHOU Zhenzhou1,XI Ziqiang1,WANG Ping2
(1.Hubei Collaborative Innovation Center for High-efficiency Utilization of Solar Energy, Wuhan 430068, China;
2. School of Electronic Information and Electrical Engineering, Shanghai Jiaotong University, Shanghai 200240, China)
A decoding scheme based on FPGA is proposed with emphasis on analyzing and processing code element re-cognition. A FSM is designed for recognition of different code-elements and data recording. Modelsim functional simulation validates the accuracy and availability of the scheme. Compared with the IRIG-B code, the proposed scheme adds the week information at a frame length of only 60 bit, which is the same with time radix. This scheme has the advantage of simplicity, stability and easy implementation.
DCF77 code; decode; finite-state machine; code-element recognition
2016- 07- 27
周振洲(1991-),男,碩士研究生。研究方向:數(shù)字化故障錄波器。席自強(qiáng)(1960-),男,博士,教授。研究方向:電能質(zhì)量檢測(cè)與控制技術(shù)。
10.16180/j.cnki.issn1007-7820.2017.06.023
TN919.3+1
A
1007-7820(2017)06-085-04