我正在尝试在verilog中模拟状态机,但是在理解特定问题时遇到了问题。原始代码要大得多,但是我将其缩减为产生无法解释的效果的原因。 (不是实际的实现,仅是显示我的问题的示例)
我让“ Y”存储“状态”即时消息,并将根据其状态和条件对其进行更改。我的问题是,情况A:的行忽略条件,使Y = B,即使enter总是很低。无论是否实际上处于状态B,我都有“ ts”输出。
如果我将'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
和输出(可以忽略时钟,剩余)