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