OpenCores
URL https://opencores.org/ocsvn/idea/idea/trunk

Subversion Repositories idea

[/] [idea/] [trunk/] [fsm/] [main control/] [counter.fsm] - Rev 9

Compare with Previous | Blame | View Log

-- File  : counter.fsm

-- External ports

ENTITY counter IS
  PORT ( ck, i, reset : IN BIT;
         o : OUT BIT ;
         vdd, vss : IN BIT
 );
END counter;

--*******************************************************************
--  Finite State Machine description

ARCHITECTURE automate OF counter IS

TYPE STATE_TYPE IS (S0, S1, S2, S3, S4 );

--pragma CLOCK ck
--pragma CUR_STATE CURRENT_STATE
--pragma NEX_STATE NEXT_STATE

SIGNAL CURRENT_STATE , NEXT_STATE : STATE_TYPE ;

BEGIN
 PROCESS ( CURRENT_STATE, i, reset )
 BEGIN
   IF (reset = '1' ) THEN
     NEXT_STATE <= S0;
     o <= '0';
   ELSE
   CASE CURRENT_STATE IS

   WHEN S0 =>
   IF (i = '1' ) THEN
    NEXT_STATE <= S1;
   ELSE
    NEXT_STATE <= S0;
   END IF ;
   o <= '0';

   WHEN S1 => 
   IF (i = '1' ) THEN
    NEXT_STATE <= S2;
   ELSE
    NEXT_STATE <= S0;
   END IF ;
   o <= '0';

  WHEN S2 => 
   IF (i = '1' ) THEN
    NEXT_STATE <= S3;
   ELSE
    NEXT_STATE <= S0;
   END IF;
   o <= '0';
   
   WHEN S3 => 
   IF (i = '1' ) THEN
    NEXT_STATE <= S4;
   ELSE
    NEXT_STATE <= S0;
   END IF ;
   o <= '0';

   WHEN S4 => 
   IF (i = '1' ) THEN
    NEXT_STATE <= S4;
   ELSE
    NEXT_STATE <= S0;
   END IF;
   o <= '1';

   WHEN OTHERS =>
    ASSERT ('1')
    REPORT "Illegal State";
    
    END CASE;
  END IF;
  END PROCESS;

   PROCESS ( ck )
   BEGIN
    IF ( ck = '0' AND NOT ck'STABLE ) THEN
     CURRENT_STATE <= NEXT_STATE ;
    END IF ;
   END PROCESS;

END automate;

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.