一、UART简介
UART(universal asynchronous receiver-transmitter)是一种采用异步串行通信方式的通用异步收发传输器。一般来说,UART总是和RS232成对出现,那RS232又是什么呢? RS232也就是我们计算机上的串口,它的全称是EIA-RS-232C (简称232,或者是RS232 )。其中EIA(Electronic Industry Association)代表美国电子工业协会,RS是Recommended Standard的缩写,代表推荐标准,232 是标识符,C表示修改次数,它被广泛用于计算机串行接口外设连接。如果你的计算机上还有串口的话,那么你就可以在主机箱后面看到RS232的接口:
随着时代的发展,这种借口已经很少用了,取而代之的是“USB转串口”,功能和原先一样,但接口更高效了。
串口的主要功能为:在发送数据时将并行数据转换成串行数据进行传输,在接收数据时将接收到的串行数据转换成并行数据。这应该是大多数人接触电子后学习到的第一个通信协议吧。
二、通信格式
下面说明串口的具体要点:
1、传输时序
UART串口通信需要两个信号线来实现,一根用于串口发送,另外一根负责串口接收。一开始高电平,然后拉低表示开始位,接着8个数据位,然后校验位,最后拉高表示停止位,并且进入空闲状态,等待下一次的数据传输。
很多时候我们的校验位是允许省略的,所以协议就变成了:开始+数据+停止。
2、传输速率:波特率
串口通信的速率用波特率表示,它表示每秒传输二进制数据的位数,单位bps(位每秒)。常用的波特率有9600、19200、35400、57600以及115200等。
FPGA开发串口时设计波特率的方法:FPGA的时钟频率/波特率。例如FPGA开发板时钟频率为50Mhz,要使用的波特率为9600bps,因此需要的计数为:50000000/9600=5208;
三、串口回环实验
现在用FPGA开发板做一个串口回环的实验,要求是PC端通过串口助手发送数据给FPGA,FPGA接收到数据后返回给PC端,并在串口助手处显示数值。即串口助手发什么就能收回什么。实验框图如下:
1、uart_rx
//**************************************************************************
// *** 名称 : uart_rx.v
// *** 作者 : 木子
// *** 日期 : 2024-05-13
// *** 描述 : 串口接收模块,计数9.5下,其中停止位0.5下
// 因为串口助手发送本次停止位和下次开始位中间没有留空闲位
// 若计满10下,则才结束本次传输下次数据就来了,会来不及接收
//**************************************************************************
module uart_rx
//========================< 参数 >==========================================
#(
parameter CLK = 50_000_000 , //系统时钟,50Mhz
parameter BPS = 9600 , //波特率
parameter BPS_CNT = CLK/BPS //波特率计数
)
//========================< 端口 >==========================================
(
input wire clk , //时钟,50Mhz
input wire rst_n