<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > HDLC控制協(xié)議的FPGA設計與實(shí)現

HDLC控制協(xié)議的FPGA設計與實(shí)現

作者: 時(shí)間:2005-10-07 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:設計了一種基于FPGA的HDLC協(xié)議控制系統?該系統可有效利用FPGA片內硬件資源,無(wú)需外圍電路,高度集成且操作簡(jiǎn)單。重點(diǎn)對協(xié)議的CRC校驗及“0”比特插入模塊進(jìn)行了介紹,給出了相應的VHDL代碼及功能仿真波形圖。

關(guān)鍵詞:高級數據鏈路控制; 現場(chǎng)可編程門(mén)陣列; 循環(huán)冗余碼校驗

1 引言

HDLC(High Level Data Link Control)協(xié)議是通信領(lǐng)域中應用最廣泛的協(xié)議之一,它是面向比特的高級數據鏈路控制規程,具有差錯檢測功能強大、高效和同步傳輸的特點(diǎn)。目前市場(chǎng)上有很多專(zhuān)用的HDLC芯片,但這些芯片大多因追求功能的完備,而使芯片的控制變得復雜。實(shí)際上,對于某些特殊場(chǎng)合的特殊用途(如手持式設備),我們只需選擇HDLC協(xié)議中最符合系統要求的部分功能,設計一種功能相對簡(jiǎn)單、使用靈活的小型化HDLC協(xié)議控制器。

另一方面,隨著(zhù)深亞微米工藝技術(shù)的發(fā)展,FP-GA(Field Programmable Gate Array)芯片的規模越來(lái)越大,其單片邏輯門(mén)數已超過(guò)上百萬(wàn)門(mén)。同時(shí)它還具有設計開(kāi)發(fā)周期短、設計制造成本低、可實(shí)時(shí)在線(xiàn)檢驗等優(yōu)點(diǎn),因此被廣泛用于特殊芯片設計中。本設計中采用Altera公司的FLEX10K芯片EPF10K20RC240-3來(lái)實(shí)現HDLC協(xié)議控制器。

2?。龋模蹋脜f(xié)議簡(jiǎn)介

在HDLC 通信方式中,所有信息都是以幀的形式傳送的,HDLC幀格式如表1所列。

表1 幀格式示意圖

標志字 地址段 控制段 信息段 CRC校驗 標志字
01111110 8bit/16bit 8bit/16bit 可變長(cháng)度 16bit 01111110

(1) 標志字

HDLC協(xié)議規定,所有信息傳輸必須以一個(gè)標志字開(kāi)始,且以同一個(gè)標志字結束,這個(gè)標志字是01111110。開(kāi)始標志到結束標志之間構成一個(gè)完整的信息單位,稱(chēng)為一幀。接收方可以通過(guò)搜索01111110來(lái)探知幀的開(kāi)始和結束,以此建立幀同步。在幀與幀之間的空載期,可連續發(fā)送標志字來(lái)做填充。

(2) 信息段及“0”比特插入技術(shù)

HDLC幀的信息長(cháng)度是可變的,可傳送標志字以外的任意二進(jìn)制信息。為了確保標志字是獨一無(wú)二的,發(fā)送方在發(fā)送信息時(shí)采用“0”比特插入技術(shù),即發(fā)送方在發(fā)送除標志字符外的所有信息時(shí)(包括校驗位),只要遇到連續的5個(gè)“1”,就自動(dòng)插入一個(gè)“0”;反之,接收方在接收數據時(shí),只要遇到連續的5個(gè)“1”,就自動(dòng)將其后的“0”刪掉?!埃啊北忍夭迦牒蛣h除技術(shù)也使得HDLC具有良好的傳輸透明性,任何比特代碼都可傳輸。

(3) 地址段及控制段

地址字段為8位,也可以8的倍數進(jìn)行擴展,用于標識接收該幀的棧地址;控制字段為8位,發(fā)送方的控制字段用來(lái)表示命令和響應的類(lèi)別和功能。

(4) CRC校驗

HDLC采用16位循環(huán)冗余校驗碼(CRC-16)進(jìn)行差錯控制,其生成多項式為

x16+x12+x5+1  

HDLC差錯校驗指對整個(gè)幀的內容作CRC循環(huán)冗余校驗,即對在糾錯范圍內的錯碼進(jìn)行糾正,對在校錯范圍內的錯碼進(jìn)行校驗,但不能糾正。標志位和按透明規則插入的所有“0”不在校驗的范圍內。

3?。龋模蹋脜f(xié)議的FPGA實(shí)現

基于FPGA實(shí)現的HDLC協(xié)議控制器包括接收和發(fā)送兩個(gè)模塊,其總體結構如圖1所示。

發(fā)送端先將待發(fā)送的并行數據進(jìn)行并/串轉換,然后由系統自動(dòng)完成CRC編碼、“0”比特插入和標志字插入,再將處理后的數據按同步串行傳輸方式發(fā)送;接收端先接收同步串行數據,然后由系統自動(dòng)完成標志字的檢測、去“0”及CRC校驗,再將同步串行數據轉換成8位并行方式輸出。整個(gè)系統收發(fā)端使用同一個(gè)全局時(shí)鐘。下面分別對關(guān)鍵部分進(jìn)行介紹。

