基于FPGA实现异步串行通信-设计应用_第1页
基于FPGA实现异步串行通信-设计应用_第2页
基于FPGA实现异步串行通信-设计应用_第3页
基于FPGA实现异步串行通信-设计应用_第4页
基于FPGA实现异步串行通信-设计应用_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

精品文档-下载后可编辑基于FPGA实现异步串行通信-设计应用摘要:为了适应全数字化自动控制更加广泛的应用,采用现场可编程门阵列(FPGA)对异步串行通信控制器(UART)进行多模块的系统设计的方法,使串口通信的集成度更高。

对UART系统结构进行了模块化分解,可分为三个模块:FPGA波特率发生器控制模块、FPGA数据发送模块及数据接收模块。采用Verilog语言描述硬件功能,利用Xilinx公司的FPGA芯片,在XilinxISEDesignSuite13.4环境下进行设计、编译、综合、。采用第三方仿真工具ModelSim进行模拟仿真。

0引言

异步串行通信(UART)是一种广泛应用的串行数据传输协议,UART的要求是传输线少,可靠性高而且传输距离远。UART功能负责从总线采集数据,转换成传输格式,然后发送到串口。也负责从串口接收数据,检查和删除附加的位,并传送结果数据给总线。异步串行通信广泛的应用于军事、工业、自动控制、仪器、通信、医药、话音图像处理等众多领域。现实应用中多采用专用集成芯片实现UART功能,如8250、8250A、16450、16C451、16C551等。但在实际应用中,一般只需要UART的几个主要功能,专用芯片成本比较大且造成资源的浪费。近年来随着电子设计技术的日趋成熟,特别是FPGA在集成度和速度上的大幅提高,可以用一个芯片构成一个复杂的系统。一个芯片就能完成处理计算、通信、控制等多功能,而且成本大幅度降低。根据以上考虑,本文采用FPGA实现UART功能。

1UART通信原理

串行通信分为两种类型:同步通信方式和异步通信方式。UART即通用异步串行通信收发器。UART的一帧数据由起始位、数据位、奇偶校验位和停止位组成。数据在传输过程中是通过一个字符接一个字符进行传输来实现通信的。每一帧的信息在传送前传输线处于高电平状态。在传送一个字符信息的时候,每一个字符的接收是靠起始位来同步的,字符的前面是一位起始位,首先发送起始位为低电平,一般用下降沿通知收方传输开始,然后发送起始位之后的数据位,数据位的传送先低位后高位,字符本身由5~8位数据位组成。

数据位后面是奇偶校验位,奇偶校验位后的是停止位,标志着一帧字符结束。停止位后为高电平,为空闲位,并为下一个字符的开始传送做准备。在发送、接收数据时,数据的帧与帧之间如果有间隙,就要在停止位之后附加空闲位,停止位后面是不定长度的空闲位。停止位和空闲位都规定高电平,这样可以保证起始位开始处有一个下降沿。如图1所示。

1.1系统设计与硬件实现

异步通信允许在串行链路上进行全双工的通信。

本文把异步通信电路作为一个整体来实现,数据接收经过MAX232进行电平转换后经FPGA串口模块的RXD端输入,由FPGA进行串/并转换后,8位有效数据进入总线,再进入处理芯片。数据发送经数据处理后经由总线进入FPGA串口模块,8位有效数据在FPGA中进行并行转换为串行数据后由TXD端输出到MAX232的12管脚,在MAX232种经过电平转换后由TXD端输出,系统基本结构框图如图2所示。

帧格式采用1位开始位,8位数据位,1位停止位,波特率为115200,根据采用的帧格式,需要发送的数据为10位(1位开始位、8位数据位、1位停止位),在发送完这10位后,就应该停止发送,并使发送端电平处于逻辑1,然后等候下次的发送。

1.2FPGA波特率发生器模块

