5.FPGA边沿检测及亚稳态的消除

                                   FPGA边沿检测及亚稳态的消除

一、FPGA边沿检测的实现

    边沿检测主要包括上升沿和下降沿的检测

    1.原理

     上升沿是指从低到高的电平转变,而下降沿是指从高到低的电平转变

      上升沿                                 下降沿

     那么如何判定上升沿和下降沿呢?

     上升沿不就是前一个时刻为低电平,这时刻为高电平不就是了,下降沿则刚好相反。

      答对了,那么前一时刻怎么实现呢?

      学过数字电路就知道了,寄存器可以存储前一个的值,前一时刻和这一时刻加起来可以极性判定了。

    2.实现

  • 寄存器1
reg     data_r1;
reg     data_r0;
wire    data_pos;       //上升沿检测

always @ (posedge clk)
begin
    if (rst == 1'b1)
    begin
        data_r0 <= 1'b0;
        data_r1 <= 1'b0;
    end
    else
    begin
        data_r0 <= data;
        data_r1 <= data_r0;
    end
end
assign data_pos = (~data_r1) & data_r0;
  • 寄存器2
reg  [1:0]  data_r;
wire    data_pos;

always @ (posedge clk)
begin
    if (rst == 1'b1)
        data_r <= 'd0;
    else
        data_r <= {data_r[0], data};
end
assign data_pos = ~data_r[1] & data_r[0]; //data_r == 2'b01;

二、FPGA亚稳态的消除

    1.原理

     由于时序的不一致,导致输出的数据不统一,存在问题,这里采用延时打拍的方式进行解决。一般来说,打两拍可以解决大多数的问题。

    2.实现

reg   [1:0]  data_r;
always @ (posedge clk)
begin
    data_r <= {data_r[0], data};    
end

你可能感兴趣的:(5.FPGA边沿检测及亚稳态的消除)