IC面试:解决UART

打三排降低亚稳态概率并下降沿检测;保证在波特率的循环周期正中央采样;

module uart_tx#(
    parameter CLK_FRE = 50,
    parameter BAUD_RATE = 115200
)
(
    clk,
    rst_n,

    tx_data,
    tx_vld,

    tx_pin,
    tx_rdy
    
);    
    //==================modport
    input clk;
    input rst_n;

    input [7 : 0] tx_data;
    input tx_vld;

    output tx_pin;
    output tx_rdy;

    //===================parameter 
    parameter CYCLE = CLK_FRE * 1000000 / BAUD_RATE;
    parameter BITS = 11;


    //===================defination
    reg tx_rdy; 
    reg [10 : 0] data_r;
    reg tx_pin;

    reg [15 : 0] cnt_cycle;
    wire add_cnt_cycle;
    wire end_cnt_cycle;

    reg [15 : 0] cnt_bit;
    wire add_cnt_bit;
    wire end_cnt_bit;



    //===================defination
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) tx_rdy <= 1'b1;
        else if(tx_vld && tx_rdy) tx_rdy <= 1'b0;
        else if(end_cnt_bit) tx_rdy <= 1'b1;
    end
    
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) data_r <= 'd0;
        else if(tx_vld) data_r <= {
   1'b0, tx_data, 2'b0};
        else if(end_cnt_bit) data_r <= 'd0;
    end

    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) tx_pin <= 1'b1;
        else if(~tx_rdy) tx_pin 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值