UART数据通信(发送模块部分).doc_第1页
UART数据通信(发送模块部分).doc_第2页
UART数据通信(发送模块部分).doc_第3页
UART数据通信(发送模块部分).doc_第4页
UART数据通信(发送模块部分).doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

UART数据通信摘要:UART协议是数据通信及控制系统中广泛使用的一种全双工串行数据传输协议,在实际工业生产中有时并不使用 UART的全部功能,只需将其核心功能集成即可。波特率发生器、接收器和发送器是UART的三个核心功能模块,本课程设计分成三部分,本人负责UART接受模块的设计和仿真,其余部分由另两位同学完成。本文使用Verilog语言对发送功能模块进行描述并加以整合,并利用Xilinx ISE 软件进行仿真,其结果完全符合UART协议的要求。1. UART 数据通信协议的介绍UART(即UniversalAsynchronousReceiverTransmitter通用异步收发器)是广泛使用的串行数据传输协议。UART允许在串行链路上进行全双工的通信。UART 通信接口简单,只需要两根线(本文只讨论两根线的情况,不涉及状态控制等信号) : tx 是UART 数据发送信号, rx 是UART 数据接收信号。由于没有时钟信号作为采样信号,因此在UART 的串行数据中需要增加一些额外的信息,这些信息连同数据组成UART 的数据帧格式。UART 的数据帧格式是:起始位(值为0) 、数据位(可根据需要设置成6 ,., 9 或其他位数,数据位是低位在先、高位在后)、奇偶校验位(可根据需要设置成奇校验、偶校验或无校验,本章介绍的是无校验)、停止位(停止位可有1 ,., 2 位)0。UART 的具体数据帧格式如下图所示。UART 数据帧格式起始位的意义是提醒接收方数据即将到来,请做好接收数据的准备。数据位是接收方需要接收的数据信息。奇偶校验位的意义是给接收方提供一种校验数据正确与否的方法和信息。这需要双方事先约定好是奇校验还是偶校验或者无校验。停止位是提醒接收方数据已发送完毕,如果接收方按照UART 协议没有正常接收到停止位,则说明该帧数据不完整,可以判定数据无效。2. UART 数据发送模块建模根据UART 数据通信协议, UART 数据发送模块还是比较简单的。实现过程描述如下:在空闲状态接收发送数据的指令后,在装载数据的同时,在数据的低位加上1 位的开始位0 ,在数据的高位加上1 位的停止位1 ,接着在时钟的节拍下把这10 位数据从低位到高位发送出去,最后恢复UART 数据发送模块为空闲状态。根据以上描述设计流程图,如下图所示。UART 数据发送流程图3. UART 数据接受模块UART 数据接收模块相对UART 数据发送模块来说更复杂些。下面简单的介绍一下UART 数据接收的时序分析。因为UART是异步通信,在数据采样上没有同步时钟作为参考点。结合UART 数据通信协议,UART 首先需要捕获数据线上的起始信号,在起始位后连续接收8 位数据,最后判断停止位是否有效,如果有效则表示一帧UART 数据完整接收,否则表示UART 数据帧出错(这里不考虑奇偶校验位)。由于没有传送时钟信号,所以接收方需要知道发送方发出数据的波特率。虽然知道了发送方的波特率,但由于接收方与发送方可能是两个不同的时钟源,所以时钟频率存在偏差。为了解决不同时钟的偏差,UART在接收方对采样时钟做出规定,即采样时钟是数据波特率的16 倍。上面讲到接收方接收一个数据需要采样16 次,这16 次是这样分配的:当捕获到数据线上的下降沿时开始计数,计数到第8 个采样周期时的采样数据作为接收到的数据。当计数到第16 个采样周期时,计数器归零重新计数。每计数到8 时进行数据采样。这样,只要发送方与接收方的时钟信号的频率不超过1 / 16 ,就可以正确采样数据了。4. UART分频器假设数据的波特率为p,则所需时钟的频率为16*p。以波特率p为9600为例,系统时钟为50MHz,则分频系数为50000000/(16*9600) = 325.52,取整为326。分频器Verilog HDL语言代码如下:module clkdiv(clk, clkout);input clk; /系统时钟output clkout; /采样时钟输出reg clkout;reg 15:0 cnt;always (posedge clk) /分频进程beginif(cnt = 16d162)beginclkout = 1b1;cnt = cnt + 16d1;endelse if(cnt = 16d325)beginclkout = 1b0;cnt = 16d0;endelsebegincnt = cnt + 16d1;endendEndmodule5. UART 数据发送模块仿真下面使用Xilinx ISE Design Suite 12.4对UART 数据发送模块进行仿真对工程文件进行“Simulate Behavioral Model”得到波形仿真图。0-10ns,模块复位信号r_rst_n,低电平有效(r_rst_n值为0)。(1) 波形仿真图时序分析1 0-443ns,数据接收信号w_uart_tx值为1,此时一直空闲,未发送数据。2 在443ns时刻,收到UART数据的发送指令(r_tx_order值为1),开始启动UART数据发送流程:首先是发送起始位0,接着开始发送8位数据,最后发送停止位1,然后又回到空闲状态。其中每一位需32ns。3 在443ns475ns之间发送起始位0;4 在475ns731ns之间发送8个数据位,需发送的数据r_tx_data=0010 0100,发送时,先发送低位再发送高位,发送数据的值从左到右依次是: 0010 0100 5 在731ns763ns之间发送停止位1;6 因此在443ns763ns之间,w_uart_tx的值从左到右依次是:0 0010 0100 1 ;至此,一帧UART数据发送完毕。UART数据发送忙信号w_uart_tx_buys恢复为低。同理,当发送数据r_tx_data=0000 1001时,此时w_uart_tx的值从左到右依次是:0 1001 0000 1 。设计和仿真时碰到的问题主要有:(2) 主要问题及措施问题1:在仿真过程中经常遇到一些寄存器没有被初始化,导致仿真结果不正确,这是因为if语句嵌套太复杂或循环语句使用不恰当使得寄存器初始化语句未能执行。 措施:尽量减少if语句的嵌套层数,这样可以减少阅读程序的复杂度和程序调试的复杂度,能够更容易发现错误以便及时寻找到解决方案。 问题2:在程序中使用initial过程块进行寄存器的初始化,会使源程序在下载到目标板的整合过程时不能通过。 措施:可以外接一个输入信号进行各寄存器的初始化,这样做既可以使源程序顺利下载到目标板中,又可以从通讯模块的外部对通讯模块进行控制。 问题3:在程序中如果在两个always过程块中对同一个变量进行赋值,程序将不能下载到目标板中,因为当两个always过程块中的敏感事件列表中的事件同时满足时,就会引发在两个always语句中对相同变量同时赋值而导致冲突。 措施:合并always语句块,即把引发同一变量改变的过程敏感事件用or连接起来放在一个always语句块中。6. 结束语Verilog HDL是一种硬件描述语言,用于从算法 级、门级到开关级的多种抽象设计层次的数字系统建 模,该语言最大的特点是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论