上升沿检测系统

Vai*_*yal 2 verilog system-verilog

module syncrisedgedetect(input logic sig_a, rst,clk,output logic sig_a_risedge);

  logic sig_a_d1;

  always @(posedge clk or negedge rst)
  begin
    if(!rst)
      sig_a_d1<=1'b0;
    else
      sig_a_d1<=sig_a;
  end

  assign sig_a_risedge=sig_a & !sig_a_d1;

endmodule
Run Code Online (Sandbox Code Playgroud)

嗨,我在一本关于sig_a的上升沿检测的书中遇到了这个代码.任何人都能解释我的工作吗?

谢谢

dwi*_*kle 5

这是一个基本的同步边沿检测电路.

输入,sig_a在时钟的每个上升沿采样,clk.采样值已注册; 也就是说,sig_a_d1sig_a延迟一个时钟周期的值.

1当输入上升沿时,输出将转到a .转让sig_a_risedge负责此事.它表示" sig_a如果当前值是,1并且前一个时钟周期的值是",则存在上升沿0.

请注意,只有当输入信号的频率低于时钟频率时,这才能正常工作.如果输入0 -> 1 -> 0全部在采样时钟的单个时钟周期内,则可能错过边沿.