ETC系统中HDLC协议解码控制器的Verilog HDL实现

阅读: 评论:0

ETC系统中HDLC协议解码控制器的Verilog HDL实现
邓昌晟;刘昱;李海洋;王小松;张海英
【摘 要】电子不停车收费系统(Electronic Toll Collection,ETC)是解决目前交通拥堵问题最有效的手段.为规范ETC设计,统一国内ETC标准,我国制定了电子收费专用短程通信国家标准(Dedicated Short Range Communications,DSRC).DSRC数据链路层采用由国际标准化组织(ISO)制定的高级数据链路控制规程(High-Level Data Link Control,HDLC).文章遵循DSRC短程通信协议数据链路层标准规范,采用硬件描述语言Verilog HDL实现了一种基于串行结构的HDLC解码电路,并对其中'0'比特删除模块、CRC校验模块着重分析,设计较短时延的解码电路.在解码时钟为256 kHz时,可以在0.2 ms时间内完成解码和读取工作.
【期刊名称】《微型机与应用》
【年(卷),期】2017(036)019
【总页数】4页(P30-33)
【关键词】电子不停车收费系统;DSRC;HDLC;Verilog HDL;CRC
【作 者】邓昌晟;刘昱;李海洋;王小松;张海英
【作者单位】中国科学院微电子研究所 新一代通信射频芯片技术北京市重点实验室,北京100029;中国科学院大学 微电子学院,北京100049;中国科学院微电子研究所 新一代通信射频芯片技术北京市重点实验室,北京100029;中国科学院大学 微电子学院,北京100049;中国科学院微电子研究所 新一代通信射频芯片技术北京市重点实验室,北京100029;中国科学院微电子研究所 新一代通信射频芯片技术北京市重点实验室,北京100029;中国科学院微电子研究所 新一代通信射频芯片技术北京市重点实验室,北京100029;中国科学院大学 微电子学院,北京100049
【正文语种】中 文
【中图分类】TN92
不停车收费系统(ETC)由路边读写设备(Road Side Unit, RSU)、车载单元(On Board Unit, OBU)、专用短程通信技术(DSRC)组成,如图1所示。
DSRC通信协议遵循开放系统互联(Open System Interconnection, OSI)模型,将DSRC协
议分为三层模型,即应用层、数据链路层、物理层。
数据链路层需要提供向下物理层的接口,同时也要向上为应用层提供服务,为此,数据链路层需要稳定的数据传输协议。DSRC中数据链路层采用高级数据链路控制协议HDLC。HDLC是一种面向比特的高级链路层控制协议。在通信领域中 , HDLC协议是应用最广泛的协议之一,具有强大的差错检测、流量控制、高效和同步传输的功能[1]。
使用硬件编程语言实现HDLC协议是比较理想的方式,相对于软件方式实现,有着更快的执行速度,更好的时序同步性;而相对于使用专用芯片有着更好的灵活性[2]。
1.1 HDLC协议帧结构
HDLC是面向比特字节数据的传输协议,与其他数据链路层传输协议相比,HDLC协议不依赖字符集,且较利于用硬件电路实现。HDLC协议以帧格式进行数据传输,数据帧格式如表1所示[3]。
HDLC帧格式由如下几位组成:
前后导码:其格式均为二进制序列01111110(0x7E),前后导码之间为信息位。如果解码控制器收到多个连续的0x7E,则以最后一个作为帧的前导码,表示数据起始。解码控制器在接收的比特数据中到前后导码,就可以确定两个导码段中间为一帧完整的数据。
地址位:用于表示网络中发送或接收该帧的设备地址。并且用全‘1’即0xFF或者0xFFFF表示广播地址。
控制位:帧格式根据控制位的不同,将HDLC帧定义为不同类型的帧。
信息位:所需要传输的数据。字段长度取8 bit的整数倍。
帧校验位:为保证数据的正确性传输,HDLC帧校验位采用国际通行的CRC校验,根据所选的生成多项式,通常是16 bit或者32 bit的校验码。CRC校验不会对帧数据内容进行修改,但是可以通过校验是否正确来选择性接收这一帧数据[4]。
1.2 ‘0’比特插入机制
在前后导码之间的比特流数据中,如果出现了与前后导码一样的0x7E的比特数据,那么就
会被认为是帧的边界,进而使接收的数据出错。HDLC协议使用‘0’比特插入机制来避免出现误检测边界的情况。当比特流数据中出现连续的5个‘1’时,在这5个‘1’的数据之后人为地插入一个无效位‘0’。这个位只在传输时存在,在设计HDLC解码控制器时需要考虑这个数据‘0’的存在,解码时要删除这个‘0’位数据,还原真实的数据流[5]。
1.3 CRC校验
HDLC协议在每一帧数据后都加入了帧校验序列,以保证数据的正确性传输。HDLC采用循环冗余校验码(Cyclic Redundancy Check, CRC)。本设计中采用CRC-CCITT的生成多项式,即:
P(x)=x16+x15+x5+1
在HDLC协议中,除了前后导码和插入的‘0’比特无效位,所有的信息都要参与CRC校验[6]。
如图2所示,HDLC协议解码控制器采用串行结构。
HDLC解码模块在接收了来自物理层的FM0解码数据后,经过删除前后导码、删‘0’、串并转换、CRC校验、FIFO各个模块后完成解码,将解码的数据存储在FIFO中,方便外部MCU读取。
2.1 删除前后导码模块
通过到连续的01111110的标志字段来判断数据的开始与结束,接收机只有在前导码和后导码中处理有效的数据。并且接收机会将01111110的前后导码和不是前后导码中的有效数据都删除,以防止在后面的删0模块中误检测到连续的5个“1”后将后导码删除[7]。
如图3所示,删除前后导码模块通过一个标志位flag来标志数据是否有效,初始状态标志位为0,当检测到输出了01111110(0x7E)时,将标志位翻转为1;再次检测到01111110(0x7E)时将标志位翻转为0,在标志位为1时其中的数据就是后续电路需要的有效数据,并用data_start表示有效数据段。data_start位寄存器和数据位一起传入后面待处理的模块,用于标志数据流中的有效数据[8]。
2.2 ‘0’比特删除模块实现
HDLC数据中除了前后导码中会出现连续的6个1,在HDLC编码中一帧数据的有效数据中如果出现连续的5个1,则不管后面的数据是0还是1都在连续的5个1之后插入一个0以区别前后导码。所以在接收机中要通过判断有效数据中是否出现连续的5个1并且删除掉连续5个1以后的一个0[9]。
删除串行数据中的0会导致串行数据提前:当前的数据是0并且将其删除了,但是下一位的数据并没有来到。为了解决这个问题,可以设计一个足够长的FIFO来缓存接收到的串行数据,在检测到删0条件满足时就停止一位FIFO的输入,但是由于信息域长度不可知,有效数据中有多少个需要删除的0并不知道,FIFO的大小难以确定,太小的FIFO会造成数据的丢失和出错,太大的FIFO会造成过大的时钟延迟,所以用FIFO缓存不是一个理想的方案。
1 bit的串行数据需要通过串并转换模块转换为8 bit的并行数据,以方便后续CRC校验和FIFO缓存电路使用。串并转换的模块通过连续的8个D触发器实现,时钟上是通过计数器进行8分频实现。如图4所示,结合串并转换模块,可以在串并转换的同时利用D触发器的可以缓存数据的特性进行删0模块中数据的“提前”。用并行数据的低5位与0x1F做比较,如果相同就产生一个脉冲信号给用于时钟分频的计数器,这个脉冲信号可以给串并转换模块的
计数器一个暂停的信号,使得计数器停止一个时钟周期的计数,并且用于输出的D触发器不储存当前的输入值,即要被删除的0数据。这样就可以达到删0的目的。
假设一帧数据中有效的数据一共有n bit,无效的‘0’位数据有m bit,一个时钟周期时间为t,电路本身造成的其他延迟为T。则采用FIFO缓存实现‘0’比特删除模块时产生的时间延迟为:
T1=T+×t
而采用与串并转换结合的方式实现‘0’比特删除模块时产生的时间延迟为:
T2=T+m×t
当且仅当n=5×m时,T1=T2,即比特率数据的有效位全为1时,两者的延迟相等。然而实际情况中一帧数据几
乎不可能出现全1的情况,即在绝大部分的情况下T1>T2。
2.3 CRC模块实现
串行CRC校验实现较为简单,但是处理速度相对较慢,所以本设计中采用并行CRC校验,能够在一个时钟周期内完成数据CRC校验。并行CRC校验原理与串行CRC相同,由于CRC各个位之间可以独立运算,并行的CRC输入可以在一个时钟周期中完成1 B的CRC校验,这样的效果与串行CRC校验的结果是相同的,但是相比串行CRC实现延迟能够减少8倍。对于生成多项式为gx=x16+x12+x5+1,其移位寄存器如图5所示。
本文采用modelsim SE 10.0a 进行电路仿真,编写testbenc件进行仿真,模拟输入已编码的字符串0x ECF9ECF91932,其中0x32为CRC校验码。
3.1 删除前后导码模块仿真结果
如图6所示,data_in是数据输入端,data_out是数据输出端,data_start表示数据的有效位。在除去前后导码后,data_out相比data_in延迟8个串行时钟周期。则删除前后导码模块的延迟为:
T1=16t
3.2 ‘0’比特删除模块
如图7所示,data_in是串行数据输入端,data_out是并行数据输出端,counter是串并转换用于时钟分频的计数器,如图中圈出delete_on是发生‘0’删时候的标志。当发生‘0’删事件的时钟,counter会停止计数,略过这一位,同时并行时钟输出端也会相应地延迟。总的延迟周期为:T2=11t。
3.3 CRC校验模块
如图8所示,data_in是数据输入端,data_out是数据输出端,通过CRC校验模块以后data_out与data_in相比减少了后8位的校验码,并且crc_right被置高,表示CRC校验正确,会被写入后续的FIFO中。CRC模块占用一个并行周期:T3=8t。
3.4 仿真结果分析
通过解码电路,能够在FIFO输入端 rd_data 读取到解码后正确的并行数据0x ECF9ECF919。在使用256 kHz时钟时,一个时钟周期约为t=3.9 μs,因为FIFO的读取还占用了2个并行时钟周期,所以解码一共用时T=51 t个时钟周期,整个解码所占用时钟约为51×3.9 μs=199 μs。

本文发布于:2023-05-06 03:47:01,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/88687.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   解码   模块
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图