方波中的毛刺处理(Verilog验证)

方波中的毛刺处理(Verilog验证)

             by 阿里

 

参考以下博客:

1.  https://www.cnblogs.com/alifpga/p/9558038.html

    作者:杭州卿萃科技ALIFPGA

 

2. 测试程序如下:

//----------------------------------------------------//

//          rising_edge_detector

//----------------------------------------------------//

`timescale 1ns / 1ps
module rising_edge_detector(
    input I_clk,
    input I_signal,
    output [31:0] O_result1,
    output [31:0] O_result2
    );
    
reg [31:0] R_result1=0;
assign O_result1=R_result1;
reg [31:0] R_result2=0;
assign O_result2=R_result2;

 

always@(posedge I_signal) //这种检测上升沿的方式不能应对有毛刺的方波上升沿检测
begin
    R_result2 <= R_result2+1;
end


/*

                                /------------\  /--------
                               /                \/
    ---------------------/
    reg1=0  reg2=0            reg1=1  reg2=0
*/

//如果检测方波时,有毛刺,推荐使用如下检测方法
reg rise_front=0;
reg rise_back=0;
always@(posedge I_clk)
begin
    rise_front     <= I_signal;
    rise_back    <= rise_front;
end

wire W_tmp;
assign W_tmp=(rise_front & ~rise_back)?1:0;

always@(W_tmp)
    if(W_tmp==1)
        R_result1 <= R_result1+1;

endmodule
 

3.仿真程序:

`timescale 1ns / 1ps
module sim();

reg I_clk;
reg I_signal;
wire [31:0] O_result1;
wire [31:0] O_result2;
initial begin
    I_clk=0;
    I_signal=0;
    
end

always #10 I_clk=~I_clk;
always #50 I_signal=~I_signal;

rising_edge_detector i_rising_edge_detector(
    .I_clk(I_clk),
    .I_signal(I_signal),
    .O_result1(O_result1),
    .O_result2(O_result2)
);

endmodule
 

4. 仿真波形分析

方波中的毛刺处理(Verilog验证)_第1张图片

检测到一个上升沿后,则W_tmp置1,O_result寄存器加1。

 

 

 

 

 

你可能感兴趣的:(FPGA,信号毛刺及其上升沿检测)