URL
https://opencores.org/ocsvn/idea/idea/trunk
Subversion Repositories idea
[/] [idea/] [trunk/] [fsm/] [main control/] [counter.fsm] - Rev 11
Go to most recent revision | 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;
Go to most recent revision | Compare with Previous | Blame | View Log