赞
踩
通用异步收发传输器,简称UART。
UART是一种通用的数据通信协议,发送数据时将并行数据转换为串行数据来传输,接收数据时将接收到的串行数据转换为并行数据。
使用多级寄存器,减少亚稳态,如下图所示:
经过三级寄存器,减少亚稳态。
时钟周期为20ns,波特率为9600,可以计算出一个波特占用的周期数如下:
(1/9600*10^9)/20=5208(个)
取中间值做信号提取,波形图如下:
编写串口模块代码如下:
- module uart_rx
- #(
- parameter UART_BPS = 'd9600 ,
- parameter CLK_FREQ = 'd50_000_000
- )
- (
- input wire sys_clk ,
- input wire sys_rst_n ,
- input wire rx ,
-
- output reg [7:0] po_data ,
- output reg po_flag
- );
-
- parameter BAUD_CNT_MAX = CLK_FREQ / UART_BPS;
-
- reg rx_reg1 ;
- reg rx_reg2 ;
- reg rx_reg3 ;
- reg start_flag ;
- reg work_en ;
- reg [12:0] baud_cnt ;
- reg bit_flag ;
- reg [3:0] bit_cnt ;
- reg [7:0] rx_data ;
- reg rx_flag ;
-
- always@(posedge sys_clk or negedge sys_rst_n)
- if(sys_rst_n == 1'b0)
- rx_reg1 <= 1'b1;
- else
- rx_reg1 <= rx;
-
- always@(posedge sys_clk or negedge sys_rst_n)
- if(sys_rst_n == 1'b0)
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。