异步通信起始位正确检测的VHDL实现.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
异步通信起始位正确检测的VHDL实现

异步通信起始位正确检测的VHDL 实现 概述 随着电子设计自动化(EDA)技术的发展,可编程逻辑器件FPGA/CPLD 已经在许多方面得到了广泛应用,而UART(通用异步收发器) 是在数字通信和控制系统中广泛使用的串行数据传输协议。因此越来越多用户根据自己的需要,以EDA 技术作为开发手段,用一块FP GA/CPLD 设计出符合自己需要的UART 芯片。基于FPGA/ CPLD 的UART 设计在诸多文献中都有论述,在此不再对UART 整个功能 模块实现做太多的论述。本文着重分析UART 接收器起始位的检测。 3 倍频采样的缺陷 首先,串行异步通信规定了字符数据的传送格式。每一帧数据由起始位、数据位、奇偶校验位、停止位和线路空闲状态组成,格式 如图1 所示。一般情况起始位为1 位,数据位为5、6、7 或8 位、奇偶校验位为1 位,停止位为1、1.5 或2 位。其中的起始位和停止 位就是用来实现字符的同步。在空闲状态,传送线为逻辑“1”状态。数据的传送总是以一个“起始位”开始的,接着是要传送的若干数据位,低位 先行,最后是一个“1”状态的“停止位”;那么,当接收器检测到一个“1” 向“0”的跳变时,便视为可能的起始位。起始位被确认后,就知道发送器 已开始发送,当接收了已协议好的位数后并接收到字符帧中停止位就是一帧字符数据已发送完毕。这样,接收器就知道发送器何时开始 发送数据和何时结束发送数据。 图1 异步通信字符帧格式 要提高接收器的接收准确性,减少误码率,必须要用比数据波特率高n 倍(n≥1)的速率对数据进行采样。文献2 中采用了非常规的3 倍频采样方法:用3 倍频的波特率对每一位数据进行采样(如图2 所示),然后对3 次采样结果进行判决。如果3 次采样中至少有2 次为 高电平,则接收这一位数据被判决为高电平,否则,为低电平。 图2 3 倍频采样时序图 此方法刚开始给人感觉比常规的16 倍频采样准确性高,因为每一位数据都进行3 取2 的判决,而16 倍频采样对每位数据只进行一 次中间采样。然而笔者在实际应用中发现了其存在抗干扰性差,移植性差等不足。笔者在应用中自定义的异步数据帧长达21 位,应用环 境是涡轮工作间。在这样条件下,3 倍频采样比在良好的实验室环境性能差了很多,误码率很高。 经分析代码,发现3 倍频采样方法在检测异步数据起始位没有任何的抗干扰处理。如果在接收线上存在干扰信号,即使是一个很窄 负脉冲干扰,接收器也会误判为是数据帧的起始位,从而产生采样时钟进行后续的数据采样。图3 所示为存在干扰信号时,检测起始位 信号时序仿真波形。图中COLCK3-IN 是3 倍频采样时钟,CLOCK1-IN 是数据波特率,DATAIN 是接收线上的数据。从图中看出,干扰 信号后,COLCK3-IN 时钟产生,接收器接收数据。可见接收到的数据都是错误数据。简单说,文献2 中所论述方法不能识别真假数据起 始位。再从程序可移植性来说,3 倍频采样时钟是用三个数值进行计数判断而得,当波特率改变,其数值都要做相应改变,这就增加了程 序的修改难度。 图3 存在干扰信号时3 倍频采样时序图 16 倍频采样起始位的检测 3 倍频采样方法无法识别真假数据起始位,导致其抗干扰性差,准确性得不到保证。笔者抛弃非常规3 倍频采样方法,采用了常规 的16 倍频采样方法:采用数据速率的16 倍进行采样,采样时钟连续采样到8 个低电平信号,可确定该低电平为真正的起始位,从而防 止干扰信号产生的假起始位现象的发生。此后,接收器每隔16 个采样时钟采样一次,并把采样到的数据作为输入数据,以移位方式存入 到接收移位寄存器。16 倍频对接收线的采样关系如图4 所示。 图4 UART 对数据的采样 起始位检测8 个连续脉冲的另一个更重要的原因是,采用 16 倍频采样的时钟,第8 个采样脉冲所对应的数据波形正好是该位数据位 波形的正中点( 以时钟上升沿采样),在该处读写数据应该是最安全点。 在设计时,充分抓住异步数据的特征进行设计:起始位为低电平、停止位为高电平、每帧数据帧结构相同。根据异步数据这些特征 就可设计出以下相应程序: process(clk16x,start) --产生clk1x 时钟进程 begin if start=0 then q=0001; elsif clk16xevent and clk16x=1 then q=q+1; end if; end process

文档评论(0)

docman126 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档