基于FPGA的IRIG-B碼解碼器設(shè)計(jì)
摘要 針對(duì)基于單片機(jī)的IRIG—B碼解碼器解碼精度低、工作穩(wěn)定性差等問題,提出了一種基于FPGA的IRIG—B碼解碼器設(shè)計(jì)。在實(shí)現(xiàn)過程中著重分析了輸入 IRIG—B碼信號(hào)的毛刺問題,并采用三級(jí)D觸發(fā)器后接或門的方法,徹底消除毛刺對(duì)本系統(tǒng)穩(wěn)定性的影響。通過仿真驗(yàn)證了本系統(tǒng)具有解碼精度高、工作穩(wěn)定性強(qiáng)、易于實(shí)現(xiàn)等優(yōu)點(diǎn)。
關(guān)鍵詞 IRIG—B碼;解碼;毛刺
美國(guó)靶場(chǎng)司令委員會(huì)(Range Commanders Council,RCC)下屬機(jī)構(gòu)靶場(chǎng)間儀器組(Inter—Range Instrumen—tation Croup,IRIG)為保證靶場(chǎng)試驗(yàn)中各參試設(shè)備協(xié)同工作,制定了一種時(shí)間標(biāo)準(zhǔn)IRIG—B碼(簡(jiǎn)稱B碼),由靶場(chǎng)時(shí)統(tǒng)站發(fā)送該碼,各設(shè)備接收此信號(hào)后再結(jié)合其測(cè)量數(shù)據(jù),從而達(dá)到測(cè)量數(shù)據(jù)的時(shí)間同步。我國(guó)靶場(chǎng)測(cè)量、控制、計(jì)算、通信、氣象等測(cè)試設(shè)備,均采用IRIG—B碼作為時(shí)間同步標(biāo)準(zhǔn),其特點(diǎn)是可靠性高、接口標(biāo)準(zhǔn)、通用規(guī)范及使用靈活方便。
1 B碼簡(jiǎn)介
IRIG—B碼為一種串行的時(shí)間格式,其中每個(gè)脈沖稱為碼元。IRIG—B碼的幀速率為1 fip·s-1,一幀數(shù)據(jù)由100個(gè)碼元組成,分為第0、1、2、…、99個(gè)碼元,每個(gè)碼元長(zhǎng)度為10 ms。時(shí)間格式中秒、分、時(shí)均用BcD碼表示,低位在前,高位在后。第1、2、3、4、6、7、8碼元屬于“秒”信息,共占用7個(gè)碼元;第10、11、 12、13、15、16、17碼元屬于“分”信息,共占用7個(gè)碼元;第20、21、22、23、25、26碼元屬于“時(shí)”信息,共占用6個(gè)碼元;第30、 31、32、33、35、36、37、38、40、41碼元屬于“天”信息,共占用10個(gè)碼元。
IRIG—B碼由位置識(shí)別標(biāo)志、參考碼元、碼字和索引標(biāo)志4種碼元組成。
B碼的位置識(shí)別標(biāo)志脈寬為8 ms,每幀B碼中有10個(gè)位置識(shí)別標(biāo)志碼元:P1、P2、…、P10。每10個(gè)碼元有一個(gè)位置識(shí)別碼,位置識(shí)別標(biāo)志的重復(fù)率為碼元速率的10%。
參考碼元Pr脈寬也為8 ms,作用是識(shí)別幀的起始時(shí)刻,“準(zhǔn)時(shí)”參考點(diǎn)為參考碼元的前沿。
B碼的二進(jìn)制“1”和“0”的脈寬分別為5 ms和2 ms,是用于傳遞秒、分、時(shí)等重要信息的碼元。
索引標(biāo)志碼元脈寬為2 ms,位于“秒”、“分”、“時(shí)”、“天”信息的十位和個(gè)位之間。
圖6為本文B碼的一幀數(shù)據(jù)示意圖,后續(xù)實(shí)驗(yàn)就是對(duì)此幀數(shù)據(jù)進(jìn)行解碼,此幀數(shù)據(jù)代表的時(shí)間信息為:110天8時(shí)7分21秒。
2 FPGA解碼
FPGA解碼首先需要對(duì)碼元進(jìn)行識(shí)別,對(duì)脈沖計(jì)數(shù),以脈沖下降沿作為計(jì)數(shù)結(jié)束。采用有限狀態(tài)機(jī)對(duì)第0、1、2、…、99碼元進(jìn)行有序地解碼,首先判斷出參考碼元,再根據(jù)5 ms和2 ms碼元的位置提取出正確的時(shí)間信息。由于不同的系統(tǒng)可能采用不同解碼時(shí)鐘,為使系統(tǒng)有更好的重用性,需要對(duì)時(shí)鐘頻率進(jìn)行歸一化。
2.1 消除毛刺
在組合電路、反饋電路和計(jì)數(shù)器中都可能產(chǎn)生毛刺信號(hào),往往一個(gè)毛刺信號(hào)會(huì)影響整個(gè)電子系統(tǒng)的穩(wěn)定性。由于D觸發(fā)器對(duì)毛刺信號(hào)不敏感,通常的處理方法是通過 D觸發(fā)器對(duì)輸入信號(hào)進(jìn)行“過濾”,但這種方法有效的條件是毛刺不出現(xiàn)在D觸發(fā)器時(shí)鐘的上升沿,且持續(xù)時(shí)間不能維持1個(gè)時(shí)鐘周期,如圖7所示,否則,將會(huì)放大毛刺信號(hào),對(duì)整個(gè)電子系統(tǒng)造成更不利影響。
若在P碼元的5 ms處出現(xiàn)一個(gè)毛刺,而不作有效地毛刺處理,將會(huì)出現(xiàn)碼元誤判,甚至?xí)?dǎo)致整幀數(shù)據(jù)錯(cuò)誤,影響各系統(tǒng)時(shí)間同步。輸入信號(hào)經(jīng)過圖8所示的處理后,不利于系統(tǒng)的毛刺將被“剔除”,從而增強(qiáng)系統(tǒng)的穩(wěn)定性。
當(dāng)輸入信號(hào)處于低電平時(shí)出現(xiàn)毛刺,圖8的處理方法將會(huì)放大毛刺,但對(duì)于整個(gè)系統(tǒng)是沒有影響的,因?yàn)楸鞠到y(tǒng)采用高電平計(jì)數(shù)的方式識(shí)別碼元,當(dāng)脈寬很窄時(shí),便認(rèn)為是毛刺干擾,舍去,比上升沿識(shí)別碼元更簡(jiǎn)單且更具抗干擾性。這種毛刺處理方法,雖然引入了額外的組合電路,但根據(jù)輸入信號(hào)的特點(diǎn),是不會(huì)產(chǎn)生毛刺的。
2.2 對(duì)脈沖寬度進(jìn)行計(jì)數(shù)和碼元識(shí)別
本文采用的歸一化時(shí)鐘為1 MHz,脈寬2 ms、5 ms、8 ms的計(jì)數(shù)分別為2 000、5 000、8 000,由于脈寬不可能精確到某個(gè)值,所以需要放寬計(jì)數(shù)判別各個(gè)碼元。計(jì)數(shù)在1500~2 500表示2 ms脈寬,計(jì)數(shù)在4 500~5 500表示5 ms脈寬,計(jì)數(shù)在7 500~8 500表示8 ms脈寬。輸入信號(hào)i_DATA處于高電平時(shí),開始計(jì)數(shù),當(dāng)時(shí)鐘i_cLK采集到i_DATA的下降沿時(shí),即停止計(jì)數(shù),并以w_UP_DOWN信號(hào)作為脈沖結(jié)束標(biāo)志。
2.3 提取“秒”、“分”等信息的狀態(tài)機(jī)[!--empirenews.page--]
STATE_IDL1表示處于檢測(cè)碼元,當(dāng)檢測(cè)出的碼元脈寬為8 ms后,將進(jìn)入STATE_IDL2。進(jìn)入狀態(tài)STATE_IDL2后,當(dāng)?shù)谝粋€(gè)檢測(cè)出的碼元脈寬又是8 ms,則說明此刻檢測(cè)出的Pr碼元,即可以進(jìn)入“秒”、“分”、“時(shí)”等后續(xù)檢測(cè)中;若第一個(gè)檢測(cè)出的碼元脈寬不是8 ms,則說明此刻不是幀的起始時(shí)間,轉(zhuǎn)入STATE_IDL1狀態(tài),繼續(xù)檢測(cè)。當(dāng)進(jìn)入“秒 ”檢測(cè)狀態(tài)(STATE_SEC),即可依次提取個(gè)位和十位信息,為增強(qiáng)系統(tǒng)穩(wěn)定性,如果發(fā)現(xiàn)STATE_SEC狀態(tài)中的第5個(gè)碼元不是索引碼元,狀態(tài)便轉(zhuǎn)入STATE_IDL1,否則繼續(xù)檢測(cè)“分”、“時(shí)”等信息。“分”、“時(shí)”、“天”信息的檢測(cè)過程與“秒”同理。
3 Modelsim驗(yàn)證
根據(jù)B碼幀結(jié)構(gòu)可知,“秒”、“分”、“時(shí)”和“天”信息的第41個(gè),也就是“秒”起始后大約41 ms時(shí)刻。從圖10中可以清晰地看到大致在仿真時(shí)間4 1ms處出現(xiàn)o_FINI SH脈沖,o_FINISH作為解碼結(jié)束標(biāo)志,即驗(yàn)證了代碼的正確性。從圖10可知,解碼出的時(shí)間是110天8時(shí)7分21秒。
4 結(jié)束語
在FPGA系統(tǒng)中,毛刺是影響整個(gè)電子系統(tǒng)穩(wěn)定性的重要因素。本文中采用的去毛刺方法較好地解決了IRIG—B碼解碼中存在毛刺的問題,從而提高了系統(tǒng)的穩(wěn)定性。由于增加了解碼結(jié)束標(biāo)志,本文的代碼移植性更強(qiáng)。經(jīng)過Modelsim仿真驗(yàn)證,該解碼器功能正確,具有較高的可靠性。