基于FPGA的IRIG-B編碼器實(shí)現(xiàn)
M12T輸出的100 pps信號(hào)(以下稱PPMl2)如圖3所示,每個(gè)脈沖的上升沿時(shí)刻準(zhǔn)確,周期10 ms,在pps的參考點(diǎn),脈沖寬度為6~8 ms,其他時(shí)刻2~4 ms,脈沖寬度不是關(guān)注的重點(diǎn)。本文引用地址:http://butianyuan.cn/article/163206.htm
B碼的每個(gè)碼元恰好與上述100 pps信號(hào)對(duì)應(yīng)。首先在FPGA中構(gòu)建一個(gè)模100的碼元計(jì)數(shù)器MMH和一個(gè)高電平脈沖寬度檢測器,通過下面的方法和步驟可以恢復(fù)pps。
(1)在PPMl2信號(hào)的上升沿復(fù)位寬度檢測器,高電平計(jì)時(shí),在下降沿停止并輸出Tb;
(2)在PPM12下降沿檢查Tb,當(dāng)6 msTb8 ms時(shí),令MMH=1,否則執(zhí)行下面的操作:
if MMH=99 then MMH=O
else MMH=MMH+1
(3)在PPMl2信號(hào)的上升沿檢查MMH,如果MMH=0,則當(dāng)前脈沖的上升沿是參考點(diǎn)Pr,觸發(fā)輸出8 ms高電平脈沖作為pps信號(hào),重復(fù)步驟(1)~(3),在PPM12信號(hào)上升沿檢查MMH;如果MMH的個(gè)位為9或者M(jìn)MH=0,則當(dāng)前脈沖標(biāo)記為索引脈沖,即輸出8 ms高電平。
3.2 絕對(duì)時(shí)間獲取
通過在FPGA上構(gòu)建一個(gè)UART與M12T互連。為了簡化FPGA對(duì)M12T的配置和輸出時(shí)間的獲取,將UART分成兩部分設(shè)計(jì),即發(fā)送模塊txmit和接收模塊rcvr。發(fā)送模塊用一個(gè)M4K設(shè)計(jì)一個(gè)512×8 FIFO,在系統(tǒng)復(fù)位后的若干個(gè)時(shí)鐘,利用一個(gè)狀態(tài)機(jī)將M12T的配置數(shù)據(jù)寫入FIFO;然后通過txmit模塊配置M12T,配置結(jié)束后,UART模塊將M12T的時(shí)間碼轉(zhuǎn)發(fā)到外部RS 232接口,同時(shí)可以轉(zhuǎn)發(fā)外部接口的配置數(shù)據(jù)到M12T。接收模塊采用寄存器模式,只接收M12T發(fā)來的絕對(duì)時(shí)間信息,這樣后面的編碼模塊可以直接使用這些時(shí)間信息。做法如下:設(shè)計(jì)一個(gè)接收計(jì)數(shù)器rx_ count,每接收一個(gè)字節(jié)計(jì)數(shù)器自加,并根據(jù)rx_count決定是否保存時(shí)間碼。由于M12T每秒中發(fā)送一幀,故在檢測到pps時(shí)復(fù)位該計(jì)數(shù)器。
M12T在每個(gè)1 pps的上升沿過后送出當(dāng)前時(shí)間,而FPGA通過UART接收到時(shí)間時(shí),B碼當(dāng)前幀已經(jīng)啟動(dòng),據(jù)此形成的B碼要等下一個(gè)pps參考點(diǎn)之后才可以發(fā)送,所以對(duì)接收的時(shí)間要進(jìn)行預(yù)進(jìn)位處理。
本文在FPGA預(yù)處理部分設(shè)計(jì)了一個(gè)RTC計(jì)時(shí)鏈,在每個(gè)1 pps的上升沿.計(jì)時(shí)鏈向上進(jìn)位,編碼模塊從RTC計(jì)時(shí)鏈取絕對(duì)時(shí)間。從UART接收到新的時(shí)間后,如果該時(shí)間與計(jì)時(shí)鏈的值有差異,則將通過計(jì)時(shí)鏈的同步置數(shù)接口修正計(jì)時(shí)鏈的值。同時(shí)計(jì)時(shí)鏈負(fù)責(zé)把M12T的二進(jìn)制時(shí)間轉(zhuǎn)換成壓縮的BCD碼,還要根據(jù)當(dāng)前接收到的年月日,計(jì)算當(dāng)天是全年中的第幾天,即IRIG-B碼中的Day字段,而且在預(yù)加1 S和轉(zhuǎn)換時(shí)間格式時(shí),要注意閏年和月大和月小對(duì)Day字段的影響。
4 IRIG-B編碼模塊實(shí)現(xiàn)
4.1 IRIG-B DC編碼模塊
分析B碼可以發(fā)現(xiàn),秒的最低位出現(xiàn)在MMH=1處,分的最低位出現(xiàn)在MMH=10處,小時(shí)的最低位出現(xiàn)在MMH=20處,依次類推。按照?qǐng)D1,容易得出時(shí)間寄存器輸出時(shí)刻和碼元計(jì)數(shù)器MMH之間的關(guān)系。由于碼元周期固定為10 ms,可以這樣實(shí)現(xiàn)編碼,定義一個(gè)模10的計(jì)數(shù)器MML和邏輯向量CMP(9 down to0)來表征一個(gè)碼元在10 ms的狀態(tài)。MML每ms加1,同時(shí)根據(jù)MML的值,選擇CMP的一位更新輸出狀態(tài),步驟如下:
(1)構(gòu)建模10計(jì)數(shù)器MML,以及一個(gè)1 ms定時(shí)器;
(2)在PPM12信號(hào)的上升沿復(fù)位MML和1 ms定時(shí)器;
(3)1 ms定時(shí)器溢出時(shí),MML加1;
(4)根據(jù)MML和CMP輸出編碼信號(hào)IRIG_B_OUT,即IRIG_B_OUT=CMP(MML);
評(píng)論