2

我有一个具有五个状态(s1、s2、s3、s4、s5)的 FSM。

但是,对于每个状态,都应该执行一系列操作。例如,在 s2 中,计数器应该从 1 计数到 10。

我的问题来了:FSM 怎么知道“我应该从 s2 变成 s3”?或者换一种说法,s2 怎么会通知 FSM “我完成了”,并且应该根据 LookUpTable 开始新的状态?

4

1 回答 1

5

如果您以体面的风格编写 FSM,这真的不是问题。例子:

architecture RTL of dut is
    type state_t is (s1, s2, s3, s4, s5);
    signal state     : state_t;
    signal counter   : integer;
    signal condition : boolean;
begin
    fsm : process is
    begin
        if rising_edge(clk) then
            case state is
                when s1 =>
                -- do stuff
                when s2 =>
                    if condition then
                        counter <= 0;
                        state   <= s3;
                    end if;
                when s3 =>
                    if counter = 10 then
                        state <= s4;
                    else
                        counter <= counter + 1;
                    end if;
                when s4 =>
                    null;
                when s5 =>
                    null;
            end case;
        end if;
    end process fsm;

end architecture RTL;
于 2013-05-15T20:25:02.413 回答