以下为消除scl_in和sda_io毛刺的语句,可是在仿真时却看不到正确的输出,sda_sr和scl_sr这两个移位寄存器一直维持1111没有变化。而当把if(clr_in)(包含begin至end)这一段的删除,或在仿真时使clr_in一直为低电平,则sda_sr和scl_sr开始起作用,输出正确的波形。此种感觉仿真时一直在执行if(clr_in)这一段的语句,而不执行else中的代码。请问这是什么原因呢?
期待各位大侠指教,感谢
// Debounce, then delay debounced signals for edge detection
always @ (posedge clk_in or posedge clr_in)
if (clr_in)
begin
sda_sr <= 4'b1111;
sda <= 1;
was_sda <= 0;
scl_sr <= 4'b1111;
scl <= 1;
was_scl <= 0;
end
else
begin
sda_sr <= {sda_sr[2:0], sda_io};
if (sda_sr == 4'b0000) sda <= 0;
else if (sda_sr == 4'b1111) sda <= 1;
was_sda <= sda;
scl_sr <= {scl_sr[2:0], scl_in};
if (scl_sr == 4'b0000) scl <= 0;
else if (scl_sr == 4'b1111) scl <= 1;
was_scl <= scl;
end