2016-11-15 3 views
0

case 문을 사용하여 VHDL로 UML 상태 다이어그램을 구현 중입니다. do/exit 상태 활동은 쉽게 구현할 수 있습니다. 그러나 효과적인 방법으로 entry 상태 활동을 구현하는 방법을 아는 사람이 있습니까?/VHDL로 UML 상태 다이어그램에 입력

name 상태 이전에 name_entry이라는 추가 상태를 추가하거나 한 번만 실행하는 플래그를 추가 할 것을 고려했습니다. 그러나 나는이 옵션들을 싫어합니다 ...

+0

당신이 말한 것으로부터 당신이하고 싶은 것을보기가 어렵습니다. UML은 상태 머신을 표현하기위한 것일 뿐이므로 개발하려고하는 것에 대해서는 힌트를 제공하지 않습니다 (기능적으로 말하면). –

+0

@ A.Kieffer/Entry는 해당 상태로 전환이 발생했을 때 한 번만 실행됩니다 (작업과 유사)./Do는 구현하기 쉽습니다. 상태 시스템이 프로세스 내부에 있고 전환이 발생할 때까지 코드가 실행되기 때문에/exit를 구현할 수 있습니다. 그러나, 나는 한 번 실행될 코드를 구현하는 방법을 여전히 모른다 ... 효율적인 방법으로 – ferdepe

답변

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; 

나는 그것이 귀하의 질문에 답변하거나 적어도 도움이되기를 바랍니다.

+0

상태 변수가 열거 형인 경우'when others' 절이 필요하지 않습니다. –

+0

실제로, 경우에 대비해 '기타 (OTHERS)'사례를 지정하는 것이 일상적이었습니다 –

+0

좋습니다! UML 상태 차트에서 _do/_를'output <= '1'이라고 쓰면,'_exit/_ '는's0'의 if 문에서 구현 될 수 있습니다. 그러나 _/entry_는 어디에 있습니까? ?? VHDL에 일반적인 FSM을 구현하는 방법이 아니라 [that] (http://www.barrgroup.com/images/articles/IntroHierarchicalStateMachines02UmlStateDiagram.gif)을 찾고 있습니다. 감사! – ferdepe

관련 문제