劉延飛 李 琪 楊鐵阡 倪 亮
(第二炮兵工程大學(xué)專業(yè)基礎(chǔ)實(shí)驗(yàn)中心,陜西 西安 710025)
在航空航天領(lǐng)域中,大型地面測(cè)試設(shè)備測(cè)試數(shù)據(jù)具有傳輸量大、實(shí)時(shí)性要求高的特點(diǎn)。為了解測(cè)試設(shè)備與上位機(jī)的通信狀況,需采用一種面向比特級(jí)的同步通信協(xié)議,實(shí)現(xiàn)數(shù)據(jù)傳輸過(guò)程的完全透明。高級(jí)數(shù)據(jù)鏈路控制(high level data link control,HDLC)協(xié)議具有上述優(yōu)點(diǎn),同時(shí),它能保證傳遞到下一層的數(shù)據(jù)在傳輸過(guò)程中能夠被準(zhǔn)確接收,且一旦接收端接收到數(shù)據(jù),就能立即傳輸下一幀數(shù)據(jù)[1]。
HDLC的一般實(shí)現(xiàn)方法是采用專用集成電路(application specific integrated circuit,ASIC)器件和軟件編程等。采用ASIC器件設(shè)計(jì)比較簡(jiǎn)單,但靈活性較差;軟件編程方法靈活,但占用處理器資源多、執(zhí)行速度慢、實(shí)時(shí)性不易預(yù)測(cè)?,F(xiàn)場(chǎng)可編程門陣列(FPGA)采用硬件描述語(yǔ)言處理信號(hào),可以通過(guò)軟件反復(fù)編程使用,能夠兼顧速度和靈活性,還能并行處理多路信號(hào),便于實(shí)時(shí)預(yù)測(cè)和仿真,所以在FPGA中實(shí)現(xiàn)HDLC協(xié)議的功能是一種較為合適的選擇[2]。
根據(jù)課題具體要求,發(fā)送端和接收端的數(shù)據(jù)內(nèi)容是固化的,只需檢測(cè)測(cè)試設(shè)備能否與上位機(jī)進(jìn)行正常通信,所以在數(shù)據(jù)傳輸過(guò)程中可以不加CRC校驗(yàn)[3],本文將介紹一種簡(jiǎn)化HDLC協(xié)議控制器的方法。
HDLC協(xié)議是通信領(lǐng)域中應(yīng)用最廣泛的協(xié)議之一,其面向比特的高級(jí)數(shù)據(jù)鏈路控制規(guī)程,具有差錯(cuò)檢測(cè)功能強(qiáng)大、效率高和傳輸同步的特點(diǎn)[4]。在HDLC通信方式中,所有信息都是以幀的形式傳送的。HDLC幀格式如圖1所示。
圖1 HDLC幀格式Fig.1 Frame format of HDLC protocol
根據(jù)HDLC協(xié)議規(guī)定,所有信息傳輸必須以一個(gè)標(biāo)志字“01111110”開始,且以同一個(gè)標(biāo)志字結(jié)束。由開始標(biāo)志到結(jié)束標(biāo)志之間構(gòu)成一個(gè)完整的信息單位,稱為一幀。接收方可以通過(guò)搜索“01111110”來(lái)探知幀的開始和結(jié)束,從而建立幀同步。在幀與幀之間的空載期,可連續(xù)發(fā)送標(biāo)志字來(lái)作填充。
HDLC幀的信息長(zhǎng)度是可變的,可傳送除標(biāo)志字以外的任意二進(jìn)制信息。為確保標(biāo)志字獨(dú)一無(wú)二,發(fā)送方在發(fā)送信息時(shí)采用“0”比特插入技術(shù),即發(fā)送方在發(fā)送除標(biāo)志字符外的所有信息時(shí)(包括校驗(yàn)位),只要遇到連續(xù)的5個(gè)“1”,就自動(dòng)插入一個(gè)“0”;反之,接收方在接收數(shù)據(jù)時(shí),只要遇到連續(xù)的5個(gè)“1”,就自動(dòng)將其后的“0”刪掉?!?”比特插入和刪除技術(shù)使得HDLC具有良好的傳輸透明性,可傳輸任何比特代碼。
地址字段為8位,也可采用8的倍數(shù)進(jìn)行擴(kuò)展,用于標(biāo)志接收該幀的棧地址??刂谱侄螢?位或16位,發(fā)送方的控制字段用來(lái)表示命令和響應(yīng)的類別與功能。
基于FPGA實(shí)現(xiàn)的HDLC協(xié)議控制器主要包括發(fā)送和接收兩個(gè)模塊[5]。
發(fā)送端先將待發(fā)送的并行數(shù)據(jù)進(jìn)行并串轉(zhuǎn)換,然后由系統(tǒng)自動(dòng)完成編碼、“0”比特和標(biāo)志字“7E”插入,最后將處理后的數(shù)據(jù)序列傳遞到發(fā)送端口。根據(jù)前文所述,由于每一幀的數(shù)據(jù)內(nèi)容固定,因此,可將CRC結(jié)果視為固定值“E2、99”,直接將其添加到發(fā)送端數(shù)據(jù)序列即可。
2.1.1 發(fā)送模塊工作原理
設(shè)計(jì)的代碼主要由以下進(jìn)程組成:① HDLC數(shù)據(jù)發(fā)送狀態(tài)機(jī)狀態(tài)轉(zhuǎn)移進(jìn)程,完成HDLC數(shù)據(jù)發(fā)送狀態(tài)機(jī)各個(gè)狀態(tài)對(duì)應(yīng)的信號(hào)輸出,包括標(biāo)志信號(hào)和控制信號(hào);②移位寄存器進(jìn)程,通過(guò)移位實(shí)現(xiàn)數(shù)據(jù)并串轉(zhuǎn)換,并按添零要求對(duì)串行數(shù)據(jù)序列做相應(yīng)處理;③添零進(jìn)程,當(dāng)遇到連續(xù)的5個(gè)“1”時(shí),自動(dòng)進(jìn)行添零處理,最后產(chǎn)生正確的、經(jīng)過(guò)添零處理的HDLC數(shù)據(jù)序列。其部分源代碼如下[6]。
在空閑狀態(tài),發(fā)送HDLC的幀頭(7E);在地址發(fā)送狀態(tài),發(fā)送地址字節(jié)內(nèi)容(5A 4A);然后轉(zhuǎn)入控制字節(jié)發(fā)送狀態(tài),發(fā)送控制字節(jié)(54);進(jìn)入HDLC幀尾發(fā)送狀態(tài),將幀尾(7E)發(fā)送出去,發(fā)送完幀尾,轉(zhuǎn)入到空閑狀態(tài),等待新數(shù)據(jù)的到來(lái)。
2.1.2 試驗(yàn)結(jié)果和分析
發(fā)送模塊的試驗(yàn)仿真結(jié)果如圖2所示。
圖2 發(fā)送模塊仿真結(jié)果Fig.2 Simulation result for transmitting module
當(dāng)發(fā)送數(shù)據(jù)幀頭“01111110”后,起始標(biāo)志位start_flag置高,開始發(fā)送接收地址和控制字等數(shù)據(jù)內(nèi)容。數(shù)據(jù)并串轉(zhuǎn)換計(jì)數(shù)器counter1和添零計(jì)數(shù)器zero_counter開始計(jì)數(shù),發(fā)送的數(shù)據(jù)依次存入移位寄存器shift_reg。數(shù)據(jù)發(fā)送信號(hào)txd,按照預(yù)定格式向串行數(shù)據(jù)序列hdlc_tx依次賦值,實(shí)現(xiàn)數(shù)據(jù)的正確發(fā)送。
接收端首先接收同步串行數(shù)據(jù),然后由系統(tǒng)自動(dòng)完成標(biāo)志字的檢測(cè)、去“0”,再將同步串行數(shù)據(jù)轉(zhuǎn)換成1位并行方式輸出。整個(gè)系統(tǒng)收發(fā)端使用同一個(gè)全局時(shí)鐘。下面分別對(duì)接收模塊各個(gè)部分進(jìn)行介紹。
2.2.1 幀頭檢測(cè)模塊
本進(jìn)程用來(lái)檢測(cè)幀頭“7E”是否出現(xiàn),如果檢測(cè)到“7E”,則表明接收到一個(gè)完整的數(shù)據(jù);反之,則繼續(xù)接收數(shù)據(jù)[7]。
2.2.2 去“0”模塊
本進(jìn)程用來(lái)檢測(cè)接收的數(shù)據(jù)是否包含插入的“0”比特,當(dāng)檢測(cè)到插入的“0”比特后,對(duì)其進(jìn)行刪除,并進(jìn)行數(shù)據(jù)串并轉(zhuǎn)換。
2.2.3 接收控制模塊
本進(jìn)程用于接收過(guò)程的控制,主要包括通過(guò)檢測(cè)是否出現(xiàn)幀頭來(lái)判斷接收的數(shù)據(jù)是否為有效幀,以及產(chǎn)生接收使能信號(hào)。其部分VHDL代碼如下。
2.2.4 試驗(yàn)結(jié)果和分析
整個(gè)接收模塊的試驗(yàn)仿真結(jié)果如圖3所示。
圖3 接收模塊仿真結(jié)果Fig.3 Simulation result for receiving module
當(dāng)接收的串行數(shù)據(jù)出現(xiàn)幀頭“01111110”時(shí),幀有效信號(hào)被拉高,開始進(jìn)行串并轉(zhuǎn)換,并將接收數(shù)據(jù)放入到接收緩存中,實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)。
針對(duì)某型地面測(cè)試設(shè)備通信測(cè)試卡的技術(shù)要求,文中提出了一種利用FPGA簡(jiǎn)化HDLC協(xié)議控制器的設(shè)計(jì)方案,并利用Altera公司的EP2C70F67218芯片來(lái)實(shí)現(xiàn)。
與傳統(tǒng)的HDLC協(xié)議的實(shí)現(xiàn)方法相比,該控制器更加簡(jiǎn)單可靠;且由于數(shù)據(jù)幀傳輸過(guò)程中沒(méi)有采用標(biāo)準(zhǔn)的CRC校驗(yàn),使得數(shù)據(jù)傳輸速度更快。軟件仿真和代碼調(diào)試證明,本控制器能夠應(yīng)用于通信測(cè)試卡的測(cè)試,具有一定推廣價(jià)值。
[1]黃國(guó)強(qiáng).HDLC協(xié)議的FPGA實(shí)現(xiàn)及其在通信系統(tǒng)的應(yīng)用[J].五邑大學(xué)學(xué)報(bào),2008(22):40-44.
[2]徐濤.基于PCI的HDLC協(xié)議處理器的設(shè)計(jì)與優(yōu)化[D].南京:東南大學(xué),2005.
[3]劉巖俊,閆海霞.HDLC通訊協(xié)議中CRC的應(yīng)用[J].電子測(cè)量技術(shù),2010(3):21-23.
[4]李曉娟.基于FPGA的HDLC設(shè)計(jì)實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2007(6):35-37.
[5]應(yīng)三叢.基于FPGA的HDLC協(xié)議控制器[J].四川大學(xué)學(xué)報(bào):自然科學(xué)版,2008(40):116-120.
[6]潘松,王國(guó)棟.VHDL實(shí)用教程[M].成都:電子科技大學(xué)出版社,1999:158-169.
[7]徐欣,于紅旗,易凡,等.基于FPGA的嵌入式系統(tǒng)設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2005:79-102.