仇曉濤



摘要:高級數據鏈路控制(HDLC)協議是在數字通信領域中廣泛應用的協議之一,用以在遠程用戶之間實現資源共享和信息交互。HDLC協議是一種面向比特流的數據鏈路層協議,其特點有高效性、可靠的透明傳輸以及強大的差錯檢測功能。文章介紹了HDLC協議的幀結構,并研究了HDLC協議在發送端如何組幀以及接收端實現解幀的過程,提出一種利用FPGA編程實現HDLC協議的硬件處理方法,將編寫的代碼下載到Xilinx FPGA芯片中并測試通過,證實了HDLC協議利用FPGA實現的可行性。與HDLC專用芯片相比,該方法可靠性高、靈活性好以及實現簡單,具有良好的應用前景。
關鍵詞:HDLC協議;FPGA;CRC校驗
中圖分類號:TN919.1? 文獻標志碼:A
0 引言
高級數據鏈路控制(High-level Data Link Control,HDLC)協議是在數字通信領域中廣泛使用的協議之一,用以實現遠程用戶間資源共享以及信息交互。HDLC協議是一種面向比特流的數據鏈路層協議,其特點有高效性、可靠的透明傳輸以及強大的差錯檢測功能。由于市場上的HDLC專用芯片考慮到功能的完整性和經濟性,這就使得控制芯片的處理操作變得較為復雜。針對某些特定場合的通信應用場景,本研究只采用了HDLC協議中最符合系統要求的部分功能,設計了一種應用靈活、功能相對簡單的小型化HDLC協議控制器。本設計中采用Xilinx公司的K7芯片系列XC7K480T來實現HDLC協議[1]。
1 HDLC協議簡介
HDLC協議的優點包括數據報文傳輸具有可靠性、高速性、透明性和靈活性等特點;協議以最基本的比特流進行傳輸,不需要數據必須是規定的字符集;透明傳輸使用的“0”比特插入法便于實現。因此,目前很多計算機網絡設計及數字通信領域中涉及的數據鏈路層普遍使用HDLC協議[2]。HDLC協議是一種面向比特流的數據鏈路層協議,采用統一的幀結構形式進行數據的傳輸,HDLC幀結構如表1所示[2]。HDLC幀協議中每幀數據以標志字段“01111110”作為幀頭開始,又以標志字段“01111110”作為幀尾結束,標志字段“01111110”具有指示幀起始和終止以及幀同步的作用。為了避免引起歧義,標志字段“01111110”不允許出現在幀的內部。為了保證標志字段“01111110”的唯一性而又兼顧幀內數據的透明傳輸,在發送數據幀時采用‘0比特插入法來解決。“0”比特插入法即在發送端發送數據時檢查所有的字段(除幀頭和幀尾外),一旦發現發送的數據比特流中有連續的5個“1”出現時,就自動在其后插入1個“0”,然后繼續發送后續的比特流。接收端則進行相反的操作,一旦識別出幀標志字段“01111110”之后的比特流不是“01111110”則啟動接收程序:若監測出連續5個“1”和1個“0”,則自動刪除該“0”,以恢復原來的比特流;若識別出連續6個“1”,表示數據結束,完成該數據幀的接收。地址字段通常用在多點鏈路中,用來存放從站的地址。HDLC定義了3種不同的幀:信息幀、監督幀和無編號幀,可以根據控制字段來區分,控制字段使用前兩位用來區別不同格式的幀;信息字段為待傳輸的數據,其包含了用戶數據的所有比特序列;幀校驗字段包括地址字段、控制字段和信息字段的校驗和,但不包括標志字段,該字段一般使用的是16 bit的CRC校驗序列。針對某些特殊的應用場景,可以不使用幀結構中的地址字段和控制字段,可以簡化HDLC幀結構。
2 HDLC的FPGA實現
隨著FPGA功能的日益強大,可以將各種不同功能的應用封裝成IP核集成在FPGA中實現,用于滿足不同應用場景的需求。因此,也可以通過VHDL語言編程[3],然后下載到FPGA中來實現HDLC協議。由于FPGA器件具有可重復編程和高集成度的特點,既能靈活地使用同時還兼顧了編程速度,在數字電路設計領域得到了廣泛的應用。
2.1 HDLC協議實現的總體結構
基于上述對HDLC協議原理的分析,進一步細分了HDLC協議的功能模塊,本研究采用了不同功能的子模塊來實現HDLC協議。
HDLC協議實現的總體結構如圖1所示[4-5]。HDLC功能主要包括發送組幀模塊和接收解幀模塊。發送組幀模塊包括產生標志字段“01111110”、數據的并串轉換移位、CRC序列生成器、0比特插入等功能;接收解幀模塊包括搜索標志字段“01111110”、0比特刪除、CRC校驗、數據的串并轉換移位等功能。
2.2 發送組幀模塊設計
發送組幀模塊采用有限狀態機結構的設計模式,狀態機的狀態包括send_idle,load_flag,shift_flag,load,shift,crc1,crc2。復位時狀態機運行在send_idle狀態,主要是初始化各個信號值,load_flag狀態主要是產生標志字段“01111110”,shift_flag狀態主要是處理數據并發送出去,load狀態主要是根據輸入的數據序列計算16位的CRC校驗碼,并存儲起來,crc1和crc2主要是對計算好的CRC值以倒序的方式進行賦值。
在發送端對數據進行組幀處理時(標志字段“01111110”除外),模塊內部以計數器方式統計發送的連續“1”的個數,當計數器值計數到“5”時,后續則輸出一個“0”發送,并且將計數器進行清零;如果計數器值沒有計數到“5”時,且有數據“0”輸出,也要進行計數器清零,這樣的處理操作完成了發送組幀模塊中的插入“0”的功能。
CRC校驗字段采用的是16位的CRC校驗碼,是基于G(x)=x16+x12+x5+1的生成多項式產生的。發送的數據經過CRC運算并將運算結果附在數據后面,如若CRC的二進制數值中出現5個連續的“1”也要進行插“0”操作。
為了保證通信雙方能夠有效檢測到幀頭,避免出現誤判的情況,在發送數據時,可以發送兩個或者多個幀頭標志字段“01111110”。
2.3 接收解幀模塊設計
接收解幀模塊同樣采用有限狀態機結構的設計模式,狀態機的狀態包括:search,shift_flag,shift_add1,shift_add2,shift_data,load_last1,crc。
search狀態主要是用來搜索數據序列中的幀頭標志字段“01111110”,這里采用8bit移位寄存器進行搜索幀頭標志字。首先是右移寄存器1位,將最低位的數據移出,然后將接收的數據放在寄存器的最高位,存儲接收的數據,依次右移寄存器,當寄存器中的數據變為“01111110”時,就判定為搜索到了幀頭標志字。
當在search狀態中檢測到幀頭標志后,狀態機就跳轉至shift_flag狀態,并且在該狀態中出現有效數據后,進入shift_data狀態。此狀態包括對數據序列的刪“0”處理、產生16位的CRC校驗碼、獲取有效數據并存入RAM。
當在shift_data狀態中檢測到幀尾標志時,狀態機進入CRC狀態,該狀態主要是將本地產生的CRC校驗碼與原始數據序列中的CRC進行比對,并判斷結果是否一致,以此來判斷數據傳輸的過程中是否產生了錯誤。
3 FPGA實現運行結果
使用硬件描述語言VHDL進行編程,將編譯好的代碼程序下載到Xilinx FPGA XC7K480T中[1]。測試時,在發送端,將8個字節的十六進制數據0x22寫入RAM,通過Vivado的在線邏輯分析儀進行觀察,發送組幀模塊的運行結果如圖2所示,接收解幀模塊的運行結果如圖3所示。
通過硬件測試,接收端可以正確接收到8個字節的數據0x22,數據序列中發送的CRC校驗碼為0x83CE。
4 結語
本研究介紹了HDLC協議,并分析了其具體功能的實現,在此基礎上使用硬件描述語言VHDL語言設計了HDLC協議的發送和接收模塊,并將代碼下載到Xilinx FPGA XC7K480T芯片中測試通過,證實利用FPGA實現HDLC協議的可操作性。還可以根據實際應用場景的需求對代碼進行更改以適應不同的配置,能兼顧速度和靈活性或者擴展多路HDLC以滿足數量要求等。因此,在數字通信系統中,利用FPGA實現數據鏈路層的HDLC協議是一種不錯的選擇,有廣闊的應用前景。
參考文獻
[1]李云松,宋銳,雷杰,等.Xilinx FPGA設計基礎[M].西安:西安電子科技大學出版社,2008.
[2]謝希仁.計算機網絡[M].2版.北京:電子工業出版社,1999.
[3]侯伯亨,顧新.VHDL硬件描述語言與數字邏輯電路設計[M].西安:西安電子科技大學出版社,1999.
[4]張必英.基于FPGA的HDLC協議控制器的設計[D].哈爾濱:哈爾濱工程大學,2005.
[5]宋飛,李志蜀.HDLC協議在FPGA通信系統中的實現[J].計算機應用,2009(4):1092-1094.
(編輯 傅金睿)
Research on HDLC protocol principle and implementation based on FPGA
Qiu? Xiaotao
(CEC Defense Technology Company Limited, Nanjing 210000, China)
Abstract:? High-level data link control protocol is one of the most widely used protocols in the digital communication field, which is used to realize resource sharing and information interaction between remote users. It is a bit oriented high level data link control procedure, which has the characteristics of high efficiency, synchronous transmission and powerful error detection function. This paper introduces the frame structure of HDLC protocol, and studies the implementation process of framing at the sending end and deframing at the receiving end of HDLC protocol. This study proposes a hardware processing method of implementing HDLC based on FPGA. The code is downloaded to Xilinx FPGA chip and tested, which confirms the feasibility based on FPGA. Compared with the special HDLC chip, this method has the advantages of high reliability, good flexibility and simple implementation, and has a good application prospect.
Key words: HDLC protocol; FPGA; CRC