我有一个具有五个状态(s1、s2、s3、s4、s5)的 FSM。
但是,对于每个状态,都应该执行一系列操作。例如,在 s2 中,计数器应该从 1 计数到 10。
我的问题来了:FSM 怎么知道“我应该从 s2 变成 s3”?或者换一种说法,s2 怎么会通知 FSM “我完成了”,并且应该根据 LookUpTable 开始新的状态?
如果您以体面的风格编写 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;