UART动态调整接收时钟

本文介绍了UART接收模块的误码问题,重点讨论了如何通过过采样技术在FPGA中实现接收时钟动态纠正,以减少误码。上板实验证明了这一方法的有效性,误码率几乎为零。
摘要由CSDN通过智能技术生成


一、UART接收模块误码率

由于发送端和接收端存在一定的频率误差,随着时间的推移,累计误差不断增加,从而产生亚稳态现象,会导致误码,因此需要对时钟做动态纠正

二、接收时钟动态纠正方法

接收模块当识别到起始位的时候,开始产生接收时钟,接收时钟的上升沿处于数据线正中间,因此每次接收新数据的时候,接收时钟都在数据稳定的中间附近进行采样,并且用的都是新时钟,规避累计误差。

2.1、过采样

完整代码详见:https://github.com/shun6-6/UART_Pro
注:代码为本人通过学习FPGA奇哥系列网课进行自主编写
想要识别起始位下降沿,需要采用过采样,即使用大于波特率的时钟进行识别起始位。
r_uart_rx_rst 为时钟分频模块的复位信号,当识别到起始位时,r_rx_overlock会拉低,复位取消,开始产生接收时钟,当一次数据接收完成时重新复位。
r_uart_overvalue 对接收的异步数据进行打拍,并以此判断起始位下降沿
r_rx_overlock 拉高表示当前已经已经识别到起始位

always@(posedge i_clk or posedge i_rst)begin
    if(i_rst)
        r_uart_rx_rst <= 1'd1;
    else if(!w_usr_rx_valid && r_usr_rx_valid_1d)
        r_uart_rx_rst <= 1'd1;
    else if(r_rx_overlock)
        r_uart_rx_rst <= 1'd0;
    else
        r_uart_rx_rst <= r_uart_rx_rst;
end

always@(posedge i_clk or posedge i_rst)begin
    if(i_rst)
        r_uart_overvalue <= 'd0;
    else if(!r_rx_overlock)
        r_uart_overvalue <= {r_uart_overvalue[1:0] , i_uart_rx};
    else
        r_uart_overvalue <=  3'b111;
end

always@(posedge i_clk or posedge i_rst)begin
    if(i_rst)
        r_uart_overvalue_1d <= 'd0;
    else
        r_uart_overvalue_1d <= r_uart_overvalue;
end

always@(posedge i_clk or posedge i_rst)begin
    if(i_rst)
        r_rx_overlock <= 'd0;
    else if(!w_usr_rx_valid && r_usr_rx_valid_1d)
        r_rx_overlock <= 'd0;
    else if(r_uart_overvalue == 3'b000 && r_uart_overvalue_1d != 3'b000)
        r_rx_overlock <= 1'b1;
    else
        r_rx_overlock <= r_rx_overlock;
end

always@(posedge i_clk or posedge i_rst)begin
    if(i_rst)
        r_usr_rx_valid_1d <= 'd0;
    else
        r_usr_rx_valid_1d <= w_usr_rx_valid;
end

2.2、上板效果

误码率几乎为0
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顺子学不会FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值