HDLC协议原理及FPGA实现研究

2023-06-15 23:32仇晓涛
无线互联科技 2023年3期

仇晓涛

摘要:高级数据链路控制(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