基于FPGA的UART通信接口设计与实现

  • 格式:pdf
  • 大小:383.93 KB
  • 文档页数:2

通用异步接收发送器UART(UniversalAsyn2chronousReceiverandTransmitter)能够在串行方式下发送和接收数据,数据传送方式只需要一对线路就能实现远距离数据通信。其以资源简单、传输距离远、易于实现等特点成为各种处理器的标准集成外设之一。在实际的应用设计中,经常要用到UART的多个主要功能,常用的标准通信波特率有9600bps、15200bps等。本文使用VerilogHDL语言将UART器件的核心功能描述成一个异步串行数字收发模块,并且在Modelsim上实现了其功能仿真。1UART原理及设计简介UART的全称是通用异步收发器(UniversalAsynchronousReceiver/Transmitter),是实现设备之间低速数据通信的标准协议。“异步”指不需要额外的时钟线进行数据的同步传输,是一种串行总线接口,只需占用2根线就可以完成数据的收发(1根接收数据,1根发送数据)。UART一帧由起始位、数据位、校验位和停止位组成。数据逐位传输,示意图如图1所示。异步通信要求发送的每一帧数据都必须按照图1给定的UART格式进行格式化。一帧数据由4部分组成,首先是起始位“0”;接着是发送的数据(这里采用8位);然后是可选的检验位来判断接收数据有无错误(这里选用奇检验);最后是停止位“1”(停止位可以为1位、1.5位和2位)。若线路上没有传输的数据,则线路始终保持为“1”,即空闲。接收端不断检测线路状态,非接收状态下如果检测到线路由“1”变为“0”(“0”至少保持8个内部时钟周期),则认为有发送数据需接收,接收器进入接收阶段。UART模块总结构如图2所示。首先,发送时按照UART帧格式,由发送写信号启动发送波特率发生器,先发送一位起始位,然后由发送波特率发生器时钟启动发送移位寄存器,将发送数据存入发送移位寄存器,并将发送一位寄存器中的数据发送,同时由发送波特率发生器时钟启动发送数据计数器,当计数器计数到第10位时,产生奇偶校验位,此时发送奇偶校验位,计数到第11位时,发送停止位,同时产生发送完成指示信号。接收时,先接收端开始检测并确认起始位,然后通知UART控制端口接收数据,开启接收波特率发生器,依靠接收波特率发生器产生的时钟信号将发送的8位数据移入接收移位寄存,同时由接收波特率发生器产生的时钟信号启动接收数据计数器,当计数器计数到第10位,也就是奇偶校验位时,判断接收到的检测奇偶校验位是否发生错误,错误则放弃将接收移位寄存器中的数据输出,正确则接着接收停止位,没有接收到停止位逻辑“1”,则标志帧错误,放弃将接收数据输出,反之,将接收数据输出,产生接收完成信号指示信号。2UART设计由图2可以看出,UART设计主要分为发送和接收2个模块组成。采用VerilogHDL硬件描述语言按照ToptoDown的思想对各个模块先分别设计然后连接起来形成总体架构。2.1发送子模块发送子模块的状态图如图3所示。

发送子模块由5个状态转换:空闲状态、发送起始位状态、发送数据状态、添加奇偶位状态和添加停止位状态。(1)空闲状态:在复位时或者在没有检测到发送写信号下降沿时,保持空闲状态。(2)发送起始位状态:在检测到发送写信号下降沿时,启动发送波特率发生器(周期为内部时钟的16倍),开始发送起始位“0”,基于FPGA的UART通信接口设计与实现何坚陈志华(暨南大学信息技术研究所,广东广州510075)摘要:介绍了基于VerilogHDL设计的UART模块,使用VerilogHDL语言将UART器件的核心功能描述成一个异步串行数字收发模块,并且在Modelsim上实现了其功能仿真。关键词:UART;异步收发器;VerilogHDL;Modelsim;仿真设计研究◆ShejiYanjiu

