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