一种基于VHDL组帧接收端设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种基于VHDL组帧接收端设计

一种基于VHDL的组帧接收端设计   中图分类号:TN 文献标识码:A 文章编号:1007-0745(2009)02-00   摘要:本文提出了一种用于组帧接收端的VHDL实现方法,该方法具通用性可作为一个器件嵌入各种设计与应用当中。该实现具有很好实时性和较强抗干扰能力。   关键词: 组帧 接收 VHDL      现代通信系统中通常把要传输的信息分成若干个块来传送,每个块加上控制信息成为一帧。采用的传送方法多为串行方式,但在串行通信系统中往往遇到的最大问题是如何确定一帧的开始和结束。   在VHDL设计中规定帧的正常开始与结束用二进制串01n0(n取6表示6个连续的1)称为Flag。当设备接收到6个连续的‘1’时表示一帧的正常开始,再接收到连续的六个‘1’时表示一帧的正常结束。如设备接收到连续的7个或以上时表示非正常开始或结束[1]。接收端的端口设置如图1所示:      串行数据由data_in输入,clk_in端为同步时钟脉冲的输入端、上升沿有效。有效的数据传送信息由data_out输出,clk_out为输出同步时钟、下降沿有效,当接收到的数据有误是则由data_F输出错误号、上升沿有效。   对于Flag的判断采用状态机实现,设置了S0―S18[2、3]。初始状态为S0,当接收到‘0’时转到S1,下一时刻接收到‘1’转到S2、如接收到‘0’则转到S1。类似的如在接收到‘0’以后又连续接收到六个‘1’则转到S7,如在这六个‘1’中的任意一个时刻接收到‘0’都将在该时刻的下一时刻转到‘S0’。VHDL代码片段如下:       when s0=> data_F<=0;    if(data_in=0) then    next_state<=s1;    else    next_state<=s0;    end if;       when s1=> if(data_in=1) then    next_state<=s2;    else    next_state<=s1;    end if;   ……    when s7=> if(data_in=0) then    next_state<=s8;    else    next_state<=s9;    end if;    when s8=> if(data_in=0) then    next_state<=s10;    else next_state<=s8;    end if;    when s9=>if(data_in=0) then    next_state<=s1;    else    next_state<=s0;    end if;   S7态如接收到‘0’则转到S8态表示一个帧的正常开始,如接收到‘1’则转到S9态表示一个非正常帧开始。在S9态如接收到‘0’则转到S1态,否则转到S0态。   在S8开始接收数据,当接收到的数据是一个正常Flag时则准备接收下一帧,本如是一个非正常Flag时则准备接收下一帧并输出出错信号data_F。设计只针对与数据的接收,对于数据长度没有具体限制可方便的移植到其他系统。对于有效数据的还原由于算法的不同可在data_out端后另加设备处理。在代码片段如下:    when s10=> if(data_in=1) then    next_state<=s11;    else    next_state<=s10;    end if;   ……    when s16=> if(data_in=0) then    next_state<=s17;    else    next_state<=s18;    end if;    when s17=> if(data_in=0) then    next_state<=s1;    else    next_state<=s0;    end if;    when s18=>data_F<=1;    if(data_in=0) then    next_state<=s1;    else    next_state<=s0;    end if;   数据输出端data_out是由数据输入端data_in经一个8位的移位寄存器得到数据。移位寄存器的目的是在data_out端将Flag消除,除此之外为了将Flag消除还设置了信号enable_SC和一个计数器。当S0 、S17、S18态时enable_SC置‘1’,S8时置‘0’。计数器在enable_SC=‘0’时开始计数如计数值大于等于9则由clk_out

文档评论(0)

189****7685 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档