如何在延迟后分配状态

时间:2015-12-02 23:40:49

标签: verilog state-machine fsm

延迟后是否可以指定状态变化?

我正在做一个红绿灯控制器,我希望在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

1 个答案:

答案 0 :(得分:0)

创建两台机器。点亮机器和计时器。

当Lights机器进入状态时,它将其输出设置为连接到指示灯并将延迟长度发送到计时器。定时器开始计时,在给定的延迟后,它会向灯光机发送滴答声。然后,您可以快速测试灯光机器而无需等待计时器(当您断开连接时)。

Timer不是完全有限的自动机,但它可以在paritally模拟它并具有相同的接口,因此您可以轻松地在它们之间传递消息。

我猜交通信号灯只是简化您的真实问题。对于这样一个简单的问题,分离可能看起来有点过分,但是处理多个简单机器比处理大型复杂机器更容易。因此,如果您的真机是非平凡的,分离将有所帮助。

您还可以将单个灯光视为单独的简单机器,因此可以单独测试它们。各种状态机验证工具,如Uppaal,可以将它们可视化。

您可能也会对Timed Automata theory感兴趣。