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上升边缘检测的书中发现了这段代码。有人能解释一下它的工作原理吗?
谢谢
发布于 2014-02-14 12:52:15
这是一个基本的同步边沿检测电路。
在时钟clk的每个上升沿对输入sig_a进行采样。对采样值进行寄存;也就是说,sig_a_d1是sig_a延迟一个时钟周期的值。
当输入上有上升沿时,输出将转到1。对sig_a_risedge的赋值负责此操作。它说“如果当前值是1,而上一个时钟周期的值是0,则sig_a上有一个上升沿”。
请注意,只有当输入信号的频率低于时钟的频率时,这才能正常工作。如果输入在采样时钟的单个时钟周期内全部变为0 -> 1 -> 0,则可能会丢失边沿。
https://stackoverflow.com/questions/21770813
复制相似问题