串口通信,就是RS232/RS485通信,要求通信的双方波特率等通信格式一样才可以通信成功。在电子通信领域,波特率(BaudRate)即调制速率,指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数。它是对符号传输速率的一种度量,1Baud即指每秒传输1个符号。在基于FPGA实现通用异步通信时,波特率发生器是一个必不可少的部分。波特率发生器实际上就是一个分频器,可以根据给定的系统时钟频率和要求的波特率算出波特率分频因子,算出的波特率分频因子作为分频器的分频数从而产生所需的时钟频率。在设定发送和接收使用相同的波特率的情况下,UART只需要一个波特率发生器就可以了。

系统提供的时钟频率为10MHz,数据信号的传输速率为115200Hz,波特率发生器产生的时钟对数据信号进行采样,设定对传输的数据信号进行3倍采样,则波特率发生器产生的频率为:

3×115200=345600Hz那么就可以根据给定的系统时钟和要求的波特率计算出分频因子:

1×107/345600=28.94对时钟进行28.94分频是很难实现的,因此取整数30作为分频因子。尽管这样会使得分频得到的时钟会比所需的345600Hz高3.5%,但这样微小的变化不会影响实际电路的工作。其仿真图如图3所示。

1.3FPGA数据发送模块

发送过程就是把并行总线上的数据发送到串行总线上。数据发送的过程可以分为空闲状态、加载状态、发送状态和发送完成状态。空闲状态就是UART内核复位后的空闲状态,等待加载状态。UART进入空闲状态后,当检测到发送控制信号有效时,就进行加载状态并开始进行数据的加载。加载状态就是发送模块按照串行发送的顺序将要发送的这一帧数据加载到移位寄存器内,将移位寄存器和计数器都复位,使移位寄存器和计数器的工作时钟为系统时钟。当计数器达到了计数的上,它会产生一个指示信号通知UART内核进入发送状态。UART内核状态机进入发送状态的同时要改变相应信号,这时移位寄存器时钟必须为波特率时钟,重要的是将输出信号送到RS232的发送端口TXD上。在发送状态,也需要计数器的控制,当计数器达到了计数的上,它会产生一个信号通知UART内核进入发送完成状态。当UART内核状态机进入发送状态后,并产生发送完成中断信号。这样就可以把数据从串行端口上发送出去了。发送数据和接收数据的状态转换图如图4所示。

发送一帧数据的部分程序如下:

发送一帧数据的仿真结果如图5所示:

1.4FPGA数据接收模块

数据的接收与数据的发送相比要复杂些。在数据的接收过程中,UART的接收模块首先要进行的是对起始位的检验。一般当接收的个是低电平,就标志着一个数据帧的开始,但是在一个数据帧中间也有可能包括-个低电平的位,系统有可能默认为这个低电平为起始位,这样就会产生一个“假的起始位”.所以,在数据接收的过程当中还要包括对数据起始位的判断。所以数据的接收过程可以分为空闲状态、起始位检测状态、数据位读取状态、读取停止状态、准备完成接收和停止位读取状态。在判断起始位低电平后,触发接收过程,进入数据位读取状态使串行总线的输入数据不断被读取并且保存在寄存器内,计数器也到达计数的上,接收完成之后并进入准备完成接收状态,UART控制器会在输出结果之前对已经接收的数据进行奇偶校验。

然后进入停止位读取状态。在每一种状态,如果使能信号无效时都转回空闲状态。UART控制器准备下的数据接收并重置控制器内的信号检测器。

在接收数据过程中,会有一些其他原因使信号产生反转。为了消除毛刺,在接收数据时,采用3选2的方法消除误差。也就是这个字符的值是至少有两次采样的值相等的值。

采用3选2方法接收数据的程序如下:

接收一帧数据的仿真结果如图6所示。

在波特率为115200情况下对UART进行仿真,结果如图7所示。通过仿真波形可以看出,设计结果正确地发送和接收一帧数据并产生相应的中断。

2结论

本文介绍了一种基于FPGA实现异步串行通信功能,采用多模块的方法实现异步串行通信功能,可以方便用户根据需要进行裁减、便于理解和调试。本文运用Verilog语言进行设计异步串行并行收发器的IP核电路。

用FPGA实现UART功能,充分利用了FPGA的剩余资源,相对

温馨提示

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

评论

0/150

提交评论