延迟后是否可以指定状态变化?
我正在做一个红绿灯控制器,我希望在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
答案 0 :(得分:0)
创建两台机器。点亮机器和计时器。
当Lights机器进入状态时,它将其输出设置为连接到指示灯并将延迟长度发送到计时器。定时器开始计时,在给定的延迟后,它会向灯光机发送滴答声。然后,您可以快速测试灯光机器而无需等待计时器(当您断开连接时)。
Timer不是完全有限的自动机,但它可以在paritally模拟它并具有相同的接口,因此您可以轻松地在它们之间传递消息。
我猜交通信号灯只是简化您的真实问题。对于这样一个简单的问题,分离可能看起来有点过分,但是处理多个简单机器比处理大型复杂机器更容易。因此,如果您的真机是非平凡的,分离将有所帮助。
您还可以将单个灯光视为单独的简单机器,因此可以单独测试它们。各种状态机验证工具,如Uppaal,可以将它们可视化。
您可能也会对Timed Automata theory感兴趣。