Добрый день! Помогите пожалуйста разобраться почему происходит именно так, а не иначе.
Сразу перейду непосредственно к сути.
Вот текст очень небольшого модуля на языке Verilog:
Код:
module filter(
input wire data,
input wire clk,
output reg signal,
output reg [1:0]state
);
always @ (posedge clk)
begin
case(state)
0: state <= 1;
1: state <= 2;
2: state <= 3;
3: state <= 0;
endcase
end
always @ (state)
begin
case(state)
0: signal <= signal;
1: signal <= data;
2: signal <= signal;
3: signal <= signal;
endcase
end
endmodule
Задумка была такая. При каждом фронте "clk" меняется переменная "state", а при каждом изменении "state" меняется состояние сигнала выходной переменной "signal".
При "state=1" в выходную переменную"signal" записывается значение входа "data", в остальных случаях переменная "signal" не должна менять своего значения.
По идее значение переменной "signal" должно обновляться только при изменении переменной "state", так как только она заключена в так называемый список чувствительности (always @ (state)).
Но на деле ее значение повторяет входной сигнал "data", при неизменяемой "state=1". Как будто при "state=1" между "data" и "signal" просто проводник. Прикладываю скриншот из симулятора.
Буду признателен за подсказки.