我有一个有五种状态的FSM(s1,s2,s3,s4,s5)。
但是,对于每个州,应该进行一系列操作。例如,在s2中,计数器应该从1到10计数。
我的问题出现了:FSM怎么知道“我应该从s2改为s3”?或者以另一种方式说话,s2如何通知FSM“我已经完成”,并且应该根据LookUpTable启动新状态?
答案 0 :(得分: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;