Если я правильно понял, вы просто хотите описать FSM в VHDL? Для этого сначала необходимо провозглашаем все, что вам возможные состояния в 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;
Надеюсь, он ответил на ваш вопрос или по крайней мере поможет.
Трудно понять, что вы хотите сделать из того, что вы сказали. Поскольку UML является только представлением конечного автомата, он не дает никакого намека на то, что вы пытаетесь разработать (функционально говоря). –
@ A.Kieffer./Ввод выполняется только один раз, когда переход произошел к его состоянию (аналогично действию)./Do легко реализовать, поскольку конечный автомат находится внутри процесса, и код выполняется до тех пор, пока не произойдет переход, есть ли когда вы можете реализовать/exit. Но я до сих пор не знаю, как реализовать некоторый код, который будет выполняться один раз ... Эффективным способом – ferdepe