07 1pps上升沿判断

延时一个时钟是不稳定的,有毛刺时上升沿判断就会出错。

1、.v文件


module _1pps_up_judge(
     input  sys_clk_50M,
     input  sys_rst_n  ,
     input  uart_1pps  ,
     
     output  uart_1pps_up
    );
    
    wire uart_1pps_up;
    
    //抓取上升沿,给出一个脉冲信号
    assign uart_1pps_up=uart_1pps_1&&(~uart_1pps_2)&&(~uart_1pps_3)&&(~uart_1pps_4)&&(~uart_1pps_5)&&(~uart_1pps_6);
    
     //定义6个寄存器
    reg uart_1pps_1;
    reg uart_1pps_2;  //2比1晚一个时钟周期
    reg uart_1pps_3;
    reg uart_1pps_4;
    reg uart_1pps_5;
    reg uart_1pps_6;
    
    always @(posedge sys_clk_50M)begin
         if(!sys_rst_n)begin
            uart_1pps_1<=1'b0;
            uart_1pps_2<=1'b0;
            uart_1pps_3<=1'b0;
            uart_1pps_4<=1'b0;
            uart_1pps_5<=1'b0;
            uart_1pps_6<=1'b0;
         end
         else begin
            uart_1pps_1<=uart_1pps;
            uart_1pps_2<=uart_1pps_1;
            uart_1pps_3<=uart_1pps_2;
            uart_1pps_4<=uart_1pps_3;
            uart_1pps_5<=uart_1pps_4;
            uart_1pps_6<=uart_1pps_5;
         end
    end
    
endmodule

2、.tb仿真代码

`timescale 1ns / 1ps



module tb_01_1pps_up_judge( );
    reg sys_clk_50M;
    reg sys_rst_n;
    reg uart_1pps;
    
    wire uart_1pps_up;
    
    _1pps_up_judge _1pps_up_judge_u(
       .sys_clk_50M   (sys_clk_50M  ),
       .sys_rst_n     (sys_rst_n    ),
       .uart_1pps     (uart_1pps    ),
                    
       . uart_1pps_up ( uart_1pps_up)
       );            
    
    
initial begin
    sys_clk_50M=1'b0;
    sys_rst_n=1'b0;
    uart_1pps=1'b0;
    
    #100   sys_rst_n=1'b1;  //延时100ns后复位
    
    #100  uart_1pps=1'b1;   //秒脉冲上升沿到达
    
    #500  uart_1pps=1'b0;   //秒脉冲高电平持续500ns
    
    
end


always #10 sys_clk_50M=~sys_clk_50M;  //使用always 语句对时钟进行赋值,周期为20ns,频率50MHz



endmodule

3、仿真波形

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值