圖2

3.1 并/串及串/并轉換模塊

數據發(fā)送時(shí),為了平滑處理機和HDLC協(xié)議控制器之間的數據傳輸速率,發(fā)送端配有一個(gè)258的FIFO作為兩者的接口模塊,該模塊可將數據總線(xiàn)送入的并行數據轉換成串行數據輸出。同樣,接收端也配有一接收FIFO,可將接收到的數據進(jìn)行串并轉換并送入數據總線(xiàn)。

3.2 CRC校驗

HDLC協(xié)議使用循環(huán)冗余校驗,在發(fā)送端對信息進(jìn)行CRC編碼,其生成多項式為

g(x)=x16+x12+x5+1   

CRC校驗模塊實(shí)際為根據生成多項式所設計的編碼電路。根據循環(huán)系統碼編碼原理,該編碼電路實(shí)際上是乘x16除g(x)的電路,其示意圖如圖2所示。電路的工作過(guò)程如下:

(1)16級移位寄存器的初始狀態(tài)全清零,門(mén)1開(kāi)、門(mén)2關(guān),然后進(jìn)行移位。信息位移入編碼電路后,一方面經(jīng)或門(mén)輸出,一方面則自動(dòng)乘以x16后進(jìn)入除g(x)除法電路,從而完成乘x16除g(x)的功能;

(2)信息位全部移入編碼電路后除法完成,此時(shí)16位移位寄存器中的內容就是除法的余式的系數,即校驗元;

(3)門(mén)1關(guān)、門(mén)2開(kāi),再經(jīng)過(guò)16次移位后,把移位寄存器的校驗元全部輸出;

(4)門(mén)1開(kāi)、門(mén)2關(guān),送入第二組信息組重復上述過(guò)程。

CRC編碼器的核心VHDL源代碼如下:

......

D?0?<=din xor D(15);?

for i in 0 to 3 loop

D(i+1)<=D(i)?

end loop;

D(5)<=D(4) xor D(15) xor din;

for i in 5 to 10 loop;

D(i+1)<=D(i);?

end loop;

D(12)<=D(11) xor D(15) xor din;

for i in 12 to 14 loop

D(i+1)<=D(i);?

end loop;

......

發(fā)送端通過(guò)上述的CRC編碼電路產(chǎn)生16比特的校驗位。接收方通過(guò)CRC譯碼檢驗該幀信息是否傳送出錯。在滿(mǎn)足系統要求的情況下,CRC譯碼只檢錯,不糾錯。其功能示意圖如圖3所示。

輸入信息通過(guò)16比特的移位寄存器后,一路作為數據信息輸出,另一路流入CRC編碼器對信息進(jìn)行編碼,并產(chǎn)生16比特校驗位。當信息位全部移出后,16比特移位寄存器中的信息即為發(fā)送端發(fā)送的16位CRC校驗位,CRC編碼器(16Bit)的內容為接收到的信息根據生成多項式g(x)所生成的16比特校驗碼。然后將兩個(gè)寄存器進(jìn)行比較,如果內容相同,說(shuō)明信息傳送正確;否則報錯,丟棄該幀。

3.3 “0”比特插入及刪除模塊

發(fā)送端信息經(jīng)CRC編碼后,要進(jìn)行插“0”操作,即遇到連續的5個(gè)“1”時(shí)在其后插入一個(gè)“0”;同樣,接收端同步建立后提取出的信息要去“0”,即遇到連續的5個(gè)“1”時(shí)要將其后的“0”去掉。

去“0”模塊的VHDL代碼如下:

......

if din=“1” then

if cnt=5 then

cnt:=0;

end if;

cnt:=cnt+1;

else

cnt:=0;

end if;

if cnt=5 then

zero del<=′0′;

else

zero del<=′1′;

end if;

......

去“0”模塊的功能仿真波形如圖4所示,其中din是提取同步后的信息,clk是信息時(shí)鐘,dout是去“0”后的信息,clk out是去“0”操作后的信息時(shí)鐘。從圖4中可看出,去“0”前的信息為“1111101”,通過(guò)去“0”操作后,信息為“111111”,將5個(gè)“1”后的“0”去掉了。

4 結束語(yǔ)

本文提出了一種基于FPGA的HDLC協(xié)議控制器設計方案,并利用Altera公司的FLEX10K芯片EPF10K20RC240-3來(lái)實(shí)現,占該芯片內部單元的70%左右。實(shí)踐表明,該協(xié)議控制器操作簡(jiǎn)單、使用靈活,能夠很好地應用于各種小型通信設備。本系統的硬件實(shí)現采用VHDL設計,通過(guò)建立VHDL行為模型和進(jìn)行VHDL行為仿真,可以及早發(fā)現設計中潛在的問(wèn)題,縮短了設計周期,提高了設計的可靠性和效率。



關(guān)鍵詞: HDLC FPGA 控制協(xié)議

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>