顏愛(ài)良 吳瓊 王子劍
摘要:曼徹斯特編碼、解碼器是1553B總線協(xié)議處理器中的不可缺少的重要組成部分,一個(gè)穩(wěn)定、可靠的曼徹斯特編碼、解碼器設(shè)計(jì)對(duì)整個(gè)1553B總線協(xié)議處理器的性能起著關(guān)鍵的作用。本文采用硬件描述語(yǔ)言Verilog以及Modelsim軟件進(jìn)行4M碼率的曼徹斯特編、解碼器的設(shè)計(jì)和驗(yàn)證。
關(guān)鍵詞:曼徹斯特編碼器;解碼器;1553B;Verilog
中圖分類(lèi)號(hào):TN919.8 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2018)07-0146-04
曼徹斯特編碼、解碼器是1553B總線協(xié)議處理器中的不可缺少的重要組成部分,作為1553B總線中數(shù)據(jù)接收與發(fā)送的接口,一個(gè)穩(wěn)定、可靠的曼徹斯特編碼、解碼器設(shè)計(jì)對(duì)整個(gè)1553B總線協(xié)議處理器的性能起著關(guān)鍵的決定性作用。本文中所設(shè)計(jì)的曼徹斯特編碼、解碼器是采用硬件描述語(yǔ)言Verilog進(jìn)行編程,以及采用Modelsim軟件進(jìn)行仿真驗(yàn)證。
1 1553B總線簡(jiǎn)介及其協(xié)議處理器功能分析
MIL-STD-1553B的全稱為“飛機(jī)內(nèi)部時(shí)分制指令/響應(yīng)型多路傳輸數(shù)據(jù)總線”,其作用是提供一個(gè)在不同系統(tǒng)之間的傳輸數(shù)據(jù)和信息的媒介。由于1553B總線的高可靠性、實(shí)時(shí)性等優(yōu)點(diǎn),現(xiàn)在1553B總線也被廣泛應(yīng)用于對(duì)實(shí)時(shí)性,安全性要求很高的民用項(xiàng)目。
1.1 1553B總線協(xié)議簡(jiǎn)介
MIL-STD-1553B數(shù)據(jù)總線上節(jié)點(diǎn)分為不同的終端類(lèi)型,有總線控制器BC、遠(yuǎn)程終端RT和總線監(jiān)視器BM,一般情況下,這三部分通過(guò)多路總線接口來(lái)實(shí)現(xiàn)其功能,在一條數(shù)據(jù)總線上能同時(shí)連接31個(gè)遠(yuǎn)程終端??偩€控制器BC是在總線上唯一被安排為執(zhí)行建立和啟動(dòng)數(shù)據(jù)傳輸任務(wù)的終端;遠(yuǎn)程終端RT是用戶子系統(tǒng)到數(shù)據(jù)總線上的接口,它在BC的控制下發(fā)送數(shù)據(jù)或接收數(shù)據(jù);總線監(jiān)視器BM“監(jiān)控”總線上的信息傳輸,以完成對(duì)總線上的數(shù)據(jù)源進(jìn)行記錄和分析,但它本身不參與總線的通信。各終端之間信息傳輸方式有:BC到RT、RT到BC、RT到RT、廣播方式和系統(tǒng)控制方式。
為了提高1553B數(shù)據(jù)總線工作可靠性,通常采用雙冗余方式,實(shí)際使用中,第二條總線處于熱備份狀態(tài)??偩€傳輸媒介采用屏蔽雙絞線,節(jié)點(diǎn)耦合方式有直接耦合與變壓器耦合,數(shù)據(jù)傳輸采用曼徹斯特Ⅱ型碼調(diào)制信號(hào),信號(hào)是以串行數(shù)字脈沖的形式進(jìn)行傳輸,信號(hào)從高電平回歸到低電平表示邏輯狀態(tài)“1”,信號(hào)從低電平回歸到高電平表示邏輯狀態(tài)“0”。其典型的傳輸速率為1Mb/s,為了適應(yīng)高速數(shù)據(jù)傳輸應(yīng)用,因此本文采用4Mb/s的碼率。1553B數(shù)據(jù)總線典型拓?fù)浣Y(jié)構(gòu)如圖1所示。
在1553B總線上傳輸?shù)挠腥N類(lèi)型的字:命令字、狀態(tài)字和數(shù)據(jù)字。每種字的字長(zhǎng)為20 位,有效信息位是16 位,每個(gè)字的前三位為同步字頭,最后一位為奇偶校驗(yàn)位。有效信息(16位)及奇偶校驗(yàn)位在總線上以曼徹斯特碼的形式進(jìn)行傳輸。同步字頭占三位,或先正后負(fù)(命令字、狀態(tài)字) 或先負(fù)后正(數(shù)據(jù)字),正、負(fù)電平各占同步字頭的一半。由于系統(tǒng)的類(lèi)型不同,可辨別出命令字和狀態(tài)字,命令字由唯一的活動(dòng)總線控制器發(fā)出,而狀態(tài)字總是由遠(yuǎn)程終端RT 發(fā)出。
1.2 1553B協(xié)議處理器功能分析
作為1553B 總線的協(xié)議處理器應(yīng)完成以下功能:(1)將總線上的串行信息流轉(zhuǎn)換成處理機(jī)可以處理的并行信息或者與之相反;(2)接收或發(fā)送信息時(shí), 能夠識(shí)別或生成標(biāo)準(zhǔn)的1553 B 信息字和消息;(3)完成與處理機(jī)之間的信息交換,這包括1553B信息地址的分配,命令字/狀態(tài)字的譯碼或返回狀態(tài)字、發(fā)送數(shù)據(jù)字等。
圖2是通過(guò)參考國(guó)外專用1553B協(xié)議芯片,細(xì)致分析1553B總線協(xié)議的基礎(chǔ)上設(shè)計(jì)出來(lái)的遠(yuǎn)程終端RT協(xié)議處理器的結(jié)構(gòu)框圖。它主要包括曼徹斯特編碼/解碼器、命令字譯碼及接收控制、狀態(tài)字設(shè)置及命令字/狀態(tài)字寄存、地址譯碼、檢錯(cuò)控制、發(fā)送控制、數(shù)據(jù)緩沖等模塊。
曼徹斯特編、解碼器作為模擬收發(fā)器與協(xié)議處理器之間的橋梁,完成的是曼徹斯特碼的編碼及解碼,并檢測(cè)錯(cuò)誤。它接收具有有效同步字頭的曼徹斯特碼,并進(jìn)行譯碼,以及識(shí)別其類(lèi)型和串/ 并轉(zhuǎn)換、奇偶校驗(yàn)等;或者將處理器發(fā)出的并行二進(jìn)制數(shù)據(jù)進(jìn)行曼徹斯特碼編碼,再加上同步字頭及奇校驗(yàn)位使之成為符合1553 B 總線標(biāo)準(zhǔn)的字進(jìn)行串行輸出。
2 曼徹斯特編碼、解碼器的總體設(shè)計(jì)
在介紹編、解碼器的設(shè)計(jì)之前, 有必要了解曼徹斯特碼的特征,以便在設(shè)計(jì)中對(duì)其加以利用,達(dá)到簡(jiǎn)化電路的效果。曼徹斯特碼又稱雙相碼,是一種超越傳統(tǒng)數(shù)字傳輸極限的編碼/解碼方式。它本身包含了自定時(shí)的信息,解決了傳統(tǒng)編碼方式在傳輸數(shù)據(jù)時(shí)缺少定位時(shí)鐘信息的問(wèn)題。它對(duì)每個(gè)二進(jìn)制代碼分別利用兩個(gè)具有不同相位的二進(jìn)制新碼去取代。與用高、低電平表示的非歸零二進(jìn)制碼相比,在連‘0或連‘1的情況下更易于提取同步時(shí)鐘信息,又無(wú)直流漂移,且有強(qiáng)的抗干擾能力,編、譯碼過(guò)程比較簡(jiǎn)單。曼徹斯特編碼方式見(jiàn)圖3所示。
由圖3可以看出,曼徹斯特II型碼將邏輯‘0,表示為“01”,也即用一個(gè)由低到高的跳變來(lái)表示;將邏輯‘1表示為“10”,也即用一個(gè)由高到低的跳變來(lái)表示。
2.1 曼徹斯特解碼器的設(shè)計(jì)
曼徹斯特解碼器從模擬收發(fā)器接收曼徹斯特II型編碼的串行數(shù)據(jù),實(shí)現(xiàn)同步頭檢出、數(shù)據(jù)檢出、曼徹斯特II碼錯(cuò)誤檢出、奇偶校驗(yàn)檢測(cè)、位計(jì)數(shù)、串并轉(zhuǎn)換等功能,將處理后的16位并行數(shù)據(jù)交給后級(jí)模塊進(jìn)行分析處理。其過(guò)程可分為以下幾個(gè)部分:(1)同步頭判斷;(2)解碼有效數(shù)據(jù);(3)將解碼后的串行數(shù)據(jù)并行化,并對(duì)這16位數(shù)據(jù)進(jìn)行奇偶校驗(yàn)判斷。解碼器邏輯圖如圖4所示。
由圖4可以看出,解碼器的輸入數(shù)據(jù)有解碼時(shí)鐘clk(因?yàn)榫幋a數(shù)據(jù)在1553B總線上的傳輸速率為4Mb/s,故選解碼時(shí)鐘為40M),串行輸入的待解碼數(shù)據(jù)data,復(fù)位信號(hào)rst_n(低電平有效);同步頭類(lèi)型信號(hào)rx_csw(表示接收到的字為命令字或狀態(tài)字),同步頭類(lèi)型信號(hào)rx_dw(表示接收到的字為數(shù)據(jù)字),奇校驗(yàn)錯(cuò)誤信號(hào)parity_err(高電平表示奇校驗(yàn)錯(cuò)誤),解碼完成信號(hào)rx_rdy(高電平表示解碼完成)以及解碼后的16位并行數(shù)據(jù)rx_data_out。
解碼器的工作原理如下:首先,由于待解碼數(shù)據(jù)在數(shù)據(jù)總線上的傳輸速率為4Mb/s,而解碼時(shí)鐘為40M,故該系統(tǒng)存在跨時(shí)鐘域處理數(shù)據(jù)的問(wèn)題,為了盡可能避免發(fā)生亞穩(wěn)態(tài)問(wèn)題,故剛開(kāi)始的時(shí)候用二個(gè)移位寄存器(9位的data_sftreg,和29位的sync_sftreg)對(duì)待解碼數(shù)據(jù)進(jìn)行寄存,并檢測(cè)是否存在同步頭邊緣跳變。一旦檢測(cè)到同步頭邊緣跳變(syn_edge=(data_sftreg[3]==data_sftreg[4])&(data_sftreg[4]==data_sftreg[5]&(data_sftreg[4]!=data_sftreg[0])),則開(kāi)始同步頭的識(shí)別過(guò)程。
由于同步頭是由1.5位的高電平和1.5位的低電平組成,因此在解碼時(shí)鐘域,理論上連續(xù)接收15個(gè)高電平且15個(gè)低電平或連續(xù)接收到15個(gè)低電平且15個(gè)高電平時(shí)同步頭有效,但在實(shí)際中,這樣并不能正確同步,會(huì)產(chǎn)生解碼錯(cuò)誤。這是因?yàn)閿?shù)據(jù)從低電平跳變到高電平或高電平跳變到低電平需要一個(gè)建立時(shí)間,波形并不是理想的陡峭上升沿或下降沿,同時(shí)在實(shí)際總線中還存在干擾。因此,為了正確地識(shí)別同步頭,我們認(rèn)為當(dāng)sync_sftreg[28:16]== 0 && sync_sftreg[13:1]==13 'h1FFF && sync_edge時(shí),檢測(cè)到有效的數(shù)據(jù)字同步頭;當(dāng)sync_sftreg[28:16]==13 'h1FFF && sync_sftreg[13:1] == 0 && sync_edge時(shí),檢測(cè)到有效的命令字或狀態(tài)字同步頭。并在此時(shí)進(jìn)入16位數(shù)據(jù)塊的解碼狀態(tài),并開(kāi)始接收數(shù)據(jù)位計(jì)數(shù)。
正確識(shí)別出同步頭后,在采樣點(diǎn)(data_edge = (data_sftreg[1]==data_sftreg[2]) & (data_sftreg[2]==data_sftreg[3])&(data_sftreg[3]!=data_sftreg[6])&(data_sftreg[6]==data_sftreg[7]) & (data_sftreg[7]==data_sftreg[8]))配合接收數(shù)據(jù)位計(jì)數(shù)器,用17位移位寄存器進(jìn)行移位寄存解碼后的數(shù)據(jù)dword_int <= {dword_int[15:0], data_sftreg[7]}。當(dāng)接收數(shù)據(jù)位計(jì)數(shù)器等于16時(shí),表示17位數(shù)據(jù)塊解碼完成。此時(shí),對(duì)dword_int[16:1]進(jìn)行奇校驗(yàn),即parity_err <= ((^dword_int[16:1]) == dword_int[0]),如果parity_err==1,表明奇校驗(yàn)錯(cuò)。
最后,用保持寄存器rx_data_out寄存解碼后的16位并行數(shù)據(jù),即rx_data_out<= dword_int[16:1],并將解碼完成信號(hào)rx_rdy置高。至此,系統(tǒng)等待下一個(gè)解碼數(shù)據(jù)的到來(lái),以進(jìn)行解碼。
2.2 曼徹斯特編碼器的設(shè)計(jì)
曼徹斯特編碼過(guò)程是其解碼過(guò)程的逆過(guò)程。編碼器從圖2中的發(fā)送控制模塊接收16位并行的待發(fā)送數(shù)據(jù),并以4Mb/s的速率將按曼徹斯II編碼方式編碼的串行數(shù)據(jù)發(fā)送到模擬收發(fā)器,進(jìn)而傳送到1553B總線上。它主要實(shí)現(xiàn)將單極性不歸零碼(NRZ)轉(zhuǎn)換成雙相的曼徹斯特II型碼,并生成相應(yīng)的同步頭,進(jìn)行奇校驗(yàn),并對(duì)編碼后的數(shù)據(jù)進(jìn)行并/串轉(zhuǎn)換。曼徹斯特編碼器邏輯圖如圖5所示。
由圖5可知,曼徹斯特編碼器的輸入信號(hào)有編碼時(shí)鐘信號(hào)clk(由于是4M碼率,故選8M時(shí)鐘作為編碼時(shí)鐘),系統(tǒng)復(fù)位信號(hào)rst_n(低電平有效),異步寫(xiě)信號(hào)tx_wr,待編碼的16位并行數(shù)據(jù)tx_dword,同步頭類(lèi)型信號(hào)tx_csw;輸出信號(hào)有編碼后的正向數(shù)據(jù)txd_p,編碼后的負(fù)向數(shù)據(jù)txd_n,編碼器忙信號(hào)tx_busy以及編碼完成信號(hào)tx_rdy。
編碼器的工作原理如下:首先,利用一個(gè)17位的寄存器enc_buf,作為待編碼數(shù)據(jù)以及同步頭類(lèi)型的緩存,并設(shè)置二個(gè)寄存器類(lèi)型的信號(hào)buf_full(為1表示enc_buf寫(xiě)滿)和buf_rd(為1表示可以讀取enc_buf中的數(shù)據(jù))。一旦異步寫(xiě)信號(hào)有效,enc_buf <= {tx_csw, tx_dword},設(shè)置buf_full= =1,生成同步編碼開(kāi)始信號(hào)tx_start,并對(duì)待編碼數(shù)據(jù)進(jìn)行奇校驗(yàn),即parity = ~ ^enc_buf[15:0]。
系統(tǒng)一旦檢測(cè)到同步編碼開(kāi)始信號(hào)tx_start以及buf_full信號(hào)有效,則進(jìn)入曼徹斯特編碼階段(包括生成相應(yīng)的同步頭以及對(duì)待編碼的16位并行數(shù)據(jù)、奇校驗(yàn)位進(jìn)行曼徹斯特碼型轉(zhuǎn)換),并啟動(dòng)發(fā)送數(shù)據(jù)個(gè)數(shù)計(jì)數(shù)器busy_cnt;并根據(jù)發(fā)送數(shù)據(jù)個(gè)數(shù)計(jì)數(shù)器busy_cnt的計(jì)數(shù),串行發(fā)送編碼后的數(shù)據(jù),其關(guān)鍵代碼如下:
enc_data<={enc_buf[16] 6'b111000 : 6'b000111,enc_buf[15],~enc_buf[15],enc_buf[14],
~enc_buf[14],enc_buf[13],~enc_buf[13],enc_buf[12],~enc_buf[12],enc_buf[11],~enc_buf[11], enc_buf[10],~enc_buf[10],enc_buf[9],~enc_buf[9],enc_buf[8],~enc_buf[8],enc_buf[7],
~enc_buf[7],enc_buf[6],~enc_buf[6],enc_buf[5],~enc_buf[5],enc_buf[4],~enc_buf[4], enc_buf[3], ~enc_buf[3],enc_buf[2],~enc_buf[2],enc_buf[1],~enc_buf[1],enc_buf[0],~enc_buf[0], parity, ~parity};
最后,當(dāng)busy_cnt= =39時(shí),生成編碼完成信號(hào)tx_rdy,編碼器忙信號(hào)tx_busy=buf_full | buf_rd。至此編碼完成,等待下一次編碼的開(kāi)始。
2.3 設(shè)計(jì)中存在的問(wèn)題及解決辦法
在曼徹斯特編解碼器的設(shè)計(jì)過(guò)程中存在以下問(wèn)題:(1)由于設(shè)計(jì)中要使用40M的解碼時(shí)鐘和8M的編碼時(shí)鐘,而一般通過(guò)分頻產(chǎn)生的時(shí)鐘信號(hào),延遲比較大,影響時(shí)鐘的精度,所以一般選擇使用Altera提供的PLL產(chǎn)生相應(yīng)的時(shí)鐘信號(hào),這樣生成的時(shí)鐘信號(hào)延遲和抖動(dòng)都很小;(2)由于本設(shè)計(jì)中涉及跨時(shí)域的數(shù)據(jù)傳輸,為了盡量避免亞穩(wěn)態(tài)的發(fā)生,本設(shè)計(jì)中采用同步寄存器的方法,大大降低了亞穩(wěn)態(tài)發(fā)生的概率;(3)由于數(shù)據(jù)從低電平跳變到高電平或高電平跳變到低電平需要一個(gè)建立時(shí)間,波形并不是理想的陡峭上升沿或下降沿,同時(shí)在實(shí)際總線中還存在干擾;因此,在設(shè)計(jì)解碼器時(shí)對(duì)同步頭數(shù)據(jù)的采樣要特別小心,應(yīng)該濾除掉發(fā)生跳變以及邊緣的數(shù)據(jù)。
3 仿真結(jié)果
為了確保設(shè)計(jì)的正確性,必須對(duì)設(shè)計(jì)進(jìn)行功能仿真。本文采用Modelsim SE6.2軟件進(jìn)行仿真測(cè)試。其解碼器與編碼器的仿真結(jié)果分別如圖6、圖7所示。
在對(duì)曼徹斯特解碼器進(jìn)行仿真測(cè)試時(shí),由圖6可以看出,當(dāng)輸入的待解碼字是命令字16hcccc,解碼后的16位有效數(shù)據(jù)為“1100110011001100”,正確無(wú)誤,證明了設(shè)計(jì)的正確性。
在對(duì)曼徹斯特編碼器進(jìn)行仿真測(cè)試時(shí),由圖7可以看出,當(dāng)輸入的待編碼數(shù)據(jù)為16b1010000110100001,同步頭類(lèi)型為命令字時(shí),編碼器能按曼徹斯II型碼正確輸出編碼后的串行數(shù)據(jù),證明了設(shè)計(jì)的正確性。
4 結(jié)語(yǔ)
目前,1553B總線協(xié)議正被越來(lái)越多的軍用與民用客戶所接受。穩(wěn)定可靠的曼徹斯特編、解碼器對(duì)整個(gè)1553B總線的性能起著關(guān)鍵的作用。利用可編程邏輯器件,可順利實(shí)現(xiàn)這種編、解碼功能,其高性價(jià)比有利于協(xié)議的推廣運(yùn)用。在接下來(lái)的工作中,我們還可以運(yùn)用類(lèi)似的設(shè)計(jì)思路進(jìn)行完整的1553B協(xié)議處理器的設(shè)計(jì)。
參考文獻(xiàn)
[1]GJB289A一97.數(shù)字式時(shí)分制指令/響應(yīng)式分路傳輸數(shù)據(jù)總線[S].北京:國(guó)防科學(xué)技術(shù)工業(yè)委員會(huì)批準(zhǔn),1997.
[2]夏宇聞.復(fù)雜數(shù)字電路與系統(tǒng)的Verilog HDL設(shè)計(jì)技術(shù)[M].北京:北京航空航天大學(xué)出版社,1998:9.
[3]石紅梅,姬勞,謝栓勤.用FPGA實(shí)現(xiàn)1553B總線接口中的曼碼編解碼器[J].新器件新技術(shù),2004,4(4):42-46.
[4]賈永來(lái).基于FPGA的1553B總線接口技術(shù)研究及實(shí)現(xiàn)[D].成都:電子科技大學(xué),2008.