首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

UART在FPGA上的设计与实现(2)

UART在FPGA上的设计与实现(2)

1)Idle状态
复位之后,接收状态机便进入此状态等待。一旦检测到RXD为低电平,即一帧数据的起始位,状态机立即转换到Start状态,否则开始数据接收标志StartBitFlag为‘0’,状态机始终停留在该状态。正确捕获到1帧数据的起始位非常重要,它起到同步接收采样时钟的作用,是正确接收1帧数据的关键。

2)Start状态
一旦捕获到起始位,便立即转入该状态,启动一帧数据的接收流程。

3)Shift状态
起始位之后,状态机无条件的转换到Shift状态,即开始接收数据部分。接收到的每1位数据将逐位左移,实现串并转换。当接收到的数据个数达到Databit设定的数据位宽时,即转换到Parity或者Stop_1bt状态。

4)Parity状态
当完成数据位部分的接收且奇偶校验使能位ParityEn=‘1’时,则转入该状态。根据已接收的数据和选择的校验模式,UART接收模块将检查校验结果,设置相关寄存器。

5)Stop_1bit状态
在该状态下,检查RXD信号是否为高电平,否则设置错误寄存器,以表示发生了帧错误。

6)Stop_2bit状态
只有选择了2位停止位时,才会进入此状态。该状态下,需要更新各状态寄存器。持续1个波特的时间后,转换到Idle状态待命,等待捕捉新的1帧数据的起始位。

接收模块的行为仿真时序图如图5 所示。仍将UART设置为偶校验、8位数据位,1位停止位。图中rxclk为接收采样时钟信号,该时钟同步于每1帧数据的起始位。rxclkd8为rxclk延迟了半个周期的信号,以便在RXD引脚每1位的中间位置采样到稳定的电平。RxIn(RXD)引脚的信号在rxclkd8上升沿被采样。图中RxIn串行输入的数据为“00101101001”,与接收到的数据0x5A 一致,且没有校验错误,接收模块各信号仿真正确无误。


3.4 微处理器接口模块
为方便外部处理器操作,UART模块提供了专门的微处理器接口信号,包括CS、WR、CLK、ADDR 和DATA。CS为UART模块的片选信号,所有操作只有在CS为低电平才能有效,否则被忽略。WR为读写控制信号,当WR为高电平时,从UART内部寄存器读取数据,否则写数据到其寄存器。WR同时还控制双向接口DATA 的方向。当WR为高时,DATA 被设置为输出,UART内部数据被输出到DATA 接口;而WR为低时,DATA 被设置为输入,外部处理器可把数据输出到DATA接口。ADDR为地址线,用来寻址UART内部寄存器。CLK为读写时钟信号,所有的读写的操作均是在CLK的上升沿完成,该模块的仿真波形如图6所示。


4 验证测试
在Xilinx公司的FPGA XC3S500E上综合、实现后,所设计的Uart通信接口模块实际只耗用了128个寄存器和134个4输入查找表,占其可用资源比例均不到1%。将程序下载到芯片中经实际运行,数据收发正确无误,实际运行结果如图7所示。


为进一步测试串口模块长期运行的稳定性与可靠性,进行了如下实验:使用串口调试软件,定时将测试数据发送给UART,再用单片机通过UART的微处理器接口读收到的数据,然后再写回UART的发送缓冲器,如此可自动完成所设计UART模块收发功能的测试。测试结果如表1所示。可以看出,无论波特率低至9 600bps还是高达115 200bps,经大量数据收发测试,均无出现发送、接收错误,也未出现帧错误以及奇偶校验错误,表明所设计的串口通信模块长时间运行时稳定可靠。


5 结  论
本文基于FPGA 设计和实现了通信参数可在线配置的异步串行通信接口模块,将程序下载到芯片实际运行,结果表明该接口模块设计正确,运行稳定可靠,为FPGA 与其他设备的通信提供了一种可靠途径,具有较强的实用价值。同时本设计可作为FPGA 开发多串口设备的1个基本模块,通过复制基本模块,可在1片FPGA 芯片上扩展出多个串口,而数量仅与FPGA 可用资源有关,满足多串口场合的需要,开发出基于FPGA 的多串口设备,替代采用专用串口芯片的传统设计方案,降低多串口系统的复杂度,提高可靠性。
返回列表