РЕДАКТИРОВАТЬ: мне показалось, что оригинальная программа работала, всегда добавляя else после оператора if, а не ставя, например, «Y = Y».Так что в этом случае вместо этого будет B: Y = B.
Я не уверен, почему сейчас это работает, похоже, что-то, что у меня нет правильного опыта, чтобы понять.
Я пытаюсь эмулировать конечный автомат в verilog, но у меня возникают проблемы с пониманием конкретной проблемы.Оригинальный код был намного больше, но я сократил его до того, что производит эффект, который я не могу объяснить.(Не фактическая реализация, просто пример, показывающий мою проблему)
У меня есть 'Y', в котором хранится "состояние", в котором он находится, и оно будет меняться в зависимости от его состояния и условий.Моя проблема в том, что строка для случая A :, игнорирует условное выражение и делает Y = B, даже если enter всегда низок.У меня есть вывод 'ts', находится ли он на самом деле в состоянии B.
Если я заменю 'enter == 1' на '0 == 1', я получаю тот же вывод.
module ComboCheckF(Clock,enter,ts);
input Clock, enter;
output ts;
reg[3:0] Y;
parameter A = 4'b0000, B = 4'b0001;
initial Y = A;
always @(enter,Y)
begin
case(Y)
A: if (enter == 1) Y = B;
else Y = Y;
B: Y = Y;
default: Y = 4'bxxxx;
endcase
end
assign ts=(Y==B);
endmodule
и вывод (может игнорировать часы, был остаток)