FPGA實(shí)現(xiàn)IRIG-B(DC)碼編碼和解碼的設(shè)計(jì)
FPGA完成這個時刻的B碼編碼后,會立即不斷地搜索下一個pps_in的上升沿,GPS模塊每秒都會觸發(fā)pps_in的上升沿,一旦發(fā)現(xiàn)pps_in上升沿,馬上進(jìn)入下一秒的編碼。這樣編程的好處是B碼大致上可以與1 pps同步,延遲少且方便測試。FPGA對IRIG-B碼秒信號的編碼仿真波形如圖4所示。
如上圖所示,第1行信號是40 MHz的晶振時鐘;第2行信號是輸入信號pps_in;第3行信號是復(fù)位信號,低電平有效;第4行信號是分頻后的時鐘信號5 MHz;第5行是輸入秒信號,此時秒信號sec bcd[7..0]為8位二進(jìn)制數(shù)10001000;最后一行信號是B碼的編碼信號。當(dāng)pps_in上升沿到來時,FPGA對B碼在5 MHz時鐘的上升沿處立即產(chǎn)生高電平,首先是B碼輸出位置識別標(biāo)志Pr(高電平8 ms,低電平2 ms),接著8位二進(jìn)制的秒信號從低位至高位輸出,實(shí)現(xiàn)計(jì)數(shù)器計(jì)數(shù)編碼,放大波形可以知道,此時B碼與pps_in有100 ns的滯后,100ns的延遲對時序同步影響很小,可以忽略不計(jì)。然后FPGA根據(jù)狀態(tài)機(jī)的狀態(tài)運(yùn)行,直到下一個pps_in上升沿來臨。
3 IRIG-B碼解碼
解碼部分的設(shè)計(jì)采用兩個時鐘來處理,晶振的時鐘為40 MHz,通過分頻,可以得到一個是10 kHz的時鐘,和一個10 MHz的時鐘。先采用10 kHz的時鐘,當(dāng)連續(xù)監(jiān)測到2個脈寬為8 ms的位置標(biāo)示信號時,啟動1個計(jì)時器,當(dāng)計(jì)時器計(jì)時到990 ms時,產(chǎn)生1個使能信號EN,這個信號是傳遞給高頻時鐘的監(jiān)測使能信號。接著計(jì)時器清零,等待下一次監(jiān)測到連續(xù)2個脈寬為8 ms的信號出現(xiàn)時,計(jì)時器重新開始計(jì)時。
如果只采用高頻時鐘的話,要監(jiān)測2個脈寬為8 ms的信號與計(jì)時將會非常浪費(fèi)邏輯資源。所以在前一部分的監(jiān)測與計(jì)時用低頻時鐘進(jìn)行;在準(zhǔn)時對應(yīng)的上升沿來臨前2 ms為高頻時鐘部分提供1個使能信號;高頻時鐘處理部分接收到此使能信號EN后再監(jiān)測B碼的PR的上升沿,當(dāng)監(jiān)測到PR為高電平后,發(fā)出1個脈沖1 pps。經(jīng)過這樣的處理,就能精確的提取出1 pps信號以及與1 pps精確同步的10 MHz脈沖信號。1 pps對時信號的提取如圖5所示。
評論