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
嗨,我在一本关于sig_a的上升沿检测的书中遇到了这段代码。 谁能解释一下它的工作原理?
由于
答案 0 :(得分:5)
这是一个基本的同步边缘检测电路。
在时钟的每个上升沿sig_a
对输入clk
进行采样。采样值已注册;也就是说,sig_a_d1
是sig_a
延迟一个时钟周期的值。
当输入上升沿时,输出将转到1
。对sig_a_risedge
的分配是对此负责的。它表示“如果当前值为sig_a
并且上一个时钟周期的值为1
”,则“{1}}上升优势”。
请注意,只有当输入信号的频率低于时钟频率时,才能正常工作。如果输入在采样时钟的单个时钟周期内全部变为0
,则可能会丢失边沿。