本站小編為你精心準備了HDLC協(xié)議IP核的設計參考范文,愿這些范文能點燃您思維的火花,激發(fā)您的寫作靈感。歡迎深入閱讀并收藏。
《電子設計工程雜志》2014年第十一期
1hdlc的幀結(jié)構(gòu)
首先回顧一下HDLC基本的幀結(jié)構(gòu)形式。HDLC是面向比特的鏈路控制規(guī)程,其鏈路監(jiān)控功能通過一定的比特組合所表示的命令和響應來實現(xiàn),這些監(jiān)控比特和信息比特一起以幀的形式傳送。每幀的起始和結(jié)束以"7E"(01111110)做標志,兩個"7E"之間為數(shù)據(jù)段(包括地址數(shù)據(jù)、控制數(shù)據(jù)、信息數(shù)據(jù))和幀校驗序列。幀校驗采用CRC算法,對除了插入的"零"以外的所有數(shù)據(jù)進行校驗。為了避免將數(shù)據(jù)中的"7E"誤為標志,在發(fā)送端和接收端要相應地對數(shù)據(jù)流和幀校驗序列進行"插零"及"刪零"操作。
2原理框圖
基于FPGA的HDLC協(xié)議的實現(xiàn)原理框圖如圖1所示。該框圖包括3個部分:對外接口部分、HDLC發(fā)送部分、HDLC接收部分。以下對3個部分的實現(xiàn)分別進行論述。
2.1對外接口模塊對外接口部分主要實現(xiàn)HDLC對外的數(shù)據(jù)交換。包括CPU接口、發(fā)送FIFO、發(fā)送接口、接收FIFO以及接收接口。本設計是以總線的形式實現(xiàn)HDLC與外部CPU的通信。當需要發(fā)送數(shù)據(jù)時,外部CPU通過總線將待發(fā)數(shù)據(jù)寫入FIFO(FIFO的ip核在各開發(fā)軟件中都是免費提供的,在程序中只需直接調(diào)用即可,故在此不再詳細描述)。之中。發(fā)送數(shù)據(jù)準備就緒標志(TX_DAT_OK);接收數(shù)據(jù)時,當對外接口模塊接收到數(shù)據(jù)有效信號時,根據(jù)接收模塊發(fā)來的寫信號(WR_MEM)將數(shù)據(jù)寫入接收FIFO中。接收完一幀數(shù)時向CPU發(fā)送中斷信號(INT),通知CPU讀取數(shù)據(jù)。
2.2HDLC發(fā)送模塊HDLC發(fā)送部分主要實現(xiàn)HDLC發(fā)送功能。當接收到數(shù)據(jù)準備就緒標志(TX_DAT_OK)后,向?qū)ν饨涌谀K發(fā)送讀使能(RD_MEM_EN)和讀信號(RD_MEM),通過局部總線將待發(fā)數(shù)據(jù)存入發(fā)送緩沖區(qū),在T_CLK的控制下將數(shù)據(jù)從HDLC_TXD管腳發(fā)出。數(shù)據(jù)發(fā)送模塊采用狀態(tài)機來完成發(fā)送各個階段的切換。狀態(tài)切換流程圖如圖2所示。State0狀態(tài)是發(fā)送的起始狀態(tài)也是空閑狀態(tài)。當沒有數(shù)據(jù)要發(fā)送時(TX_DAT_OK=0),程序以7E填充發(fā)送;當程序檢測到有新數(shù)據(jù)時(TX_DAT_OK=1),程序檢測7E是否發(fā)送結(jié)束如果沒結(jié)束則繼續(xù)發(fā)送7E,如果7E發(fā)送結(jié)束則狀態(tài)在下一周期切換為State1。State1狀態(tài)主要完成接收并發(fā)送數(shù)據(jù)功能,在第二個CLK周期先將讀使能和讀信號拉高,在第三個CLK周期再將其拉低,在第五個CLK周期開始讀數(shù)。在并行的數(shù)據(jù)發(fā)送PROCESS中根據(jù)CLK周期和發(fā)送計數(shù)器,將接收到的數(shù)據(jù)通過移位進行發(fā)送同時對連續(xù)‘1’的個數(shù)和發(fā)送個數(shù)進行計數(shù)。當連續(xù)‘1’的個數(shù)為5時在下一個周期插入發(fā)送‘0’,將連續(xù)‘1’的計數(shù)器清零,發(fā)送個數(shù)不變。在發(fā)送數(shù)據(jù)的同時進行CRC校驗的計算。幀校驗序列字段使用CRC-16,對兩個標志字段之間的整個幀的內(nèi)容進行校驗。CRC的生成多項式為X16+X12+X5+1,對在校錯范圍內(nèi)的錯碼進行校驗。標志位和按透明規(guī)則插入的所有‘0’不在校驗的范圍內(nèi)。程序設計中的CRC校驗算法的原理框圖如圖3所示。State3狀態(tài)主要完成發(fā)送字尾,發(fā)送完成后直接轉(zhuǎn)入state0。
2.3HDLC接收模塊接收模塊接收到一個非“7E”字節(jié)時,即判定為地址數(shù)據(jù),直到再次接收到“7E”即判定為接收到了一個完整的一幀數(shù)。當接收到一個非“7E”數(shù)據(jù)后就通過內(nèi)部數(shù)據(jù)總線(DAT_OUT_BUS)傳送給接口模塊,接口模塊根據(jù)FRAME_LENGTH和DAT_VALIDITY來判斷數(shù)據(jù)幀的長度和有效性。接收數(shù)據(jù)個階段的狀態(tài)切換流程如圖4所示。在State0狀態(tài)程序判斷接收到的數(shù)據(jù)是否為7E,如果為7E,則表明已收到了幀頭,狀態(tài)切換到State1。在State1狀態(tài)程序接收到的下一個數(shù)不是7E則表明收到了地址數(shù)據(jù),將狀態(tài)機切換到State2。在State2狀態(tài)判斷是否收到字尾,如果不是字尾則將接收的數(shù)據(jù)存入接收緩沖區(qū)同時啟動寫數(shù)據(jù),將接收到的數(shù)據(jù)通過總線寫入接收fifo。在收數(shù)的過程中同時進行刪除‘0’的操作,即當收到連續(xù)5個1時將下一個‘0’主動刪除。當收到字尾時對地址數(shù)據(jù)、控制數(shù)據(jù)和信息數(shù)據(jù)
3仿真與應用
的CRC校驗結(jié)果與最后兩個字節(jié)進行比對形成數(shù)據(jù)有效標志(DAT_VALIDITY)。根據(jù)上述設計,在QuartusII9.0上對發(fā)送數(shù)據(jù)和接收數(shù)據(jù)進行了仿真如圖5、6所示。從仿真波形可以看出發(fā)送模塊能夠?qū)IFO中的數(shù)按照設計的波形輸出到HTXD管腳;接收模塊能夠正確的將HRXD管腳的波形數(shù)據(jù)解出來并存入接收緩沖區(qū)中,接收完成后給接口模塊發(fā)出END標志。根據(jù)上述設計方法,已成功地在可編程邏輯芯片上實現(xiàn)。FPGA芯片選用的是Altera公司的Cyclone系列FPGA:EP1C6T144。
4結(jié)束語
上述詳細介紹了一種基于FPGA的HDLC協(xié)議IP核的方案及設計實現(xiàn)方法。根據(jù)本文介紹的實現(xiàn)方法設計出的HDLC接口板已應用于某雷達天線的同步引導數(shù)據(jù)的收發(fā)通信鏈路中,成功實現(xiàn)了雙向數(shù)據(jù)通信。應用結(jié)果表明該方法具有簡單實用、性能可靠以及成本低等特點。能夠廣泛應用于HDLC協(xié)議應用場合。
作者:閆軍虎張明社郗海燕單位:中國電子科技集團公司第39研究所