基于FPGA的IRIG-B(DC)碼解碼
摘要:在分析了IRIG-B(DC)碼碼型特點(diǎn)的基礎(chǔ)上,提出了一種IRIG-B(DC)時(shí)間碼解碼的設(shè)計(jì)方法。該方法由少量外圍電路與一片現(xiàn)場(chǎng)可編程門陣列(FPGA)芯片組成,來實(shí)現(xiàn)對(duì)IRG-B(DC)碼的解碼、1 PPS信號(hào)輸出、實(shí)時(shí)時(shí)間顯示以及串行異步通信。與傳統(tǒng)的方法相比,該設(shè)計(jì)方案具有體積小、成本低、工作穩(wěn)定等優(yōu)點(diǎn),完全能夠替代傳統(tǒng)的B碼機(jī)箱的功能。
關(guān)鍵詞:IRIG-B(DC);FPGA;硬件描述語言;串行通信
隨著電力自動(dòng)化水平的提高,電力對(duì)時(shí)間的同步要求越來越迫切、時(shí)間同步的精度要求越來越高。采用GPS全球衛(wèi)星定位系統(tǒng)的時(shí)間同步功能,是提高電力生產(chǎn)和管理自動(dòng)化水平、確保運(yùn)行質(zhì)量的一條最佳途徑。國(guó)家電力公司、各大電網(wǎng)和省電力公司,高度重視電力系統(tǒng)的時(shí)間同步系統(tǒng)的建設(shè),明確要求電力的生產(chǎn)運(yùn)行系統(tǒng)裝置采用衛(wèi)星時(shí)鐘進(jìn)行校時(shí)。由于目前GPS接收機(jī)采用IRIG-B(DC)時(shí)間碼的格式輸出標(biāo)準(zhǔn)時(shí)間信息,所以本文提出了一種基于FPGA來實(shí)現(xiàn)的IRIG-B(DC)時(shí)間碼解碼設(shè)計(jì)方案。
1 IRIG-B碼簡(jiǎn)介
IRIG-B(DC)時(shí)間碼(簡(jiǎn)稱B碼)是由IRIG所屬的TCG(Telecommunication Group)制訂的一種串行時(shí)間碼。B碼是一種串行時(shí)間碼,幀長(zhǎng)為1 s,共包含100個(gè)碼元。它采用脈寬調(diào)制方式編碼,共有三種寬度的碼元,分別表示“0”,“1”.“P”,其中“P”為標(biāo)志位,如圖1所示,碼元的總寬度為10 ms,“0”的脈寬為2 ms;“1”的脈寬為5 ms;“P”的脈寬為8 ms。
B碼的1幀從連續(xù)兩個(gè)“P”開始,其中第一個(gè)標(biāo)志位為P0,第二個(gè)標(biāo)志位為PR,PR的上升沿是1 s的準(zhǔn)秒時(shí)刻,即當(dāng)前幀表示的秒時(shí)刻的起點(diǎn)。如果規(guī)定PR所在位置為第0個(gè)碼元,那么每幀分別有編號(hào)為0,1,2,…,99的碼元。標(biāo)志位P1,P2,P3,…,P0的位置分別在9,19,29,…,99。B碼包含了當(dāng)前時(shí)刻的秒,分,時(shí),天信息和每天按秒計(jì)時(shí)的秒數(shù)(TIME OF DAY,TOD),如圖2所示。
秒信息從00~59,分為“秒”和“十秒”兩部分,分別使用BCD碼表示。“秒”使用1,2,3,4碼元,“十秒”使用6,7,8碼元。分信息也是從00~59,分為“分”和“十分”,“分”使用10,11,12,13碼元,“十分”使用15,16,17碼元。小時(shí)信息從00~23,分為“時(shí)”和“十時(shí)”,“時(shí)”使用20,21,22,23碼元,“十時(shí)”使用25,26碼元。天表示的是從1月1日到當(dāng)前日期的總天數(shù),如1月1日,天數(shù)為1。天數(shù)從1~365(閏年為366),分為“天”,“十天”和“百天”三部分,“天”使用30,31,32,33碼元,“十天”使用35,36,37,38碼元,“百天”使用40,41碼元,TOD時(shí)間使用80,81,82,83,84,85,86,87,88,90,91,92,93,94,95,96,97共17個(gè)碼元,采用直接二進(jìn)制表示從每天的第一秒到當(dāng)前時(shí)刻的總秒數(shù)。23點(diǎn)59分59秒對(duì)應(yīng)的TOD時(shí)間為86 399 s的IRIG-B(DC)碼如圖2所示。注意,秒、分、時(shí)、天、TOD表示都是低位在前,高位在后;第5、14、24、34碼元為索引標(biāo)志碼元。另外,標(biāo)志位P5到P8之間的碼元為控制碼元,可以根據(jù)實(shí)際使用時(shí)的協(xié)議來制訂使用方法。
2 FPGA解碼方案
FPGA是現(xiàn)場(chǎng)可編程門陣列(Field ProgrammableGate Array)的簡(jiǎn)稱。FPGA器件及其開發(fā)系統(tǒng)是開發(fā)大規(guī)模數(shù)字集成電路的新技術(shù)。在電子產(chǎn)品設(shè)計(jì)中有較廣泛的應(yīng)用。在本設(shè)計(jì)中采用的是Xilinx公司Spartan3系列中的XC3S1500芯片。它具有29952個(gè)邏輯單元,150萬個(gè)門。XC 3S1500具有333個(gè)管腳,采用FG456封裝,支持在線可編程。
Xilinx公司提供了支持FPGA開發(fā)的軟件ISE,通過它可以進(jìn)行原理圖編輯,VHDL文本語言編輯,并支持這兩種編輯方式的混合設(shè)計(jì)。在本設(shè)計(jì)中采用的是ISE 10.1軟件。完成了設(shè)計(jì)輸入并成功地進(jìn)行了編譯,只能說明設(shè)計(jì)符合一定的語法規(guī)范,并不能保證設(shè)計(jì)可以獲得所期望的功能,這時(shí)就需要通過仿真對(duì)設(shè)計(jì)進(jìn)行驗(yàn)證。ModelSim是業(yè)界十分優(yōu)秀的語言仿真器,它提供十分友好的調(diào)試環(huán)境,仿真速度快,精度高。在本設(shè)計(jì)中采用的是ModelSim SE 6.6e。
在本工程設(shè)計(jì)中采用了VHDL語言,自頂向下的設(shè)計(jì)方法,實(shí)現(xiàn)了工程的層次化管理。為了使得產(chǎn)品穩(wěn)定、可靠,采用全同步設(shè)計(jì),使整個(gè)工程都在一個(gè)時(shí)鐘上升沿時(shí)刻改變狀態(tài)。這樣可以避免冒險(xiǎn)和其他不定態(tài)的出現(xiàn)。其軟件設(shè)計(jì)模塊基本框圖如圖3所示。
2.1 全局控制模塊
全局控制模塊產(chǎn)生全局控制信號(hào)count,對(duì)其他模塊進(jìn)行時(shí)序管理。首先,將輸入的10 MHz頻率倍頻到50 MHz,使得整個(gè)工程以50 MHz的頻率運(yùn)行。其次,判斷輸入的B(DC)碼碼元的上升沿,在碼元的上升沿時(shí)刻對(duì)全局控制信號(hào)count復(fù)位,接下來在50 MHz頻率的控制下全局控制信號(hào)count開始計(jì)數(shù)。count的低17比特是2.2 ms的計(jì)數(shù)器,count的第17,18比特是對(duì)B(DC)碼碼元采樣點(diǎn)的標(biāo)記,范圍是0~3。count的第19~25比特是對(duì)B(DC)碼碼元的統(tǒng)計(jì),范圍是0~99。最后,搜索幀頭的功能。對(duì)B碼采樣模塊輸出的數(shù)據(jù)進(jìn)行判斷,當(dāng)搜索到連續(xù)兩個(gè)標(biāo)志位P0,PR時(shí),則認(rèn)為搜索到幀頭,開始BCH譯碼,否則認(rèn)為沒有搜索到幀頭,控制信號(hào)count復(fù)位,重新搜索。
2.2 B碼采樣模塊
B碼采樣模塊在B(DC)碼碼元上升沿時(shí)刻開始以2.2 ms間隔對(duì)其采樣,由于B碼的碼元寬度為10 ms所以每個(gè)B(DC)碼碼元采樣到四個(gè)值。‘P’碼元采樣到的數(shù)據(jù)是“1110”,如圖4所示。同理,‘0’碼元采樣到的數(shù)據(jù)是“0000”,‘1’碼元采樣到的數(shù)據(jù)是“1100”。將采樣到的值反饋給全局控制模塊以便進(jìn)行幀頭搜索并傳遞給BCH譯碼模塊。
為了防止干擾造成的抖動(dòng)對(duì)輸入信號(hào)造成誤判,采取的修正方法是在全局控制信號(hào)count的控制下,在B(DC)碼碼元的每個(gè)采樣點(diǎn)處間隔兩個(gè)主鐘連續(xù)采樣三次.然后將這三次的采樣值兩兩按位與,再將相與的結(jié)果相或便得到該采樣點(diǎn)處的真實(shí)值,有效地防止了干擾造成的信號(hào)誤判。
2.3 BCH譯碼模塊
BCH譯碼模塊在控制信號(hào)count的控制下對(duì)B(DC)碼采樣模塊輸出的數(shù)據(jù)進(jìn)行判斷,當(dāng)為“1110”時(shí),對(duì)應(yīng)的碼元信息為‘P’;當(dāng)為“0000”時(shí),對(duì)應(yīng)的碼元信啟、為‘0’;當(dāng)為“1100”時(shí),對(duì)應(yīng)的碼元信息為‘1’,并按照秒、分、時(shí)、天、TOD在B(DC)碼中所對(duì)應(yīng)的碼元位置進(jìn)行相應(yīng)的組合。
2.4 天、時(shí)、分、秒、TOD提取模塊
天、時(shí)、分、秒、TOD提取模塊是將BCH譯碼模塊中輸出的數(shù)據(jù)存入天、時(shí)、分、秒、TOD寄存器中。圖5是在ModelSim SE 6.6下的仿真,TOD為86 399,365天23時(shí)59分59秒分別存入了TOD、天、時(shí)、分、秒寄存器。從圖5觀察TOD、天、時(shí)、分、秒輸出正確。
2.5 1 PPS提取模塊
1 PPS提取模塊是產(chǎn)生1 PPS信號(hào)。上電復(fù)位后能夠產(chǎn)生高電平寬度為5 ms,周期為1 s的游離1 PPS信號(hào),當(dāng)全局控制模塊搜索到幀頭位置后,通過全局控制信號(hào)count來修正1 PPS信號(hào)上升沿的位置。圖6是在M0delSim SE 6.6下的仿真1 PPS信號(hào)輸出。觀察圖6可知1 PPS信號(hào)輸出正確。
2.6 串口模塊
串口模塊是將天、時(shí)、分、秒、TOD串行輸出到B(DC)碼解碼上位機(jī)軟件。在串口模塊中按照規(guī)定的組幀協(xié)議將天、時(shí)、分、秒、TOD的BCD碼組幀輸出。利用本廠設(shè)計(jì)生產(chǎn)的B(DC)碼發(fā)生器輸出固定時(shí)間的B(DC)碼,然后用本設(shè)計(jì)方案設(shè)計(jì)試制的B(DC)碼解碼器解碼,最后通過串口連接到PC機(jī)上進(jìn)行測(cè)試。圖7是B(DC)碼解碼上位機(jī)軟件的測(cè)試結(jié)果,顯示正確。
3 結(jié)語
傳統(tǒng)的IRIG-B碼解碼器采用微處理器設(shè)計(jì),器件較多,結(jié)構(gòu)較復(fù)雜,尤其是在受到外界干擾的情況下,會(huì)出現(xiàn)死機(jī)等故障。而采用FPGA設(shè)計(jì)的解碼器集成度高、設(shè)計(jì)靈活方便,在很大程度上解決了上述問題。
隨著我國(guó)電力自動(dòng)化水平的不斷發(fā)展,電力生產(chǎn)設(shè)備的可靠性和小型化是必然的趨勢(shì)。FPGA在這方面能發(fā)揮較好的作用,其應(yīng)用可使電力生產(chǎn)設(shè)備結(jié)構(gòu)更加簡(jiǎn)單緊湊,性能更加可靠、穩(wěn)定。