2016-11-15 18 views
0

Я реализую диаграмму состояний UML с VHDL с использованием инструкции case. do/ и exit Деятельность государства проста в реализации. Однако кто-нибудь знает, как эффективно осуществлять государственную деятельность entry?/Запись в диаграмме состояний UML с VHDL

Я думал о добавлении флага для выполнения только одного раза или добавления дополнительного состояния с именем name_entry до name. Но мне не нравятся эти варианты ...

+0

Трудно понять, что вы хотите сделать из того, что вы сказали. Поскольку UML является только представлением конечного автомата, он не дает никакого намека на то, что вы пытаетесь разработать (функционально говоря). –

+0

@ A.Kieffer./Ввод выполняется только один раз, когда переход произошел к его состоянию (аналогично действию)./Do легко реализовать, поскольку конечный автомат находится внутри процесса, и код выполняется до тех пор, пока не произойдет переход, есть ли когда вы можете реализовать/exit. Но я до сих пор не знаю, как реализовать некоторый код, который будет выполняться один раз ... Эффективным способом – ferdepe

ответ

0

Если я правильно понял, вы просто хотите описать 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; 

Надеюсь, он ответил на ваш вопрос или по крайней мере поможет.

+0

Вам не нужно предложение 'when others', если ваша переменная состояния является перечисленным типом. –

+0

Действительно, но для меня стало обычным я определять случай «ДРУГИЕ» на случай, если –

+0

Хорошо! Вы просто указываете, когда писать _do/_ в диаграмме состояний UML с 'output <= '1'', _exit/_ может быть реализовано в инструкции if' s0'. Но где _/entry_ ?? Я ищу [это] (http://www.barrgroup.com/images/articles/IntroHierarchicalStateMachines02UmlStateDiagram.gif), а не для того, как реализовать общий FSM в VHDL. Благодаря! – ferdepe

 Смежные вопросы

  • Нет связанных вопросов^_^