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