URL
https://opencores.org/ocsvn/idea/idea/trunk
Subversion Repositories idea
[/] [idea/] [trunk/] [heart_ctrl.fsm] - Rev 9
Compare with Previous | Blame | View Log
-- File Name : heart_ctrl.fsm --
-- Description : The heart control of idea processor --
-- Purpose : To be used by SYF --
-- Date : Aug 23, 2001 --
-- Version : 1.1 --
-- Author : Martadinata A. --
-- Address : VLSI RG, Dept. of Electrical Engineering ITB, --
-- Bandung, Indonesia --
-- E-mail : marta@ic.vlsi.itb.ac.id --
entity heart_ctrl is
port(
ck,reset,start,key_ready : in bit;
round : out bit_vector(2 downto 0);
en1,en2,en3,en4,en5,en6,en7,en_out : out bit;
en_key_out,sel_in : out bit;
finish : out bit;
vdd, vss : in bit
);
end heart_ctrl;
architecture fsm of heart_ctrl is
type STATE_TYPE is (S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,
S15,S16,S17,S18,S19,S20,S21,S22,S23,S24,S25,S26,S27,S28,S29,S30,S31,
S32,S33,S34,S35,S36,S37,S38,S39,S40,S41,S42,S43,S44,S45,S46,
S47,S48,S49,S50,S51,S52,S53,S54,S55,S56,S57,S58,S59,S60,S61,S62,S63,S64,
S65,S66,S67);
-- pragma CLOCK ck
-- pragma CURRENT_STATE CURRENT_STATE
-- pragma NEXT_STATE NEXT_STATE
signal CURRENT_STATE,NEXT_STATE: STATE_TYPE;
begin
process (CURRENT_STATE,start,key_ready,reset)
begin
if (reset = '1') then
NEXT_STATE <= S1;
else
case CURRENT_STATE is
-- round 1 --
when S1 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
round <= "000";
sel_in <= '0';
finish <= '0';
if((start and key_ready) = '1') then
en_key_out <= '1';
NEXT_STATE <= S2;
else
en_key_out <= '0';
NEXT_STATE <= S1;
end if;
when S2 =>
en1 <= '1'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "000";
en_key_out <= '0';
sel_in <= '0';
NEXT_STATE <= S3;
when S3 =>
en1 <= '0'; en2 <= '1'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "000";
en_key_out <= '0';
sel_in <= '0';
NEXT_STATE <= S4;
when S4 =>
en1 <= '0'; en2 <= '0'; en3 <= '1'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "000";
en_key_out <= '0';
sel_in <= '0';
NEXT_STATE <= S5;
when S5 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '1';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "000";
en_key_out <= '0';
sel_in <= '0';
NEXT_STATE <= S6;
when S6 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '1'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "000";
en_key_out <= '0';
sel_in <= '0';
NEXT_STATE <= S7;
when S7 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '1'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "000";
en_key_out <= '0';
sel_in <= '0';
NEXT_STATE <= S8;
when S8 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '1'; en_out <= '0';
finish <= '0';
round <= "000";
en_key_out <= '0';
sel_in <= '0';
NEXT_STATE <= S9;
-- round 2 --
when S9 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "001";
en_key_out <= '1';
sel_in <= '1';
NEXT_STATE <= S10;
when S10 =>
en1 <= '1'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "001";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S11;
when S11 =>
en1 <= '0'; en2 <= '1'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "001";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S12;
when S12 =>
en1 <= '0'; en2 <= '0'; en3 <= '1'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "001";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S13;
when S13 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '1';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "001";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S14;
when S14 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '1'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "001";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S15;
when S15 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '1'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "001";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S16;
when S16 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '1'; en_out <= '0';
finish <= '0';
round <= "001";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S17;
-- round 3 --
when S17 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "010";
en_key_out <= '1';
sel_in <= '1';
NEXT_STATE <= S18;
when S18 =>
en1 <= '1'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "010";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S19;
when S19 =>
en1 <= '0'; en2 <= '1'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "010";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S20;
when S20 =>
en1 <= '0'; en2 <= '0'; en3 <= '1'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "010";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S21;
when S21 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '1';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "010";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S22;
when S22 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '1'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "010";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S23;
when S23 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '1'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "010";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S24;
when S24 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '1'; en_out <= '0';
finish <= '0';
round <= "010";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S25;
-- round 4 --
when S25 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "011";
en_key_out <= '1';
sel_in <= '1';
NEXT_STATE <= S26;
when S26 =>
en1 <= '1'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "011";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S27;
when S27 =>
en1 <= '0'; en2 <= '1'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "011";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S28;
when S28 =>
en1 <= '0'; en2 <= '0'; en3 <= '1'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "011";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S29;
when S29 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '1';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "011";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S30;
when S30 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '1'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "011";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S31;
when S31 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '1'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "011";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S32;
when S32 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '1'; en_out <= '0';
finish <= '0';
round <= "011";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S33;
-- round 5 --
when S33 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "100";
en_key_out <= '1';
sel_in <= '1';
NEXT_STATE <= S34;
when S34 =>
en1 <= '1'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "100";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S35;
when S35 =>
en1 <= '0'; en2 <= '1'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "100";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S36;
when S36 =>
en1 <= '0'; en2 <= '0'; en3 <= '1'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "100";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S37;
when S37 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '1';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "100";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S38;
when S38 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '1'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "100";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S39;
when S39 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '1'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "100";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S40;
when S40 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '1'; en_out <= '0';
finish <= '0';
round <= "100";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S41;
-- round 6 --
when S41 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "101";
en_key_out <= '1';
sel_in <= '1';
NEXT_STATE <= S42;
when S42 =>
en1 <= '1'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "101";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S43;
when S43 =>
en1 <= '0'; en2 <= '1'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "101";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S44;
when S44 =>
en1 <= '0'; en2 <= '0'; en3 <= '1'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "101";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S45;
when S45 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '1';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "101";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S46;
when S46 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '1'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "101";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S47;
when S47 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '1'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "101";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S48;
when S48 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '1'; en_out <= '0';
finish <= '0';
round <= "101";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S49;
-- round 7 --
when S49 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "110";
en_key_out <= '1';
sel_in <= '1';
NEXT_STATE <= S50;
when S50 =>
en1 <= '1'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "110";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S51;
when S51 =>
en1 <= '0'; en2 <= '1'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "110";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S52;
when S52 =>
en1 <= '0'; en2 <= '0'; en3 <= '1'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "110";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S53;
when S53 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '1';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "110";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S54;
when S54 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '1'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "110";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S55;
when S55 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '1'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "110";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S56;
when S56 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '1'; en_out <= '0';
finish <= '0';
round <= "110";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S57;
-- round 8 --
when S57 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "111";
en_key_out <= '1';
sel_in <= '1';
NEXT_STATE <= S58;
when S58 =>
en1 <= '1'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "111";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S59;
when S59 =>
en1 <= '0'; en2 <= '1'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "111";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S60;
when S60 =>
en1 <= '0'; en2 <= '0'; en3 <= '1'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "111";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S61;
when S61 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '1';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "111";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S62;
when S62 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '1'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "111";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S63;
when S63 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '1'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "111";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S64;
when S64 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '1'; en_out <= '0';
finish <= '0';
round <= "111";
en_key_out <= '0';
sel_in <= '1';
NEXT_STATE <= S65;
-- output transformation --
when S65 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '0';
round <= "111";
en_key_out <= '1';
sel_in <= '0';
NEXT_STATE <= S66;
when S66 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '1';
finish <= '0';
round <= "111";
en_key_out <= '0';
sel_in <= '0';
NEXT_STATE <= S67;
when S67 =>
en1 <= '0'; en2 <= '0'; en3 <= '0'; en4 <= '0';
en5 <= '0'; en6 <= '0'; en7 <= '0'; en_out <= '0';
finish <= '1';
round <= "111";
en_key_out <= '0';
sel_in <= '0';
NEXT_STATE <= S1;
when others =>
assert('1')
report "Illegal state";
end case;
end if;
end process;
process (ck)
begin
if ((ck AND NOT ck'STABLE) = '1') then
CURRENT_STATE <= NEXT_STATE;
end if;
end process;
end fsm;