是否可以在延迟后分配状态更改?
我正在做一个红绿灯控制器,我想在4秒后从黄色状态转换。
always @(next_state, EW, Count)
begin
case (next_state)
s0: if (EW&Count) next_state = s1; else next_state = s0;
s1: #4 next_state = s2;
s2: if ((~EW&~Count)|(~EW&Count)|(EW&Count)) next_state = s3; else next_state = s2;
s3: #4 next_state = s0;
endcase
end发布于 2016-01-09 07:58:37
创建两台机器。点灯机器和定时器。
当灯机器进入状态时,它设置连接到灯的输出,并将延迟长度发送到定时器。定时器开始计数,在给定的延迟后,它将滴答声发送到照明机。然后,您可以快速测试灯光机器,而无需等待计时器(当您断开连接时)。
Timer不完全是有限自动机,但它可以局部地模拟它,并具有相同的接口,因此您可以轻松地在它们之间传递消息。
我猜红绿灯只是你真正问题的简单化。对于这样简单的问题,分离可能看起来有点夸张,但处理多台更简单的机器比处理一台大型复杂机器更容易。因此,如果您的真实机器不是微不足道的,那么分离将会有所帮助。
您还可以将单独的灯光视为单独的简单机器,以便可以单独测试它们。各种状态机验证工具,如Uppaal,都可以可视化它们。
你也可能对Timed Automata theory感兴趣。
https://stackoverflow.com/questions/34055240
复制相似问题