Есть входной сигнал с плохим фронтом, поэтому происходит дребезг. Написал антидребезговый блок, так в принципе работает не плохо,
но иногда при включении стопорится, потому что видимо dreb и ndreb не обнуляются и соответственно сигнал zap
который я дальше использую не работает. Алгоритм такой. Приходит внешний сигнал IN, включается счетчик dreb и
пока не досчитает до 1000 zap будет вкл. тем самым исключая ложное срабатывание zap .
Но код какой то кривой и задний фронт вроде не коректно отрабатывает. Подскажите пожалуйста как это лучше сделать или может подправите?
Код
always @ (posedge clock1) begin
if(IN) begin // внешний сигнал
if(dreb == 0) begin
zap <= 1'b1; // сигнал после фильтрации, используется дальше
ndreb <= 0;
end
end
if(zap)
dreb <= dreb + 1'b1;
if(dreb > 1000) begin
zap <= 1'b0;
end
if(!IN) begin
if(ndreb == 0) begin
nzap <= 1'b1;
dreb <= 0;
end
end
if(nzap)
ndreb <= ndreb + 1'b1;
if(ndreb > 1000) begin
nzap <= 1'b0;
end
end
if(IN) begin // внешний сигнал
if(dreb == 0) begin
zap <= 1'b1; // сигнал после фильтрации, используется дальше
ndreb <= 0;
end
end
if(zap)
dreb <= dreb + 1'b1;
if(dreb > 1000) begin
zap <= 1'b0;
end
if(!IN) begin
if(ndreb == 0) begin
nzap <= 1'b1;
dreb <= 0;
end
end
if(nzap)
ndreb <= ndreb + 1'b1;
if(ndreb > 1000) begin
nzap <= 1'b0;
end
end