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