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

Subversion Repositories idea

[/] [idea/] [trunk/] [fsm/] [key_regulator/] [kontrol_kuncix.fsm] - Rev 9

Compare with Previous | Blame | View Log

--Nama file : kontrol_kuncix.fsm
--Deskripsi : kontrol pembangkitan (pengaturan) kunci
--Author    : Mas Adit
--Tanggal  : 24 Agustus 2001

entity kontrol_kuncix is
port (
        clk : in bit;
        start : in bit;
        rst : in bit;
        f_enkey : in bit;
        f_invmul : in bit;
        f_invadd : in bit;
        rst_all : out bit;
        key_ready : out bit;
        s_enkey : out bit;
        s_invmul : out bit;
        s_invadd : out bit;
        vdd : in bit;
        vss : in bit
);
end kontrol_kuncix;

architecture STATE_MACHINE of kontrol_kuncix is

type STATE_TYPE is (S0, S2, S3, S4, S5, S6, S7, S8, S9);
        --pragma CLOCK clk
        --pragma CURRENT_STATE CURRENT_STATE
        --pragma NEXT_STATE NEXT_STATE
signal CURRENT_STATE, NEXT_STATE : STATE_TYPE;

begin

process (CURRENT_STATE, rst, start, f_enkey, f_invmul, f_invadd)
begin
        if (rst = '1') then
                NEXT_STATE <= S0;
                rst_all <= '1';
                s_enkey <= '0';
                s_invmul <='0';
                key_ready <= '0';
                s_invadd <= '0';
        else


        case CURRENT_STATE is

        when S0 =>
                if (start = '1') then
                        if (f_enkey = '0') then
                                NEXT_STATE <= S3;
                                rst_all <= '0';
                                s_enkey <= '1';
                                s_invmul <='0';
                                key_ready <= '0';
                                s_invadd <= '0';
                        else
                                NEXT_STATE <= S2;
                                rst_all <= '0';
                                s_enkey <= '0';
                                s_invmul <='0';
                                key_ready <= '0';
                                s_invadd <= '0';
                        end if;
                else
                        NEXT_STATE <= S0;
                        rst_all <= '1';
                        s_enkey <= '0';
                        s_invmul <='0';
                        key_ready <= '0';
                        s_invadd <= '0';
                end if;
                when S3 =>
                        NEXT_STATE <= S0;
                        rst_all <= '1';
                        s_enkey <= '0';
                        s_invmul <='0';
                        key_ready <= '0';
                        s_invadd <= '0';
                when S2 =>
                        if (f_invmul = '0') then
                                NEXT_STATE <= S4;
                                rst_all <= '0';
                                s_enkey <= '0';
                                s_invmul <='1';
                                key_ready <= '0';
                                s_invadd <= '0';
                        else
                                NEXT_STATE <= S5;
                                rst_all <= '0';
                                s_enkey <= '0';
                                s_invmul <='0';
                                key_ready <= '0';
                                s_invadd <= '0';
                        end if;
                        when S4 =>
                        if (f_invadd = '0') then
                                NEXT_STATE <= S6;
                                rst_all <= '0';
                                s_enkey <= '0';
                                s_invmul <='1';
                                key_ready <= '0';
                                s_invadd <= '1';
                        else
                                NEXT_STATE <= S7;
                                rst_all <= '0';
                                s_enkey <= '0';
                                s_invmul <='1';
                                key_ready <= '0';
                                s_invadd <= '0';
                        end if;
                        when S5 =>
                        if (f_invadd = '0') then
                                NEXT_STATE <= S8;
                                rst_all <= '0';
                                s_enkey <= '0';
                                s_invmul <='0';
                                key_ready <= '0';
                                s_invadd <= '1';
                        else
                                NEXT_STATE <= S9;
                                rst_all <= '0';
                                s_enkey <= '0';
                                s_invmul <='0';
                                key_ready <= '1';
                                s_invadd <= '0';
                        end if;



                        when S6 =>
                        NEXT_STATE <= S6;
                        rst_all <= '0';
                        s_enkey <= '0';
                        s_invmul <='1';
                        key_ready <= '0';
                        s_invadd <= '1';

                        when S7 =>
                        NEXT_STATE <= S7;
                        rst_all <= '0';
                        s_enkey <= '0';
                        s_invmul <='1';
                        key_ready <= '0';
                        s_invadd <= '0';

                        when S8 =>
                        NEXT_STATE <= S8;
                        rst_all <= '0';
                        s_enkey <= '0';
                        s_invmul <='0';
                        key_ready <= '0';
                        s_invadd <= '1';

                        when S9 =>
                        NEXT_STATE <= S9;
                        rst_all <= '0';
                        s_enkey <= '0';
                        s_invmul <='0';
                        key_ready <= '1';
                        s_invadd <= '0';

        end case;
        end if;
end process;

process (clk)
begin
        if ((clk = '0') and not(clk'STABLE)) then
                CURRENT_STATE <= NEXT_STATE;
        end if;
end process;

end STATE_MACHINE;









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.