李建翔,李北國,楊玉華,劉東海
(1.中北大學(xué)儀器科學(xué)與動(dòng)態(tài)測(cè)試教育部重點(diǎn)實(shí)驗(yàn)室,山西 太原 030051;2.中北大學(xué)電子測(cè)試國家重點(diǎn)實(shí)驗(yàn)室,山西 太原 030051;3.北京航天長征飛行器研究所,北京 100076)
在信息技術(shù)飛速發(fā)展的今天,對(duì)數(shù)據(jù)傳輸?shù)乃俾省鬏斁嚯x、誤碼率提出了更高的要求,更加注重三方面的均衡[1],不僅在航空航天領(lǐng)域,同樣在引信領(lǐng)域,越來越多型號(hào)設(shè)備涉及到高速數(shù)據(jù)的傳輸以及需要對(duì)其數(shù)據(jù)進(jìn)行校驗(yàn),從而保證設(shè)備運(yùn)行的可靠性及穩(wěn)定性。
如今的測(cè)試測(cè)量任務(wù)中,尤其是惡劣環(huán)境中的測(cè)量,前人都已從硬件與軟件兩方面設(shè)計(jì)盡可能地降低數(shù)據(jù)傳輸?shù)恼`碼率,諸如解決信號(hào)在反射、串?dāng)_以及傳輸線損耗等方面的影響,在軟件中也加入許多校驗(yàn)重傳算法以保證數(shù)據(jù)傳輸?shù)目煽啃訹2]。文獻(xiàn)[2]從硬件軟件兩方面進(jìn)行優(yōu)化設(shè)計(jì),采用8 B/10 B+CRC+ARQ重傳校驗(yàn)的方式保證數(shù)據(jù)的可靠性,延長LVDS數(shù)據(jù)的傳輸距離。文獻(xiàn)[3]設(shè)計(jì)了一種片間通信校驗(yàn),經(jīng)過多通道多輪校驗(yàn),完成數(shù)據(jù)對(duì)齊,補(bǔ)償由于外界干擾帶來的路間延遲,從而保證后續(xù)雙向通信可靠進(jìn)行。目前常用的數(shù)據(jù)傳輸糾錯(cuò)方法均采用在發(fā)送端進(jìn)行數(shù)據(jù)編碼,接收端再對(duì)其進(jìn)行校驗(yàn),同時(shí)還需要傳輸鏈路具備重傳糾錯(cuò)功能,在數(shù)據(jù)出錯(cuò)時(shí)及時(shí)向發(fā)送端反饋信息,重新傳輸正確的數(shù)據(jù)。然而目前的方法對(duì)于在跨時(shí)鐘域情況下導(dǎo)致的亞穩(wěn)態(tài)問題并沒有解決,會(huì)造成重傳以及確認(rèn)指令的觸發(fā)標(biāo)志不能正確識(shí)別,從而引起數(shù)據(jù)傳輸錯(cuò)誤。本文針對(duì)此問題,提出FPGA跨時(shí)鐘域的數(shù)據(jù)傳輸糾錯(cuò)協(xié)議優(yōu)化方法。
該傳輸協(xié)議已經(jīng)運(yùn)用于某型號(hào)采編存儲(chǔ)器以及與之相對(duì)應(yīng)的地面綜合測(cè)控臺(tái),采編存儲(chǔ)器主要功能是通過外部接口接收2路PCM數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)于Flash芯片中,同時(shí)也能夠與綜合測(cè)控臺(tái)通過Hotlink接口進(jìn)行通訊,遠(yuǎn)距離傳輸采用光纖傳輸,即采編存儲(chǔ)器將接收到的數(shù)據(jù)打包發(fā)送給測(cè)控臺(tái),對(duì)其數(shù)據(jù)進(jìn)行分析判定。在具體的測(cè)試過程中,測(cè)控臺(tái)具備雙向RS422鏈路通信,通過RS422接口上行鏈路發(fā)送啟動(dòng)記錄指令,控制采編器啟動(dòng)記錄,同時(shí)采編存儲(chǔ)器將通過RS422接口下行鏈路返回工作狀態(tài)至測(cè)控臺(tái),同時(shí)通過Hotlink接口將數(shù)據(jù)下發(fā)至測(cè)控臺(tái),傳輸鏈路框圖如圖1所示。
圖1 硬件傳輸鏈路示意圖Fig.1 Schematic diagram of hardware transmission link
422指令采取三判二機(jī)制,如圖2所示,測(cè)控臺(tái)連續(xù)發(fā)送三次指令,采編存儲(chǔ)器若能識(shí)別到2次指令,便可執(zhí)行該命令。在Hotlink鏈路發(fā)送數(shù)據(jù)的過程中,通過對(duì)數(shù)據(jù)進(jìn)行CRC校驗(yàn)以提高數(shù)據(jù)傳輸?shù)目煽啃訹4]。數(shù)據(jù)的具體傳輸過程如下:采編存儲(chǔ)器在下發(fā)的每一包8 KB原始數(shù)據(jù)增加4 B的包頭,并對(duì)此8 KB數(shù)據(jù)進(jìn)行CRC運(yùn)算,將4 B的校驗(yàn)字附在數(shù)據(jù)之后,此時(shí)形成8 200 B的數(shù)據(jù),采編存儲(chǔ)器通過Hotlink接口將數(shù)據(jù)發(fā)送出去。在接收端,測(cè)控臺(tái)將再次計(jì)算所接收到的8 KB數(shù)據(jù)的CRC校驗(yàn)字,將計(jì)算結(jié)果與接收到的CRC校驗(yàn)字比較,如果二者一致,則說明接收數(shù)據(jù)正確,將數(shù)據(jù)去除包頭和校驗(yàn)字后發(fā)給上位機(jī),并通過422接口發(fā)出確認(rèn)指令;如校驗(yàn)錯(cuò)誤,則丟棄數(shù)據(jù),并通過422接口發(fā)出重傳指令;若測(cè)控臺(tái)連續(xù)發(fā)送三次重傳指令,測(cè)控臺(tái)仍無法正確接收數(shù)據(jù),則將當(dāng)前數(shù)據(jù)發(fā)送給上位機(jī)軟件,給采編存儲(chǔ)器回復(fù)確認(rèn)命令,并且開始下一包數(shù)據(jù)傳輸。以上所涉及返回的確認(rèn)或者重傳指令是在下一包數(shù)據(jù)的8 100 B之后進(jìn)行檢測(cè),以決定是否重傳。
圖2 數(shù)據(jù)傳輸包格式Fig.2 Data transmission packet format
在經(jīng)過大量的測(cè)試后,發(fā)現(xiàn)采編存儲(chǔ)器向地面測(cè)控臺(tái)下傳數(shù)據(jù)的過程中,出現(xiàn)了兩種類型的數(shù)據(jù)錯(cuò)誤,對(duì)其作出歸納后,具體表現(xiàn)如下。
在如圖3所標(biāo)記的兩包8 KB數(shù)據(jù)中,兩包數(shù)據(jù)的前8 100個(gè)數(shù)據(jù)完全一致。同時(shí)第一包數(shù)據(jù)的第8 100個(gè)數(shù)之后出現(xiàn)4 B數(shù)據(jù)包頭標(biāo)志和88個(gè)數(shù)據(jù),此處的88個(gè)數(shù)據(jù)與第一包數(shù)據(jù)之前的8 KB數(shù)據(jù)中從1~88的數(shù)據(jù)內(nèi)容完全一致,如圖4所示。
圖3 存在兩包數(shù)據(jù)完全一致Fig.3 There are two packets of data exactly the same
圖4 在8 100 B之后數(shù)據(jù)出現(xiàn)包標(biāo)志Fig.4 The packet mark appears in the data after 8 100 B
如圖5所示,PCM2數(shù)據(jù)C8 BB 3F 5F和C8 BB 3F 5A之間丟失4 KB數(shù)據(jù),PCM1數(shù)據(jù)C1 AA 9E 70和C1 AA 9E 63之間丟失12 KB數(shù)據(jù),總共丟失16 KB數(shù)據(jù)。
圖5 數(shù)據(jù)中丟失16 KB數(shù)據(jù)Fig.5 16 KB data lost in data
在數(shù)據(jù)包具體的傳輸過程中,如2.1節(jié)所闡述,數(shù)據(jù)發(fā)送端(采編存儲(chǔ)器)在發(fā)送完某包數(shù)據(jù)的前8 100個(gè)數(shù)據(jù)之后,數(shù)據(jù)接收端(測(cè)控臺(tái))會(huì)檢測(cè)前一包數(shù)據(jù)是否需要重傳,此時(shí)只會(huì)出現(xiàn)兩種可能的結(jié)果,重傳或確認(rèn),不管是什么結(jié)果,均認(rèn)為是前一包數(shù)據(jù)的結(jié)果。但是在異常情況下,此處的確認(rèn)指令可能是前兩包數(shù)據(jù)的結(jié)果,前一包數(shù)據(jù)的結(jié)果未正常接收,或者是前一包數(shù)據(jù)的確認(rèn)指令被新的重傳指令所覆蓋,因此會(huì)導(dǎo)致發(fā)送端發(fā)送的數(shù)據(jù)包不是接收端真正想要的,此時(shí)數(shù)據(jù)就會(huì)出現(xiàn)問題。在此種情況下,當(dāng)接收端接收數(shù)據(jù)的過程中,只要識(shí)別到包頭5A 54 5A FE之后,就會(huì)開始接收數(shù)據(jù),但是數(shù)據(jù)是否為接收端真正想要的數(shù)據(jù),我們無從知曉,因此就會(huì)出現(xiàn)如上所述的兩種錯(cuò)誤。
針對(duì)多8 KB無效數(shù)據(jù)的情況,當(dāng)發(fā)送端(采編存儲(chǔ)器)將第A包數(shù)據(jù)重傳被正確接收后,應(yīng)該下發(fā)確認(rèn)指令,并且正常接收第B包的數(shù)據(jù)。假若此時(shí)該確認(rèn)指令沒有被正常接收,當(dāng)其發(fā)送B包數(shù)據(jù)至8 100 B時(shí),識(shí)別到的仍然是上一次的重傳指令,則會(huì)繼續(xù)發(fā)送A包數(shù)據(jù),此時(shí)則會(huì)出現(xiàn)數(shù)據(jù)為8 100 B的B數(shù)據(jù)+92 B的A數(shù)據(jù),導(dǎo)致CRC校驗(yàn)錯(cuò)誤,如此往復(fù)重傳三次,接收端(測(cè)控臺(tái))強(qiáng)制接收錯(cuò)誤數(shù)據(jù)并發(fā)出確認(rèn)指令,繼續(xù)發(fā)送B包數(shù)據(jù),因此就會(huì)出現(xiàn)實(shí)際情況中B包數(shù)據(jù)前多出8 100 B B數(shù)據(jù)+92 B A數(shù)據(jù)的情況,分析過程如圖6所示。
圖6 多8 KB無效數(shù)據(jù)原因Fig.6 Reasons for 8 KB more invalid data
針對(duì)丟16 KB數(shù)據(jù)的情況,當(dāng)接收端(測(cè)控臺(tái))在接收A數(shù)據(jù)出現(xiàn)錯(cuò)誤時(shí),應(yīng)該下發(fā)重傳指令,此時(shí)應(yīng)延時(shí)1 000個(gè)時(shí)鐘重新識(shí)別包頭以接收正確數(shù)據(jù),在此時(shí)間里,實(shí)際上已經(jīng)跳過下一包B數(shù)據(jù)的包頭,等待A數(shù)據(jù)的包頭。但此時(shí)若發(fā)送端(采編存儲(chǔ)器)在發(fā)送B數(shù)據(jù)的8 100 B時(shí)沒有接收到重傳指令,仍然默認(rèn)為上次的確認(rèn)指令,因此會(huì)繼續(xù)發(fā)送C包數(shù)據(jù),此時(shí)接收端則開始接收C包數(shù)據(jù),從而丟失了前兩包數(shù)據(jù),即問題所在,分析過程如圖7所示。
圖7 丟失16 KB數(shù)據(jù)原因Fig.7 Reasons for losing 16 KB data
從以上兩種錯(cuò)誤數(shù)據(jù)傳輸?shù)倪^程進(jìn)行詳細(xì)分析,確定重傳以及確認(rèn)指令的觸發(fā)標(biāo)志存在異步時(shí)鐘域的影響,標(biāo)志在20 MHz時(shí)鐘下產(chǎn)生,而在40 MHz時(shí)鐘下識(shí)別標(biāo)志變化,因此當(dāng)標(biāo)志發(fā)生變化時(shí),發(fā)出重傳或者確認(rèn)指令,由于在40 MHz時(shí)鐘下僅同步一次,所以可能出現(xiàn)亞穩(wěn)態(tài)現(xiàn)象,導(dǎo)致觸發(fā)標(biāo)志變化未能正確識(shí)別[5],最終出現(xiàn)了如上兩種錯(cuò)誤。
近年來,F(xiàn)PGA作為軟件中極為重要的一環(huán),特別是在控制、通信、圖像處理等關(guān)鍵設(shè)備中,且隨著功能越來越復(fù)雜,單時(shí)鐘域的FPGA已經(jīng)逐漸不能滿足功能需求,因此多時(shí)鐘域的FPGA成為設(shè)計(jì)中不可缺失的一部分[6]。在不同的時(shí)鐘域之間進(jìn)行數(shù)據(jù)交互,亞穩(wěn)態(tài)的現(xiàn)象就不可避免[7]。觸發(fā)器在時(shí)鐘沿的驅(qū)動(dòng)下進(jìn)行數(shù)據(jù)的采集與更新,如果建立時(shí)間與保持時(shí)間不能滿足要求,使得觸發(fā)器不能按照預(yù)期實(shí)現(xiàn)翻轉(zhuǎn),那么電路就會(huì)出現(xiàn)亞穩(wěn)態(tài),輸出電壓處于不正確的電平值,導(dǎo)致電路穩(wěn)定輸出的時(shí)間不可預(yù)知,且可能會(huì)存在振蕩的風(fēng)險(xiǎn)[8]。
由跨時(shí)鐘域?qū)е碌膩喎€(wěn)態(tài)現(xiàn)象具有如下特點(diǎn):1) 亞穩(wěn)態(tài)是雙穩(wěn)態(tài)電路固有的屬性,是我們不可避免的,同時(shí)依概率發(fā)生[9],只能盡量減少其發(fā)生;2) 亞穩(wěn)態(tài)的概率性及其對(duì)溫度的敏感,使其很難在測(cè)試與驗(yàn)證中完全體現(xiàn)[10];3) 亞穩(wěn)態(tài)會(huì)導(dǎo)致后端邏輯得到的值存在差異,進(jìn)而影響次級(jí)傳輸,使得整個(gè)系統(tǒng)的功能可能與預(yù)期存在較大差異[11]。
根據(jù)所存在的問題,以及對(duì)其進(jìn)行分析的原因,數(shù)據(jù)傳輸協(xié)議主要從兩方面進(jìn)行優(yōu)化設(shè)計(jì):
1) 標(biāo)志判斷優(yōu)化:由20 MHz時(shí)鐘下產(chǎn)生的重傳、確認(rèn)觸發(fā)標(biāo)志,在40 MHz時(shí)鐘域下同步兩次后再進(jìn)行信號(hào)變化的判斷,確保測(cè)控臺(tái)的重傳或確認(rèn)指令能成功發(fā)送至采編存儲(chǔ)器。
2) 接口協(xié)議優(yōu)化:將422重傳及確認(rèn)指令的末位修改為包計(jì)數(shù),例如“12 3X”,其中X代表包計(jì)數(shù),取值范圍為0~15。
發(fā)送端更改內(nèi)容主要為在對(duì)8 KB數(shù)據(jù)增加包頭時(shí),在最后一位增加X,其取值范圍為0~15,每發(fā)送一包數(shù)據(jù),包計(jì)數(shù)增加1;同時(shí)每當(dāng)數(shù)據(jù)發(fā)送至8 100 B時(shí),對(duì)其判斷是否需要重傳,若需要重傳,還需判定是重傳當(dāng)前包數(shù)據(jù)還是上一包數(shù)據(jù);若不需要重傳時(shí),還需判斷所確認(rèn)的包計(jì)數(shù)是否為當(dāng)前發(fā)送包計(jì)數(shù)減1,若為1,則不需要重傳,繼續(xù)發(fā)送當(dāng)前數(shù)據(jù)包,若不為1,則需要重新發(fā)送前一包數(shù)據(jù)。流程如圖8所示。
圖8 發(fā)送端數(shù)據(jù)傳輸優(yōu)化Fig.8 Data transmission optimization at the sender
接收端更改內(nèi)容主要為當(dāng)識(shí)別到下載指令信息有效后,開始識(shí)別包頭,同時(shí)解析出包計(jì)數(shù)X,若X等于receive_cnt,則繼續(xù)接收該包全部數(shù)據(jù),同時(shí)根據(jù)數(shù)據(jù)計(jì)算出CRC校驗(yàn)碼,將接收到的CRC校驗(yàn)碼與計(jì)算的校驗(yàn)碼相比較,若完全一致,則通過422接口向發(fā)送端發(fā)送該包數(shù)據(jù)的確認(rèn)幀,反之則發(fā)送重傳幀。
若X等于receive_cnt-1,說明接收端未能正確接收前一包數(shù)據(jù)的確認(rèn)幀,則通過422接口向發(fā)送端發(fā)送receive_cnt-1包的確認(rèn)幀;若X等于receive_cnt+1,說明接收端未能接收receive_cnt包的重傳幀,則通過422接口發(fā)送receive_cnt包的重傳幀。若長時(shí)間未接收到數(shù)據(jù)包頭,導(dǎo)致錯(cuò)誤計(jì)數(shù)達(dá)到27 576,則不斷向發(fā)送端發(fā)送該包數(shù)據(jù)的重傳幀,直到接收到正確的數(shù)據(jù),流程如圖9所示。
圖9 接收端數(shù)據(jù)傳輸優(yōu)化Fig.9 Receiver data transmission optimization
經(jīng)優(yōu)化后的數(shù)據(jù)包傳輸過程如圖10所示,對(duì)每一步驟可能出現(xiàn)的情況均進(jìn)行了詳細(xì)的列舉。
圖10 優(yōu)化后測(cè)控臺(tái)與采編存儲(chǔ)器之間數(shù)據(jù)包傳輸過程Fig.10 After optimization, the packet transmission process between the measurement and control platform and the acquisition and editing memory
對(duì)軟件更改后,同時(shí)在上位機(jī)界面單元測(cè)試的底部,增加了Hotlink鏈路錯(cuò)誤計(jì)數(shù)和重傳計(jì)數(shù)兩個(gè)顯示窗口,便于更加直觀明了地觀察到數(shù)據(jù)傳輸是否出現(xiàn)錯(cuò)誤以及錯(cuò)誤計(jì)數(shù),如圖11所示。
圖11 上位機(jī)界面圖Fig.11 Interface diagram of upper computer
通過實(shí)際測(cè)試,對(duì)接收到的數(shù)據(jù)進(jìn)行解析,如圖12所示,為整包數(shù)據(jù)的測(cè)試結(jié)果。從圖中可以看出,包頭為“5A 54 FE”,其后為“FX”,“X”代表包計(jì)數(shù),“X”的計(jì)數(shù)范圍為0~15,與協(xié)議一致,可以很清晰明了地看出數(shù)據(jù)包是否連續(xù),以便定位到數(shù)據(jù)是否出現(xiàn)多數(shù)或者丟數(shù)現(xiàn)象。
圖12 數(shù)據(jù)包Fig.12 The packet
再次對(duì)PCM1的數(shù)據(jù)進(jìn)行解析,如圖13所示,幀頭為“C1 AA”,經(jīng)過傳輸?shù)臄?shù)據(jù)幀計(jì)數(shù)能夠依次遞增,沒有出現(xiàn)丟數(shù)多數(shù)現(xiàn)象,修改后的協(xié)議能夠解決所出現(xiàn)的問題。
圖13 PCM1數(shù)據(jù)Fig.13 PCM1 data
利用ISE軟件的ChipScope在線分析,對(duì)優(yōu)化后的重傳協(xié)議進(jìn)行測(cè)試,某次實(shí)際測(cè)試結(jié)果如圖14所示,當(dāng)Error_flag_q為上升沿時(shí)開始進(jìn)行重傳,此時(shí)幀頭為“5A 54 5A FF”,可以看出此時(shí)包計(jì)數(shù)為“E”,同時(shí)Retransmission_cnt開始重傳計(jì)數(shù),實(shí)現(xiàn)預(yù)期重傳反饋功能。
圖14 實(shí)時(shí)重傳仿真Fig.14 Real-time retransmission simulation
經(jīng)過多次測(cè)試,在Hotlink電纜為61.2 m(全部為粗纜),重傳計(jì)數(shù)均為0,Hotlink鏈路錯(cuò)誤計(jì)數(shù)均為0,傳輸速率約為6.4 MB/s,數(shù)據(jù)全部正確;Hotlink電纜為78.8 m(61.2 m粗纜和17.6 m細(xì)纜),重傳計(jì)數(shù)為10~93,Hotlink鏈路錯(cuò)誤計(jì)數(shù)為0,傳輸速率為約6.4 MB/s,數(shù)據(jù)全部正確;Hotlink電纜為90.8 m(61.2 m粗纜和29.6 m細(xì)纜),重傳計(jì)數(shù)為2 000~8 000,Hotlink鏈路錯(cuò)誤計(jì)數(shù)為0,傳輸速率為約6.33 MB/s,數(shù)據(jù)全部正確;在Hotlink電纜斷開又重新連接后,數(shù)據(jù)依然能正常傳輸,數(shù)據(jù)全部正確;在422電纜斷開又重新連接后,數(shù)據(jù)依然能正常傳輸,數(shù)據(jù)全部正確;在422和Hotlink電纜均斷開又重新連接后,數(shù)據(jù)依然能正常傳輸,數(shù)據(jù)全部正確。因此,改進(jìn)后的傳輸協(xié)議具備更強(qiáng)的鏈路適應(yīng)性。
本文提出FPGA跨時(shí)鐘域的數(shù)據(jù)傳輸糾錯(cuò)協(xié)議優(yōu)化方法。該方法通過對(duì)標(biāo)志判斷以及接口協(xié)議兩方面進(jìn)行優(yōu)化,以使接收端和發(fā)送端達(dá)到更好的交互,確保重傳或確認(rèn)指令能成功發(fā)送,解決了由于跨時(shí)鐘域?qū)е聰?shù)據(jù)傳輸出錯(cuò)的問題。仿真實(shí)驗(yàn)驗(yàn)證結(jié)果表明,優(yōu)化后指令均能正確下發(fā),數(shù)據(jù)傳輸錯(cuò)誤計(jì)數(shù)均為0,數(shù)據(jù)全部正確,相較于傳統(tǒng)的協(xié)議更加穩(wěn)定可靠,具備更強(qiáng)的鏈路適應(yīng)性。