我使用case
语句使用VHDL实现UML状态图。 do/
和exit
州活动很容易实施。但是,是否有人知道如何以有效的方式实施entry
州活动?
我想添加一个标志只执行一次或在name_entry
状态之前添加一个名为name
的额外状态。但我不喜欢这些选择......
答案 0 :(得分: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;
我希望它能回答你的问题或者至少会有所帮助。