2
我有一个有五个状态(s1,s2,s3,s4,s5)的FSM。FSM机器在VHDL中与每个状态做某些操作
但是,对于每个状态,应该完成一系列操作。例如,在s2中,计数器应该从1到10.
这里是我的问题:FSM如何知道“我应该从s2更改为s3”?或者以另一种方式说话,s2怎么可能通知FSM“我已经完成了”,并且应该根据LookUpTable来启动新状态?
我有一个有五个状态(s1,s2,s3,s4,s5)的FSM。FSM机器在VHDL中与每个状态做某些操作
但是,对于每个状态,应该完成一系列操作。例如,在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;
嗨Philippe。感谢您的回复!这是我正在尝试使用三个过程来实现FSM。在进程1中,state_reg <= state_next,在进程2中,state_next将被更新。在过程3中,将执行输出逻辑。我的问题实际上是如何在进程3和进程2之间进行通信。因此,当进程3的状态操作完成时,进程2知道应该更新state_next。非常感谢你!! – richieqianle
@richieqianle:请考虑不使用三个过程,并按照Philippe的建议进行......我发现它更容易处理。 http://stackoverflow.com/questions/4409532/vhdl-process-style –