2013-05-15 48 views
2

我有一个有五个状态(s1,s2,s3,s4,s5)的FSM。FSM机器在VHDL中与每个状态做某些操作

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

这里是我的问题:FSM如何知道“我应该从s2更改为s3”?或者以另一种方式说话,s2怎么可能通知FSM“我已经完成了”,并且应该根据LookUpTable来启动新状态?

回答

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; 
+0

嗨Philippe。感谢您的回复!这是我正在尝试使用三个过程来实现FSM。在进程1中,state_reg <= state_next,在进程2中,state_next将被更新。在过程3中,将执行输出逻辑。我的问题实际上是如何在进程3和进程2之间进行通信。因此,当进程3的状态操作完成时,进程2知道应该更新state_next。非常感谢你!! – richieqianle

+0

@richieqianle:请考虑不使用三个过程,并按照Philippe的建议进行......我发现它更容易处理。 http://stackoverflow.com/questions/4409532/vhdl-process-style –