牛茜,靳鴻
(中北大學 儀器科學與動態(tài)測試教育部重點實驗室,山西 太原 030051)
1553B總線是廣泛適用于航空電子領域的協(xié)議標準,它具有傳輸穩(wěn)定、抗干擾、負荷輕、速率高(至少1M/s)等優(yōu)點。主要被歐美軍方用于軍事系統(tǒng),為適應現(xiàn)代軍事斗爭的需要,近年來,我國在新型戰(zhàn)斗機、驅(qū)逐艦的研制中已采用該標準。但是由于該標準的核心技術(shù)為歐美公司所壟斷,因此,自主研發(fā)基于1553B總線標準的協(xié)議芯片及產(chǎn)品具有重要的戰(zhàn)略及經(jīng)濟意義。隨著可編程邏輯器件的高速發(fā)展,越來越多的設計者在FPGA、CPLD等的硬件基礎上開展設計研究,為自主研發(fā)1553B相關產(chǎn)品首先必須解決曼徹斯特碼的編、解碼問題。本文的主要工作就是在FPGA的硬件基礎上利用有限狀態(tài)機來設計實現(xiàn)1553B總線中曼徹斯特II型碼的解碼器[1]。
1553B總線的全稱是:飛機內(nèi)部時分制指令/響應式多路傳輸數(shù)據(jù)總線。標準定義了4種硬件組成:傳輸介質(zhì)、遠程終端RT、總線控制器BC、總線監(jiān)視器MT。其中傳輸介質(zhì)為屏蔽雙絞線,總線耦合方式有直接耦合和變壓器耦合,直接耦合方式短截線最長距離約為30cm,變壓器耦合方式短截線最長距離約為6.10m;總線控制器BC主要控制總線上的數(shù)據(jù)傳輸;遠程終端RT響應來自BC的命令,執(zhí)行數(shù)據(jù)傳輸;總線監(jiān)視器MT有選擇的或是完全的接收數(shù)據(jù)總線上的信息并保存[2]。
總線上信號是以串行數(shù)字脈沖的形式進行傳輸?shù)模鋽?shù)據(jù)代碼用雙相曼徹斯特碼的形式來表示,傳輸速率為1Mb/s。曼徹斯特II型碼表示二進制數(shù)值不是用電平而是用跳變,跳變產(chǎn)生在每一個位時的中點,邏輯1可以用一個雙相信號“10”來傳輸,即在一個位時的中點由高電平跳變?yōu)榈碗娖剑欢壿?可以用一個雙相信號“01”來傳輸,即在一個位時的中點由低電平跳變?yōu)楦唠娖健D1所示為數(shù)據(jù)“10001110”的編碼。
總線上傳輸?shù)挠腥N類型的字:命令字、狀態(tài)字和數(shù)據(jù)字。每種字的字長為20位,有效信息位是16位,每個字的前三位為同步字頭,最后一位為奇偶校驗位。有效信息(16位)及奇偶校驗位在總線上以曼徹斯特碼的形式進行傳輸,每位占的時間為1μs。同步頭占3位,或先正后負(命令字、狀態(tài)字)或先負后正(數(shù)據(jù)字)。正/負電平各占1.5μs,即占同位場的一半[3]。
圖1 數(shù)據(jù)“10001110”的曼徹斯特II編碼
曼徹斯特解碼就是指解碼器從收發(fā)器接收曼徹斯特II型編碼的串行數(shù)據(jù),實現(xiàn)同步頭的檢出,數(shù)據(jù)檢出,同步頭、曼徹斯特II碼錯誤檢出,奇偶檢測等功能,將處理后的有效信息送往后續(xù)模塊進行分析。而這些信息的檢出是通過用高頻時鐘抽樣計數(shù)的方式來確定信號脈沖寬度和跳變情況來實現(xiàn)的。
狀態(tài)機是一個廣義的時序電路,像移位寄存器、計數(shù)器等都算是它的特殊功能類型中的一種。根據(jù)輸入、輸出及狀態(tài)之間的關系,狀態(tài)機可分為兩類,一類是Moore狀態(tài)機,其輸出值只取決于當前狀態(tài),與輸入值無關;另一類是Mealy狀態(tài)機,其輸出值不但和當前狀態(tài)有關,還和輸入值相關。結(jié)合設計需要,我們采用Mealy狀態(tài)機方式來實現(xiàn)設計所需要的功能。
結(jié)合具體情況,設計了7個狀態(tài),分別為:IDEL空閑狀態(tài),SYN1檢測到同步頭的前半部分,SYN2檢測到同步頭的后半部分,Shift1檢測到數(shù)據(jù)位的前半部分,Shift2檢測到數(shù)據(jù)位的后半部分,PARITY1檢測到奇偶校驗位的前半部分,PARITY2檢測到奇偶校驗位的后半部分。在各個狀態(tài)中,又根據(jù)其余輸入信號的具體情況決定下一步應該轉(zhuǎn)入哪一狀態(tài)和當前狀態(tài)各項輸出值應為多少。
首先我們來分析信息傳輸當中可能出現(xiàn)的脈沖寬度及采樣點數(shù)。以同步頭為例,同步頭有“01”和“10”兩種情況,如果結(jié)合同步頭后的數(shù)據(jù)位來考慮的話,應該有如圖2所示的4種不同情況,如果檢測到的同步頭類型不是以下4種,則說明沒有檢測到合法的同步頭。同樣的方法分析數(shù)據(jù)位及奇偶校驗位,可以得出在整個的數(shù)據(jù)傳輸中,可能出現(xiàn)的脈沖寬度有:500ns、1000ns、1500ns、2000ns這4種情況。結(jié)合設計所采用的24MHz時鐘和可能出現(xiàn)的脈沖寬度情況,理論上我們的采樣計數(shù)值應該有:12、24、36、48等4種,但在實際工作中,當采樣計數(shù)點的值在9~11個時,則認為采集的目標信號為一個500ns的脈沖,同理,當采樣計數(shù)點的值在 21~23、33~35、45~47 時,認為采集的目標信號為1000ns、1500ns、2000ns的脈沖。整個狀態(tài)機的狀態(tài)轉(zhuǎn)換圖,如圖3所示,圖3中“!1”表示條件1取反;7|5表示條件7或條件5成立。在狀態(tài)轉(zhuǎn)移圖中各轉(zhuǎn)移條件的具體含義如表1所示。
圖2 同步頭脈沖寬度圖
圖3 狀態(tài)轉(zhuǎn)移圖
當總線上沒有數(shù)據(jù)傳輸時,在這里具體表現(xiàn)為雙相輸入數(shù)據(jù)相等,則狀態(tài)機將一直處于空閑狀態(tài)IDEL,一旦數(shù)據(jù)輸入有效,則狀態(tài)轉(zhuǎn)移到同步頭前半部狀態(tài)SYN1。在進入同步頭前半部狀態(tài)SYN1的同時采樣計數(shù)開始,直到雙向輸入數(shù)據(jù)同時有跳變?yōu)橹?,則根據(jù)當時所計得的采樣計數(shù)值決定下一步進入哪個狀態(tài),其余狀態(tài)的轉(zhuǎn)換同SYN1狀態(tài)類同,轉(zhuǎn)入不同的狀態(tài)主要由數(shù)據(jù)跳變時所得到的計數(shù)值來決定。其中略有差異的有兩點:首先,在數(shù)據(jù)位后半部狀態(tài)Shift2,要決定下一狀態(tài)還要結(jié)合數(shù)據(jù)位計數(shù)值rbc,這是因為在Shift2狀態(tài)要根據(jù)數(shù)據(jù)位的計數(shù)值rbc來判斷決定下一狀態(tài)是要進入后續(xù)數(shù)據(jù)位的前半部狀態(tài)Shift1,還是已完成所有數(shù)據(jù)位的接收,應該要進入奇偶校驗位的前半部狀態(tài)PARITY1;其次,在奇偶校驗位的后半部狀態(tài)PARITY2,不以雙向輸入數(shù)據(jù)同時有跳變?yōu)椴蓸佑嫈?shù)結(jié)束的條件,這是因為該狀態(tài)為字接收周期的最后一個狀態(tài),如果此后總線空閑,雙相輸入均為零,那么此時只有一條數(shù)據(jù)輸入線上有跳變也屬于正常狀況。而在狀態(tài)機的不同狀態(tài),對總線上數(shù)據(jù)的譯碼也有所不同,例如在SYN1狀態(tài)輸出同步頭類型值若為DEC_In,則在SYN2狀態(tài)輸出同步頭類型值就應該為!DEC_In,即DEC_In值取反。這在其余狀態(tài)中情況類似,這就需要對字結(jié)構(gòu)有詳細的了解。最后應注意在狀態(tài)機工作過程中若出現(xiàn)!1情況,則視為數(shù)據(jù)無效,返回空閑狀態(tài)IDEL。
表1 狀態(tài)轉(zhuǎn)移條件表
本狀態(tài)機的設計采用Verilog HDL語言,在Quartus II軟件中對所設計編碼進行了綜合仿真。
另外設計中需要注意狀態(tài)機中狀態(tài)碼的選擇:在電路工作中,狀態(tài)機的狀態(tài)碼是變化最頻繁的變量,也是對電路的工作過程影響非常大的變量。狀態(tài)編碼一般有3種:二進制編碼、格雷編碼和獨熱編碼。本設計中我們采用獨熱編碼[5]。
解碼器的仿真時序圖如圖4所示。
圖4 解碼器仿真時序圖
由圖4可知,經(jīng)過狀態(tài)機解碼解出正確的碼字67C7H及同步頭類型信號DEC_syn_type,并輸出DEC_ready信號。當總信空閑時,DEC_bus_free信號有效。
該設計采用Verilog HDL語言作為設計輸入,使用Quartus II軟件集成的仿真、綜合工具,選用Mealy狀態(tài)機方式完成了1553B總線曼徹斯特碼解碼器的設計。采用狀態(tài)機的方法將單個字中各部分分為6種不同的情況進行接收處理,與組合邏輯電路實現(xiàn)相比較更具有優(yōu)越性。本模塊已應用于基于硬件FPGA對1553B總線進行總線監(jiān)測的某項目的解碼部分,經(jīng)反復實驗驗證,解碼正確,并具有很強的實際應用性。
[1]楊凱.MIL-STD-1553B總線曼徹斯特碼編碼器的設計與實現(xiàn)[D].成都:四川大學,2006.
[2]賈永來.基于FPGA的1553B總線接口技術(shù)研究及實現(xiàn)[D].成都:電子科技大學,2008.
[3]石紅梅.用FPGA實現(xiàn)1553B總線接口中的曼碼編碼解碼器[J].單片機與嵌入式系統(tǒng)應用,2005(4):42-46.
[4]齊淋淋.PCI總線目標接口狀態(tài)機的Verilog HDL實現(xiàn)[J].計算機工程與設計,2006(6):2269.
[5]蔣豪.基于FPGA的PCI總線從接口IP核的設計與實現(xiàn)[D].鎮(zhèn)江:江蘇大學,2008.
[6]何鵬.基于DSP-FPGA的1553B總線接口通訊模塊的研究和應用[D].西安:長安大學,2009.
[7]廖文彬.MIL-STD-1553多功能總線測試卡的實現(xiàn)[D].成都:電子科技大學,2009.
[8]張淑玲,沈田.曼徹斯特編碼技術(shù)在測井數(shù)據(jù)傳輸中的應用研究[J].計算機與數(shù)字工程,2009,37(9):187-189.