吳錕 劉慧
(1.上海船舶電子設(shè)備研究所 上海市 201108 2.91860 部隊 上海市 200940)
聲納系統(tǒng)數(shù)據(jù)貫穿于聲納發(fā)射機(jī)、接收機(jī)及信號處理機(jī)的各個環(huán)節(jié),是反映聲納系統(tǒng)各項技術(shù)指標(biāo)的直接載體,這些數(shù)據(jù)需要進(jìn)行傳輸、存儲和事后分析處理[1]。聲納數(shù)據(jù)的傳輸是連接聲納系統(tǒng)水下與水上設(shè)備的中樞,主要用于將水下設(shè)備采集的數(shù)據(jù)快速可靠地傳輸至水上信號處理模塊中,其精確性和可靠性對聲納系統(tǒng)信號采集與處理的穩(wěn)定可靠運(yùn)行具有重要影響。隨著聲納 系統(tǒng)數(shù)據(jù)容量越來越大,頻率等級越來越高,傳統(tǒng)的諸如串口、ATM 光纖傳輸方案已呈現(xiàn)出諸多難以克服的瓶頸。基于集光學(xué)與電子技術(shù)于一體的以太網(wǎng)傳輸方案有效解決了傳統(tǒng)串口、ATM 光纖等傳輸方案存在的帶寬限制與可靠性等一系列問題,還保留了成熟的傳輸技術(shù),與光電子技術(shù)相結(jié)合,具有提升帶寬、可靠性高等傳統(tǒng)傳輸方案無法比擬的優(yōu)勢。本文設(shè)計的聲納系統(tǒng)數(shù)據(jù)以太網(wǎng)傳輸編碼模塊是以太網(wǎng)光纖通信的重要組成部分,它的實現(xiàn)可使聲納系統(tǒng)水下與水上的數(shù)據(jù)通信更加高速可靠。
圖1:以太網(wǎng)傳輸編碼模塊總體設(shè)計
聲納系統(tǒng)水下接收換能器的輸出信號為非常微弱的模擬信號,抗干擾能力很弱,在高電壓強(qiáng)磁場并水下復(fù)雜環(huán)境下進(jìn)行傳送,精度很難保證,因此必須進(jìn)行數(shù)字化處理。雖然水下接收機(jī)AD 采集模塊已對換能器輸出的模擬信號做了數(shù)字化處理,但為了保證數(shù)據(jù)能實時可靠地傳送,對接收機(jī)AD 采集編碼后的數(shù)據(jù)進(jìn)行二次編碼處理,按照以太網(wǎng)數(shù)據(jù)幀格式將編碼后的數(shù)據(jù)傳送至水上信號處理模塊中。以太網(wǎng)傳輸編碼模塊的原理框圖如圖1 所示。
圖1 中MCU 采用Xinilx 的V5 系列FPGA,接收來自AD 采集編碼后的信號,控制各功能模塊完成數(shù)據(jù)編碼及組幀。其中最為關(guān)鍵的是CRC 校驗碼的產(chǎn)生,以下將從理論計算和硬件邏輯實現(xiàn)兩方面對其做重點闡述。
循環(huán)冗余校驗(CRC)是一種數(shù)字通信中常用的信道編碼技術(shù),其特征是信息段和校驗字段的長度可以任意選定。CRC 編碼由信息碼和校驗碼兩部分組成,在Kbit 信息碼后在拼接Rbit 的校驗碼,使整個編碼長度變?yōu)镹bit,以增加整個編碼系統(tǒng)的碼距和查錯能力,此種碼制被稱為(N,K)。在產(chǎn)生CRC 校驗碼時,需要用到除法運(yùn)算,這是比較麻煩的,因此,對于給定的(N,K)序列,利用最高次冪為N-K=R 的生成多項式G(x),即xR+xR-1+…+x2+x+1 來表示二進(jìn)制序列,生成Rbit 的校驗碼。將待傳輸?shù)臄?shù)據(jù)位串看做是一個系數(shù)為0或1 的多項式K(x)的系數(shù)序列,根據(jù)發(fā)送端與接收端約定好的生成多項式G(x)去除K(x),得到的余數(shù)多項式即為CRC 校驗碼。將CRC 校驗碼續(xù)接到信息碼的尾部構(gòu)成完整的CRC 碼,繼而發(fā)送到接收端。接收端接收到CRC 碼后,利用同樣的生成多項式G(x)再去除接收到的CRC 碼,如果傳輸過程沒有誤碼,接收到的CRC 碼可被生成多項式G(x)整除,得到的余數(shù)為0,反之即為傳輸過程中出現(xiàn)了誤碼。
2.2.1 串行實現(xiàn)方法
CRC 編碼模塊本質(zhì)上是利用了模2 除的運(yùn)算法則,即在除法運(yùn)算中加法不考慮進(jìn)位,減法不考慮借位,可通過數(shù)字邏輯中的移位和異或操作來實現(xiàn)。CRC 校驗碼其實就是模2 除的余數(shù),常采用線性反饋移位寄存器(LFSR)寄存余數(shù),模2 運(yùn)算用異或門實現(xiàn),則通用的CRC 串行編碼原理就可由n 個D 觸發(fā)器和若干個異或門的電路結(jié)構(gòu)來實現(xiàn),如圖2 所示。
對于生成多項式G(x)來說,存在Rbit 的CRC 校驗碼,需要R個D 觸發(fā)器(D0, D1, …DR-1)。圖中反饋項gi(i=0,1,2,3,…R)表示生成多項式G(x)的系數(shù),當(dāng)gi=1 時,代表存在反饋,需要進(jìn)行異或運(yùn)算;當(dāng)gi=0 時,代表不存在反饋,無需進(jìn)行異或運(yùn)算,一般地,g0=gR恒為1,即代表始終存在反饋。串行計算產(chǎn)生CRC 校驗碼時,此電路可以完成上述的模2 除的運(yùn)算,外部時鐘同步啟動線性反饋移位寄存器,每次輸入一位數(shù)據(jù),輸入的數(shù)據(jù)和上一次異或運(yùn)算的結(jié)果組合,循環(huán)進(jìn)行異或運(yùn)算,直到所有的數(shù)據(jù)全部輸入完畢,DR-1到D0中的數(shù)據(jù)即為所要求的余數(shù),即CRC 校驗碼。
圖2:編碼原理圖
圖3:CRC-32 編碼仿真波形
圖4:以太網(wǎng)MAC 子層幀格式
2.2.2 并行實現(xiàn)方法
并行實現(xiàn)方法是在串行實現(xiàn)方法的基礎(chǔ)上,利用迭代運(yùn)算進(jìn)行邏輯推導(dǎo)。當(dāng)nbit 信息碼并行輸入運(yùn)算電路,CRC 校驗碼的計算結(jié)果應(yīng)與串行計算結(jié)果一致。根據(jù)串行計算時各移位寄存器的狀態(tài)值只與信息碼當(dāng)前的輸入值和各移位寄存器的上一個狀態(tài)值有關(guān)這一特點,可以推導(dǎo)出CRC 校驗碼并行計算的邏輯關(guān)系。設(shè)Dij 表示第i 個信息碼序列輸入后,第j 個移位寄存器的狀態(tài)值,j=0,1,2,…,R-1為移位寄存器序列號,Ki(i=1,2,3,…)為輸入的信息碼序列,根據(jù)圖2 可得:
大規(guī)模集成電路及計算機(jī)技術(shù)的發(fā)展,使得之前相對復(fù)雜的算法實現(xiàn)成為可能。現(xiàn)場可編程門陣列FPGA 的出現(xiàn)能夠解決許多傳統(tǒng)數(shù)字電路設(shè)計中遇到的問題,它能夠便捷地實現(xiàn)復(fù)雜數(shù)字系統(tǒng)的設(shè)計。本設(shè)計主要是利用Xilinx 公司Virtex-5 系列FPGA 芯片,內(nèi)置有用于構(gòu)建大型陣列的FIFO 邏輯,邏輯單元多達(dá)330000 個[3],在ISE13.3 開發(fā)環(huán)境下采用Verilog 語言描述電路結(jié)構(gòu),通過片上專用的RocketIO 收發(fā)器資源實現(xiàn)編碼模塊及以太網(wǎng)光纖通信功能。
在數(shù)字編碼模塊的設(shè)計中,為了滿足聲納系統(tǒng)通信的高速、可靠性要求,采用CRC-32 并行算法實現(xiàn)CRC 校驗碼的生成。發(fā)送方和接收方按照規(guī)定的CRC-32 生成多項式
得到R 的值為32,將其帶入式(2)中,得到8bit 并行數(shù)據(jù)的CRC-32 校驗碼的計算式(4)。
上式中D0j(j=0,1,…31)為觸發(fā)器j 在本次8bit 并行數(shù)據(jù)輸入前的初始值,對于整個包含若干字節(jié)的數(shù)據(jù)幀,其CRC-32 校驗碼的產(chǎn)生就是由上一個并行輸入的8bit 數(shù)據(jù)的校驗結(jié)果作為下一個數(shù)據(jù)校驗過程中移位寄存器的初始值,如此循環(huán)往復(fù),在整個數(shù)據(jù)幀最后一個字節(jié)數(shù)據(jù)并行輸入后的下一拍,就能輸出整個數(shù)據(jù)幀的CRC-32 校驗碼。
本設(shè)計中進(jìn)行了4 個字節(jié)(C56A37DE,十六進(jìn)制,從高位到低位)CRC-32 校驗碼編碼實驗。通過在ISE13.3 開發(fā)環(huán)境下對Verilog 硬件描述語言進(jìn)行編譯、仿真、下載,實現(xiàn)了上述8 位并行輸入數(shù)據(jù)CRC-32 編碼功能。仿真結(jié)果如圖3 所示。
從仿真結(jié)果看到,寄存器中存儲的余數(shù)值的計算結(jié)果符合上述整個數(shù)據(jù)幀的運(yùn)算流程,即每個時鐘周期并行輸入一個字節(jié),在第1 個時鐘周期,系統(tǒng)復(fù)位并初始化,寄存器清零。從第2 個時鐘周期開始向Verilog 描述的運(yùn)算電路并行輸入8bit 數(shù)據(jù),電路計算的并行數(shù)據(jù)與寄存器的初始值按照上述推導(dǎo)的邏輯關(guān)系計算,得到的32 位的CRC 余數(shù)值存入寄存器中。當(dāng)?shù)? 個時鐘的8bit 數(shù)據(jù)并行輸入時,再次與寄存器當(dāng)前余數(shù)值進(jìn)行異或運(yùn)算,得到的新的余數(shù)值再次存入寄存器中,如此循環(huán)往復(fù)迭代計算,當(dāng)整個幀4 字節(jié)數(shù)據(jù)全部輸入完畢后,生成的CRC-32 校驗碼為7A0B123B,即為整個數(shù)據(jù)幀的CRC-32 的校驗碼。
以太網(wǎng)上的數(shù)據(jù)通過MAC 子層在上層協(xié)議和以太網(wǎng)網(wǎng)絡(luò)之間利用光纖介質(zhì)進(jìn)行傳輸和接收數(shù)據(jù),其主要功能是確保以太網(wǎng)上每一幀數(shù)據(jù)的傳輸都遵循IEEE802.3 規(guī)范所規(guī)定的介質(zhì)存取規(guī)則[4]。以太網(wǎng)MAC 子層幀格式如圖4 所示[5]。
圖中目的地址用于識別需要接收幀的站,源地址用于識別發(fā)送幀的站,數(shù)據(jù)長度定義了數(shù)據(jù)字段的長度,數(shù)據(jù)是一組字節(jié)的任意值序列,F(xiàn)CS 為幀狀態(tài)檢測字段,該序列包括32 位的循環(huán)冗余校驗(CRC)值,由發(fā)送MAC 方生成,通過接收MAC 方進(jìn)行計算得出,以校驗幀傳輸過程中出現(xiàn)的誤碼。
MAC 子層從上層協(xié)議接收到發(fā)送幀數(shù)據(jù)的請求,首先插入目的地址和源地址,其次統(tǒng)計來自上層協(xié)議數(shù)據(jù)的長度,插入量值,然后插入來自上層協(xié)議的數(shù)據(jù),如果數(shù)據(jù)小于46 個字節(jié),則自動補(bǔ)齊46 字節(jié),最后根據(jù)目的地址、源地址、數(shù)據(jù)長度和數(shù)據(jù)產(chǎn)生CRC-32 校驗碼,并插入該校驗序列,以太網(wǎng)數(shù)據(jù)組幀完成。在全雙工方式下發(fā)送整個以太網(wǎng)數(shù)據(jù)幀至接收端,接收端接收整個數(shù)據(jù)幀后,首先檢查數(shù)據(jù)幀中的目的地址和當(dāng)前地址是否相符,然后檢查接收到的數(shù)據(jù)幀中的數(shù)據(jù)長度和CRC-32 校驗序列和實際的數(shù)據(jù)長度、CRC-32 校驗序列是否相符。如果均相符,表明數(shù)據(jù)傳輸過程中未出現(xiàn)誤碼,傳輸任務(wù)完成。
聲納系統(tǒng)內(nèi)部的數(shù)據(jù)傳輸采用先進(jìn)的電子及以太網(wǎng)光纖通信技術(shù),具有廣泛的通用性。本文介紹的基于FPGA 的聲納系統(tǒng)數(shù)據(jù)編碼設(shè)計方法包含了CRC 校驗?zāi)K、以太網(wǎng)組幀模塊,從理論分析了CRC 校驗碼的生成,采用CRC 并行算法在FPGA 上實現(xiàn)以太網(wǎng)數(shù)據(jù)傳輸編碼模塊。實際測試也證明本方案能夠滿足聲納系統(tǒng)數(shù)據(jù)傳輸?shù)母咚傩?、實時性和可靠性的要求,方案是可行的,可廣泛地通用于聲納數(shù)據(jù)通信系統(tǒng),具有使用價值。同時,本方案的設(shè)計實現(xiàn)采用了目前應(yīng)用的現(xiàn)場可編程邏輯器件FPGA,使聲納系統(tǒng)數(shù)據(jù)傳輸?shù)木雀?,更加穩(wěn)定,可快捷地完成系統(tǒng)所要求的數(shù)據(jù)傳輸任務(wù)。