1

我正在使用 VHDL usingcase语句实现 UML 状态图。do/国家活动exit易于实施。但是,有谁知道如何以entry有效的方式实施状态活动?

我想添加一个标志只执行一次或添加一个称为状态name_entry之前的额外name状态。但我不喜欢这些选项...

4

1 回答 1

0

如果我理解得很好,您只想用 VHDL 描述 FSM?为此,您首先需要声明所有可能的状态TYPE

TYPE my_state_type IS (s0, s1, s2);

然后你必须创建一个my_state_type作为类型的信号。

SIGNAL my_state : my_state_type := s0; -- for initialisation

然后,在您的过程中,您确实需要CASE为您的每个州提供一个。

fsm : PROCESS (clk, rst)
BEGIN
    IF (rst = '1') THEN
      my_state <= s0 ;  -- reset value
    ELSIF (rising_edge(clk)) THEN
      CASE my_state IS

          WHEN s0  => output <= '1'; -- do 
                      IF (input = '1') THEN -- condition to enter s1
                         my_state <= s1; 
                      ELSE                  -- condition to stay in s0
                         my_state <= s0; 
                      END IF;

          WHEN s1  => my_state <= s2; -- stay in s1 for only one clk cycle

          WHEN s2  => my_state <= s0; -- stay in s2 for only one clk cycle

          WHEN OTHERS => my_state <= s0;

      END CASE;
    END IF;
END PROCESS;

我希望它回答了您的问题,或者至少会有所帮助。

于 2016-11-16T09:00:23.917 回答