FPGA UART串口协议

本篇博客主要是使用Verilog在FPGA实现UART,UART协议很简单,在单片机还是各种嵌入式设备上都是非常容易实现的,这篇文章的目的是借助UART,通过UART的收发协议,明白如何根据时序,借用Verilog语言来描述硬件电路,学明白这个之后对以后使用各种数据传输协议都会有很大的帮助。B站对应讲解本文视频链接

UART概念:

UART是一种异步收发传输器,其在数据发送时将并行数据转换成串行数据来传输,在数据接收时将接收到的串行数据转换成并行数据,可以实现全双工传输和接收。它包括了RS232、RS449、RS423、RS422 和RS485 等接口标准规范和总线标准规范。换句话说,UART 是异步串行通信的总称。而RS232、RS449、RS423、RS422 和RS485 等,是对应各种异步串行通信口的接口标准和总线标准,它们规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。

UART协议:

在这里插入图片描述
网上的这个图片很形象的描述了UART的发送和接收的传输协议,,,

UART的发送就是FPGA以时钟速率(波特率)将串口的发送端在0和1两个电平之间切换,比如想发送数据并行数据0x55h,那么就是先输出一个起始位,就是低电平(0),然后发送串行数据(10101010从低到高),最后再发送停止位(1)。所以UART的传输协议是非常简单的,只要发送和接收的速率对上了就可以,同理根据UART的时序图,在接收时,只要检测下降沿,当下降沿有效值,FPGA就根据波特率时钟采集数据,由于在接收时是将串行数据变为并行数据,所以就是传进来的每一位数据依次从低位往高位堆积,最后就输出并行的8位接受到的数据。

上面的原理说起来很简单,其实用Verilog来实现硬件逻辑电路也是非常简单的,下面就通过程序来具体实现:

uart发送:

在这里插入图片描述
这是最主要的两个信号,BPS_CLK就是控制传输数据的速率(波特率),R232_Tx是需要传输的数据,当然控制这两个信号还需要其他的信号来辅助,比如如何开始,需要有个Send信号,控制BPS_CLK需要有个波特率的计数器,下面是UART的发送时序,当然每个人写的都是不一样的,但是最终的目的都是实现按照上面的时序将Rs232_Tx上的数据以正确的速率发送出去。
在这里插入图片描述
图画得潦草,但是大致就是这样。
modelsim仿真时序图:
在这里插入图片描述

uart接收:

uart的接收也可以像发送写的这么简单,例如如下图所示:
参照小梅哥FPGA的图片
就是在数据的电平稳定阶段进行一次采样(一般是在中间进行采样),但是实际应用的时候不能保证设备足够的稳定,只采样中间的数据就作为该数据的电平状态是不可靠的。因为很有可能恰好采集到被干扰的信号而导致结果出错,因此这里提出以下改进型的单bit 数据接收方式示意图,使用多次采样求概率的方式进行状态判定,如图下图所示。
这段参照了小梅哥FPGA
modelsim仿真时序图:
在这里插入图片描述
其实对于UART还是各种协议(IIC,SPI等)最主要的还是会看时序图,然后根据时序图来描述时序电路,在FPGA内部搭建硬件逻辑电路。这篇中只介绍了原理和时序,以及如何根据最简单的UART协议来延展,写出发送和接收时序,由于程序什么的比较长,所以这里面并没有附带程序,所描述的时序图等也比较简略,如果有什么不懂得,或者想通过程序进一步学习,添加博主QQ:2859340499分享资料,共同学习,共同进步。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值