基于FPGA的IRIG-B編碼器的設計
if pps上升沿then rx_count=0
else接收到數(shù)據(jù)and rx_count
M12T在每個1 pps的上升沿過后送出當前時間,而FPGA通過UART接收到時間時,B碼當前幀已經(jīng)啟動,據(jù)此形成的B碼要等下一個pps參考點之后才可以發(fā)送,所以對接收的時間要進行預進位處理。
本文在FPGA預處理部分設計了一個RTC計時鏈,在每個1 pps的上升沿,計時鏈向上進位,編碼模塊從RTC計時鏈取絕對時間。從UART接收到新的時間后,如果該時間與計時鏈的值有差異,則將通過計時鏈的同步置數(shù)接口修正計時鏈的值。同時計時鏈負責把M12T的二進制時間轉(zhuǎn)換成壓縮的BCD碼,還要根據(jù)當前接收到的年月日,計算當天是全年中的第幾天,即IRIG-B碼中的Day字段,而且在預加1 s和轉(zhuǎn)換時間格式時,要注意閏年和月大和月小對Day字段的影響。
4 IRIG-B編碼模塊實現(xiàn)
4.1 IRIG-B DC編碼模塊
分析B碼可以發(fā)現(xiàn),秒的最低位出現(xiàn)在MMH=1處,分的最低位出現(xiàn)在MMH=10處,小時的最低位出現(xiàn)在MMH=20處,依次類推。按照圖1,容易得出時間寄存器輸出時刻和碼元計數(shù)器MMH之間的關系。由于碼元周期固定為10 ms,可以這樣實現(xiàn)編碼,定義一個模10的計數(shù)器MML和邏輯向量CMP(9 down to0)來表征一個碼元在10 ms的狀態(tài)。MML每ms加1,同時根據(jù)MML的值,選擇CMP的一位更新輸出狀態(tài),步驟如下:
(1)構(gòu)建模10計數(shù)器MML,以及一個1 ms定時器;
(2)在PPM12信號的上升沿復位MML和1 ms定時器;
(3)1 ms定時器溢出時,MML加1;
(4)根據(jù)MML和CMP輸出編碼信號IRIG_B_OUT,即IRIG_B_OUT=CMP(MML);
(5)在PPM12的上升沿根據(jù)第3.1節(jié)所得碼元計數(shù)器MMH重新加載CMP
算法VHDL描述如下:
在上述VHDL編碼的實現(xiàn)中,MSCLK為1 mS計數(shù)脈沖,同步于PPM12信號的上升沿。CMP的輸出值由函數(shù)IRIG_B根據(jù)輸入?yún)?shù)決定,若為0,則輸出“0000000011”,對應2 ms;若為1則輸出“0000011111”,對應5 ms,在索引脈沖和參考點Pr處,CMP取值“0011111111”,對應8 ms。而最終的編碼輸出IRIG_B_OUT在每個1 ms脈沖的上升沿,根據(jù)CMP(MML)的值決定為高或為低。
評論