Проблема заключается в вашей тестовой среде и в том, как вы отображаете сигналы в своем файле журнала.
В коде тестовой среды, который вы разместили в другом вашем вопросе ранее сегодня , вы использовали $monitor
для печати входного и выходного сигнала. Проблема в том, что $monitor
показывает эти сигналы, только если есть изменение в любом из сигналов. В вашем случае было бы гораздо более значимым показывать эти сигналы один раз за такт. Это можно сделать с помощью блока always
и $display
следующим образом:
always @(negedge clock) $display($time, " in=%b out=%b", sequence_in, detector_out);
initial begin
$dumpfile("seq_0110.vcd");
$dumpvars(0,seq_0110_t);
sequence_in = 0;
reset = 1;
#30;
reset = 0;
repeat (5) @(posedge clock); sequence_in = 0;
@(posedge clock); sequence_in = 1;
@(posedge clock); sequence_in = 1;
@(posedge clock); sequence_in = 0;
repeat (5) @(posedge clock); sequence_in = 0;
@(posedge clock); sequence_in = 1;
@(posedge clock); sequence_in = 1;
@(posedge clock); sequence_in = 0;
repeat (5) @(posedge clock); sequence_in = 0;
#10 $finish;
end
Теперь вывод ясно показывает, что ваш FSM обнаруживает битовый шаблон 0110
на вашем входе:
10 in=0 out=0
20 in=0 out=0
30 in=0 out=0
40 in=0 out=0
50 in=0 out=0
60 in=0 out=0
70 in=0 out=0
80 in=0 out=0
90 in=1 out=0
100 in=1 out=0
110 in=0 out=1
120 in=0 out=0
130 in=0 out=0
140 in=0 out=0
150 in=0 out=0
160 in=0 out=0
170 in=1 out=0
180 in=1 out=0
190 in=0 out=1
200 in=0 out=0
210 in=0 out=0
220 in=0 out=0
230 in=0 out=0
240 in=0 out=0