124机电信息2010年第30期总第276期由于在空闲状态时发送数据线处于高电平“1”状态,所以在发送起始位之后,发送数据线会产生一个下降沿,这个下降沿可以启动数据接收。(3)发送数据状态:这里采用发送8位数据,从高位到低位依次发送8位数据,发送完毕进入下一个状态。(4)添加奇偶位状态:奇/偶校验是对数据进行逐位同或/异或运算,这里采用奇校验,简单来讲,即在数据位后面添加“0”或“1”,使最后输出数据“1”的个数为奇数。(5)添加停止位状态:输出停止位“1”,进入空闲状态。2.2接收子模块接收子模块的状态图如图4所示。

接收模块也有5个状态:空闲状态、起始位接收判断是否有效状态、接收数据状态、判断奇偶校验结果状态、接收停止位并判断帧错误状态。(1)空闲状态:在复位时或者未检测到起始位时,保持空闲状态。(2)起始位接收并判断是否有效状态:在接收到接收数据线RXD的下降沿时,开始对起始位检测,如果在内部时钟前8个时钟对RXD采样都是“0”时,说明起始位有效,否则认为是抖动引起的下降沿,回到空闲状态。起始位有效后,启动接收波特率发生器,接收波特率发生器的时钟频率和发送波特率发生器的时钟周期一样,为内部时钟CLK的16倍,这是为了发送接收时钟同步。但是,光靠时钟同步是不能保证接收数据的正确,如图5接收模块时序同步示意图所示,由于发送数据每个周期发送一位数据,所以发送数据TXD的周期为发送时钟的2倍,同时RXD也是接收时钟的2倍,即内部时钟CLK周期的32倍,如果要保证在接收时钟CLK_REC上升沿时,在RXD中间部位采样第一位数据(这样的采样数据更可靠),就要求接收时钟CLK_REC选择是高电平开始启动,还是低电平开始启动,由于检测起始位用了8个CLK,如果要检测到起始位有效后在接收第一个数据RXD1中部采样数据,要求接着延时16个时钟CLK,因此,应该选择高电平启动接收时钟CLK_REC,这样就可以确保接收的数据可靠有效。(3)数据接收状态:接收数据线RXD上传送过来的8位数据,接收完毕后进入下一个状态。(4)判断奇偶校验结果状态:将RXD上接收到的奇偶校验位跟接收数据计算后的奇偶校验位比较,判断结果,如果相同,则进入下一个状态,否则回到空闲状态。(5)接收停止位并判断帧错误状态:将RXD上接收到的停止位与“1”作比较,相同则将接收数据输出,否则直接进入空闲状态。3仿真功能分析设计的仿真采用Modelsim仿真,设计对UART的功能进行了仿真。图6是接收模块仿真图,接收数据输入RXD上的数据依次为11010101、10010101、10110101,在每次接收完成一帧数据后,标志位rxrdy置“1”,在开始下一次接收时,标志位rxrdy置“0”,奇校验位和帧错误位一直为“0”,说明奇校验校验正确,帧接收数据也正确,因此,在标志位rxrdy置“1”时,输出数据,仿真结果正确可靠。图7是发射模块仿真图,在写信号(wrsig)出现下降沿时,开始发送数据,首先发送起始位“0”,然后发送8位数据10101011,接着发送奇校验位0,最后发送停止位“1”,发送完成8位数据后,txdone标志位置“1”,发送完一帧数据后,标志位paritycycle置“1”,观察输出数据tx波形,结果正确可靠。

4结语本文介绍了基于VerilogHDL设计的UART模块,采样点选择可靠,其可准确判断接收数据的起始,创新点在于接收器与接收数据同步实现,串行数据能被准确接收,并通过在ModelSim下的仿真,可下载至可编程逻辑器件中,实现UART功能。[参考文献][1]王冠,黄熙,王鹰.VerilogHDL与数字集成电路设计[M].北京:机械工业出版社,2006[2]夏宇闻.Verilog数据系统设计教程[M].北京:北京航空航天大学出版社,2008

收稿日期:2010-08-18作者简介:何坚(1968-),男,广东阳江人,工程师,研究方向:工业自动化。ShejiYanjiu◆设计研究

125