VHDL usingcase
ステートメントを使用して UML 状態図を実装しています。do/
州exit
の活動は簡単に実装できます。entry
しかし、効率的な方法で状態アクティビティを実装する方法を知っている人はいますか?
一度だけ実行するフラグを追加したり、状態name_entry
の beforeと呼ばれる余分な状態を追加したりすることを考えましたname
。しかし、私はこれらのオプションが嫌いです...
VHDL usingcase
ステートメントを使用して UML 状態図を実装しています。do/
州exit
の活動は簡単に実装できます。entry
しかし、効率的な方法で状態アクティビティを実装する方法を知っている人はいますか?
一度だけ実行するフラグを追加したり、状態name_entry
の beforeと呼ばれる余分な状態を追加したりすることを考えましたname
。しかし、私はこれらのオプションが嫌いです...
私がよく理解していれば、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;
それがあなたの質問に答えるか、少なくとも助けになることを願っています。