对FPGA串口接收程序用自己的理解做一个总结,有问题还请指正。UART即通用异步收发器,俗称串口。总结几个要点。1、信号线个数,从电路层面来看总共有两根线,分别是接收数据线rx和发送数据线tx。2、数据格式,如果不算上奇偶校验位等等,串口数据常用格式为1位起始位(为0)+8位数据位+1位停止位(为1)。rx和tx空闲态为1,当从1拉低到0时就认为数据传输开始了。3、串口波特率,简单来说就是传输一个bit所需要的时间,比如波特率为9600,那么传输一个bit的时间就是1秒钟/9600。4、串口先传输低位,再传输高位。
知道了串口协议的构成,就可以开始写FPGA串口接收程序了。整体思路如下:1、在检测到接收数据线rx产生了一个下降沿,即从空闲态1拉低成了0,就认为有数据传输过来了。2、在检测到下降沿后就开始10个bit的接收,每个bit的时间根据系统时钟频率和串口波特率即可算出一个bit需要多少个系统时钟周斯,定义一个计数器对一个bit的传输时间计时,并选择在最大计数值的中间值进行采样(中间的话数据相对稳定)。3、再定义一个计数器对传输的位数进行计数,每当一个bit时间计数器达到最大计数值就加1,当加到9(0-9共10个bit)说明一个字节接收完毕。在传输位数计数器的值为1-8且bit传输时间计数器为中间值时,把采样值赋给一个8位reg的对应位即可。
以下是自己手敲的程序,写了些注释,程序功能已验证。
module uart_rx
#(
parameter CLK_FRE = 50_000_000,//系统时钟频率为50M
parameter BPS = 115200//串口波特率
)
(
input wire sys_clk,//系统时钟
input wire sys_rst_n,//系统复位
input wire rx,//串口接收数据线
output

本文详细解析了UART串口的工作原理,包括信号配置、数据格式、波特率计算,并结合FPGA设计了一段串口接收程序,介绍了关键步骤如检测下降沿、位计数和数据采样。通过实例展示了如何在FPGA中实现串口数据的实时接收和处理。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



