1

VHDL usingcaseステートメントを使用して UML 状態図を実装しています。do/exitの活動は簡単に実装できます。entryしかし、効率的な方法で状態アクティビティを実装する方法を知っている人はいますか?

一度だけ実行するフラグを追加したり、状態name_entryの beforeと呼ばれる余分な状態を追加したりすることを考えました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 に答える