HDLC控制协议的FPGA设计与实现

2008-12-25 14:53:30来源: 国外电子元器件>

  1 引言

  HDLC(High Level Data Link Control)协议是通信领域中应用最广泛的协议之一,它是面向比特的高级数据链路控制规程,具有差错检测功能强大、高效和同步传输的特点.目前市场上有很多专用的HDLC芯片,但这些芯片大多因追求功能的完备,而使芯片的控制变得复杂.实际上,对于某些特殊场合的特殊用途(如手持式设备),我们只需选择HDLC协议中最符合系统要求的部分功能,设计一种功能相对简单、使用灵活的小型化HDLC协议控制器.另一方面,随着深亚微米工艺技术的发展,FP-GA(Field Programmable Gate Array)芯片的规模越来越大,其单片逻辑门数已超过上百万门.同时它还具有设计开发周期短、设计制造成本低、可实时在线检验等优点,因此被广泛用于特殊芯片设计中.本设计中采用Altera公司的FLEX10K芯片EPF10K20RC240-3来实现HDLC协议控制器.

  2 HDLC协议简介

  在HDLC 通信方式中,所有信息都是以帧的形式传送的,HDLC帧格式如表1所列.表1 HDLC帧格式示意图

  

标志字 地址段 控制段 信息段 CRC校验 标志字
01111110 8bit/16bit 8bit/16bit 可变长度 16bit 01111110

  (1)标志字 HDLC协议规定,所有信息传输必须以一个标志字开始,且以同一个标志字结束,这个标志字是01111110.开始标志到结束标志之间构成一个完整的信息单位,称为一帧.接收方可以通过搜索01111110来探知帧的开始和结束,以此建立帧同步.在帧与帧之间的空载期,可连续发送标志字来做填充.

  (2) 信息段及“0”比特插入技术 HDLC帧的信息长度是可变的,可传送标志字以外的任意二进制信息.为了确保标志字是独一无二的,发送方在发送信息时采用“0”比特插入技术,即发送方在发送除标志字符外的所有信息时(包括校验位),只要遇到连续的5个“1”,就自动插入一个“0”;反之,接收方在接收数据时,只要遇到连续的5个“1”,就自动将其后的“0”删掉.“0”比特插入和删除技术也使得HDLC具有良好的传输透明性,任何比特代码都可传输.

  

  (3) 地址段及控制段地址字段为8位,也可以8的倍数进行扩展,用于标识接收该帧的栈地址;控制字段为8位,发送方的控制字段用来表示命令和响应的类别和功能. (4) CRC校验 HDLC采用16位循环冗余校验码(CRC-16)进行差错控制,其生成多项式为 x16+x12+x5+1 HDLC差错校验指对整个帧的内容作CRC循环冗余校验,即对在纠错范围内的错码进行纠正,对在校错范围内的错码进行校验,但不能纠正.标志位和按透明规则插入的所有“0”不在校验的范围内.

  3 HDLC协议的FPGA实现

  基于FPGA实现的HDLC协议控制器包括接收和发送两个模块,其总体结构如图1所示. 发送端先将待发送的并行数据进行并/串转换,然后由系统自动完成CRC编码、“0”比特插入和标志字插入,再将处理后的数据按同步串行传输方式发送;接收端先接收同步串行数据,然后由系统自动完成标志字的检测、去“0”及CRC校验,再将同步串行数据转换成8位并行方式输出.整个系统收发端使用同一个全局时钟.下面分别对关键部分进行介绍.

  HDLC控制协议的FPGA设计与实现

  3.1 并/串及串/并转换模块

  数据发送时,为了平滑处理机和HDLC协议控制器之间的数据传输速率,发送端配有一个25×8的FIFO作为两者的接口模块,该模块可将数据总线送入的并行数据转换成串行数据输出.同样,接收端也配有一接收FIFO,可将接收到的数据进行串并转换并送入数据总线.

  3.2 CRC校验

  HDLC协议使用循环冗余校验,在发送端对信息进行CRC编码,其生成多项式为 g(x)=x16+x12+x5+1 CRC校验模块实际为根据生成多项式所设计的编码电路.根据循环系统码编码原理,该编码电路实际上是乘x16除g(x)的电路,其示意图如图2所示.电路的工作过程如下:

  (1)16级移位寄存器的初始状态全清零,门1开、门2关,然后进行移位.信息位移入编码电路后,一方面经或门输出,一方面则自动乘以x16后进入除g(x)除法电路,从而完成乘x16除g(x)的功能;

  (2)信息位全部移入编码电路后除法完成,此时16位移位寄存器中的内容就是除法的余式的系数,即校验元;

  (3)门1关、门2开,再经过16次移位后,把移位寄存器的校验元全部输出;

  (4)门1开、门2关,送入第二组信息组重复上述过程. 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;
......

  

  发送端通过上述的CRC编码电路产生16比特的校验位.接收方通过CRC译码检验该帧信息是否传送出错.在满足系统要求的情况下,CRC译码只检错,不纠错.其功能示意图如图3所示. 输入信息通过16比特的移位寄存器后,一路作为数据信息输出,另一路流入CRC编码器对信息进行编码,并产生16比特校验位.当信息位全部移出后,16比特移位寄存器中的信息即为发送端发送的16位CRC校验位,CRC编码器(16Bit)的内容为接收到的信息根据生成多项式g(x)所生成的16比特校验码.然后将两个寄存器进行比较,如果内容相同,说明信息传送正确;否则报错,丢弃该帧. 3.3 “0”比特插入及删除模块发送端信息经CRC编码后,要进行插“0”操作,即遇到连续的5个“1”时在其后插入一个“0”;同样,接收端同步建立后提取出的信息要去“0”,即遇到连续的5个“1”时要将其后的“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是信息时钟,dout是去“0”后的信息,clk out是去“0”操作后的信息时钟.从图4中可看出,去“0”前的信息为“1111101”,通过去“0”操作后,信息为“111111”,将5个“1”后的“0”去掉了.

  4 结束语

  本文提出了一种基于FPGA的HDLC协议控制器设计方案,并利用Altera公司的FLEX10K芯片EPF10K20RC240-3来实现,占该芯片内部单元的70%左右.实践表明,该协议控制器操作简单、使用灵活,能够很好地应用于各种小型通信设备.

  本系统的硬件实现采用VHDL设计,通过建立VHDL行为模型和进行VHDL行为仿真,可以及早发现设计中潜在的问题,缩短了设计周期,提高了设计的可靠性和效率.

 

关键字:FPGA  HDLC

编辑:冀凯 引用地址:http://www.eeworld.com.cn/FPGA/2008/1225/article_403.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
FPGA
HDLC

小广播

独家专题更多

TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 

夏宇闻老师专栏

你问我答FPGA设计

北京航空航天大学教授,国内最早从事复杂数字逻辑和嵌入式系统设计的专家。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved