串口接收模块——verilog实现

打印 上一主题 下一主题

主题 877|帖子 877|积分 2631

1、设计想法

原理与之前的串口发送模块一样,1位的数据位和8位的数据位再加上1位的停止位。唯一不同的是在接收的时候要考虑到有干扰的情况下,为了避免干扰,我们对每位数据进行多次采样,按出现概率大的值为该数据位的值。

如果按照通常想法在每bits位中间取值的话,bit3位出现图中的干扰很有可能会读出错误的值。所以需要对每位进行多次抽样进行判断。

每位要抽8次的话,那需要将每个波特段分成9等分。
2、状态机设定


3、模块代码

[code]`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company: // Engineer: Lclone// // Create Date: 2022/12/16 15:37:44// Design Name: uart_byte_rx// Module Name: uart_byte_rx// Project Name: uart_byte_rx// Target Devices: // Tool Versions: // Description: 8位串口发送模块// // Dependencies: // // Revision:// Revision 0.01 - File Created// Additional Comments:// //////////////////////////////////////////////////////////////////////////////////module uart_byte_rx  # (        parameter   RX_BAUD  = 9600,                                //波特率        parameter   CLK_FQC  = 50_000_000,                        //模块时钟频率        parameter   BAUD_CNT = CLK_FQC/RX_BAUD)                        //模块每波特需要计数的次数(设置此端口方便仿真用)    (        input               Clk,                                //时钟频率接口        input               Rst_n,                                //复位接口        input               Uart_rx,                                //串口接收接口        output  reg  [7:0]  Data                                //接收到的数据接口    );        reg            uart_rx_r;                                        //延一拍    reg            uart_rx_rr;                                        //延两拍    reg            receiv_begin;                                //接收开始信号    reg            receiv_flag;                                        //接收状态信号    reg   [ 3:0]   state;                                        //状态机寄存器    reg   [15:0]   baud_cnt;                                        //波及计数器    reg   [ 3:0]   sampel_cnt;                                        //采样计数器    reg            sampel_en;                                        //采样使能    reg            sampel_ref;                                        //样本寄存器    reg   [ 3:0]   acc;                                                //累加寄存器    reg   [ 3:0]   bit_cnt;                                        //数据位寄存器        always @(posedge Clk) begin   //下降沿捕获        uart_rx_r

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表