打印

FPGA实现HDLC协议

[复制链接]
2423|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xjsxjtu|  楼主 | 2013-1-22 10:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xjsxjtu 于 2013-1-22 10:37 编辑

HDLC(High Level Date Link Control)协议是通信领域中应用最广泛的协议之一,它是面向比特的高级数据链路控制规程,具有差错检测功能强大、高效和同步传输的特点。目前市场上有很多专用的HDLC芯片,但这些芯片大多控制复杂,通道数目有限;另一方面,专用芯片的使用会有效增大PCB板面积,不利于设备的小型化,而且带来高成本等问题。FPGA能对任意数据宽度的信号进行处理,内部的功能模块可以并行处理。因此,采用FPGA技术设计HDLC协议控制器可以均衡整个系统的负荷,实现多通道的高性能HDLC协议控制器,保证通信的可靠性。同时它还具有设计开发周期短、设计制造成本低、可实时在线检验等优点

  
1 HDLC协议简介
  在HDLC通信方式中,所有信息都是以帧的形式传送,HDLC帧格式,如表1所示。


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

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

  
 (3)地址段及控制段。
  地址字段为8位,也可以8的倍数进行扩展,用于标识接收该帧的栈地址;控制字段为8位,发送方的控制字段用来表示命令和响应的类别和功能。

  
(4)帧校验。
  HDLC采用16位循环冗余校验码(CRC-16)进行差错控制,其生成多项式为x16+x12+x5+1,差错校验指对整个帧的内容作CRC循环冗余校验,即对在纠错范围内的错码进行纠正,对在校错范围内的错码进行校验,但不能纠正。标志位和按透明规则插入的所有“0”不在校验的范围内。

  
2 HDLC协议的FPGA实现
  平台为确保满足高速通讯、多通道收发、功能易于扩展配置的任务要求,中心控制器采用了以高性能的CPU数据处理核心、采用FPGA设计串行通信控制器来收发多通道HDLC数据的一体化设计。

  FPGA按照HDLC协议规程,接收并存储来自集成处理器等8个独立通道的数字量。系统先将外部输入的HDLC数据流由RS485电气特性转换为TTL电平,在此过程中用光耦进行隔离,以避免与外部设备之间的相互干扰,并且RS485芯片与光耦器件的相关电源使用由电气供给的独立5 V和5 V地。 HDLC协议总体结构框图,如图2所示,每个控制模块由时钟控制、编码/冲突检测、发送和接收FIFO等功能模块组成。在发送方向和接收方向,各有一个128 bit的FIFO,用于串行通道和CPU总线接口之间的数据缓冲。发送是接收的逆过程,这里以HDLC数据接收为例进行说明。

  FPGA串行通信控制器接收HDLC数据的原理为:首先,将接收到的数据帧的消息字段和附加的状态字段移入,然后根据选定的寻址模式,对接收帧中的目的地址进行识别,确认数据帧的发送地址是否为本设备(站地址=77H),是本设备数据帧则进行接收数据并存储在FIFO中,当接收数据帧结束时,发出中断信号给CPU,请求接收HDLC数据。

  目的地址不是本设备的数据帧将被抛弃,流程图如图3所示。

相关帖子

沙发
GoldSunMonkey| | 2013-1-22 22:05 | 只看该作者
要是能给代码就好了

使用特权

评论回复
板凳
lxAPP| | 2013-1-23 22:14 | 只看该作者
GoldSunMonkey 发表于 2013-1-22 22:05
要是能给代码就好了

需要代码啊

使用特权

评论回复
地板
GoldSunMonkey| | 2013-1-23 22:15 | 只看该作者
需要的留邮箱啊

使用特权

评论回复
5
GoldSunMonkey| | 2013-1-23 22:15 | 只看该作者
我到时候给大家留

使用特权

评论回复
6
rosalyn| | 2013-12-2 23:44 | 只看该作者
能给代码吗,现在学一门课程,需要用

使用特权

评论回复
7
痴小吃| | 2015-6-29 10:26 | 只看该作者
有代码吗?可否发一份给参考一下。jsqgd1990@163.com

使用特权

评论回复
8
qzhzh607| | 2015-7-4 13:41 | 只看该作者
给个代码学习学习,谢谢

使用特权

评论回复
9
buddy218| | 2017-4-6 12:22 | 只看该作者
代码可以也发我一份吗  谢谢     boyutristan@gmail.com

使用特权

评论回复
10
buddy218| | 2017-4-6 12:23 | 只看该作者
痴小吃 发表于 2015-6-29 10:26
有代码吗?可否发一份给参考一下。

可以给我一份代码吗?  学习一下   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

328

主题

1073

帖子

2

粉丝