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

Subversion Repositories c16

[/] [c16/] [trunk/] [vhdl/] [cpu_pack.vhd] - Diff between revs 9 and 26

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 9 Rev 26
--      Package File Template
--      Package File Template
--
--
--      Purpose: This package defines supplemental types, subtypes, 
--      Purpose: This package defines supplemental types, subtypes, 
--               constants, and functions 
--               constants, and functions 
 
 
library IEEE;
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_1164.all;
 
 
package cpu_pack is
package cpu_pack is
 
 
        type cycle is ( M1, M2, M3, M4, M5 );
        type cycle is ( M1, M2, M3, M4, M5 );
 
 
        type op_category is (
        type op_category is (
                INTR,
                INTR,
                HALT_WAIT,
                HALT_WAIT,
 
 
                -- 0X
                -- 0X
                HALT,
                HALT,
                NOP,
                NOP,
                JMP_i,
                JMP_i,
                JMP_RRNZ_i,
                JMP_RRNZ_i,
                JMP_RRZ_i,
                JMP_RRZ_i,
                CALL_i,
                CALL_i,
                CALL_RR,
                CALL_RR,
                RET,
                RET,
                MOVE_SPi_RR,
                MOVE_SPi_RR,
                MOVE_SPi_RS,
                MOVE_SPi_RS,
                MOVE_SPi_RU,
                MOVE_SPi_RU,
                MOVE_SPi_LL,
                MOVE_SPi_LL,
                MOVE_SPi_LS,
                MOVE_SPi_LS,
                MOVE_SPi_LU,
                MOVE_SPi_LU,
                MOVE_RR_dSP,
                MOVE_RR_dSP,
                MOVE_R_dSP,
                MOVE_R_dSP,
 
 
                -- 1X
                -- 1X
                AND_RR_i,
                AND_RR_i,
                OR_RR_i,
                OR_RR_i,
                XOR_RR_i,
                XOR_RR_i,
                SEQ_RR_i,
                SEQ_RR_i,
                SNE_RR_i,
                SNE_RR_i,
                SGE_RR_i,
                SGE_RR_i,
                SGT_RR_i,
                SGT_RR_i,
                SLE_RR_i,
                SLE_RR_i,
 
 
                -- 2X
                -- 2X
                SLT_RR_i,
                SLT_RR_i,
                SHS_RR_i,
                SHS_RR_i,
                SHI_RR_i,
                SHI_RR_i,
                SLS_RR_i,
                SLS_RR_i,
                SLO_RR_i,
                SLO_RR_i,
                CLRW_dSP,
                CLRW_dSP,
                CLRB_dSP,
                CLRB_dSP,
                IN_ci_RU,
                IN_ci_RU,
                OUT_R_ci,
                OUT_R_ci,
 
 
                -- 3X
                -- 3X
                AND_LL_RR,
                AND_LL_RR,
                OR_LL_RR,
                OR_LL_RR,
                XOR_LL_RR,
                XOR_LL_RR,
                SEQ_LL_RR,
                SEQ_LL_RR,
                SNE_LL_RR,
                SNE_LL_RR,
                SGE_LL_RR,
                SGE_LL_RR,
                SGT_LL_RR,
                SGT_LL_RR,
                SLE_LL_RR,
                SLE_LL_RR,
                SLT_LL_RR,
                SLT_LL_RR,
                SHS_LL_RR,
                SHS_LL_RR,
                SHI_LL_RR,
                SHI_LL_RR,
                SLS_LL_RR,
                SLS_LL_RR,
                SLO_LL_RR,
                SLO_LL_RR,
                LNOT_RR,
                LNOT_RR,
                NEG_RR,
                NEG_RR,
                NOT_RR,
                NOT_RR,
 
 
                -- 4X
                -- 4X
                MOVE_LL_RR,
                MOVE_LL_RR,
                MOVE_LL_cRR,
                MOVE_LL_cRR,
                MOVE_L_cRR,
                MOVE_L_cRR,
                MOVE_RR_LL,
                MOVE_RR_LL,
                MOVE_RR_cLL,
                MOVE_RR_cLL,
                MOVE_R_cLL,
                MOVE_R_cLL,
                MOVE_cRR_RR,
                MOVE_cRR_RR,
                MOVE_cRR_RS,
                MOVE_cRR_RS,
                MOVE_cRR_RU,
                MOVE_cRR_RU,
                MOVE_ci_RR,
                MOVE_ci_RR,
                MOVE_ci_RS,
                MOVE_ci_RS,
                MOVE_ci_RU,
                MOVE_ci_RU,
                MOVE_ci_LL,
                MOVE_ci_LL,
                MOVE_ci_LS,
                MOVE_ci_LS,
                MOVE_ci_LU,
                MOVE_ci_LU,
                MOVE_RR_SP,
                MOVE_RR_SP,
 
 
                -- 5X
                -- 5X
                LSL_RR_i,
                LSL_RR_i,
                ASR_RR_i,
                ASR_RR_i,
                LSR_RR_i,
                LSR_RR_i,
                LSL_LL_RR,
                LSL_LL_RR,
                ASR_LL_RR,
                ASR_LL_RR,
                LSR_LL_RR,
                LSR_LL_RR,
                ADD_LL_RR,
                ADD_LL_RR,
                SUB_LL_RR,
                SUB_LL_RR,
                MOVE_RR_ci,
                MOVE_RR_ci,
                MOVE_R_ci,
                MOVE_R_ci,
                MOVE_RR_uSP,
                MOVE_RR_uSP,
                MOVE_R_uSP,
                MOVE_R_uSP,
 
 
                -- 6X
                -- 6X
                MOVE_uSP_RR,
                MOVE_uSP_RR,
                MOVE_uSP_RS,
                MOVE_uSP_RS,
                MOVE_uSP_RU,
                MOVE_uSP_RU,
                MOVE_uSP_LL,
                MOVE_uSP_LL,
                MOVE_uSP_LS,
                MOVE_uSP_LS,
                MOVE_uSP_LU,
                MOVE_uSP_LU,
                LEA_uSP_RR,
                LEA_uSP_RR,
                MOVE_dRR_dLL,
                MOVE_dRR_dLL,
                MOVE_RRi_LLi,
                MOVE_RRi_LLi,
 
 
                -- 7X
                -- 7X
                MUL_IS,
                MUL_IS,
                MUL_IU,
                MUL_IU,
                DIV_IS,
                DIV_IS,
                DIV_IU,
                DIV_IU,
                MD_STEP,
                MD_STEP,
                MD_FIN,
                MD_FIN,
                MOD_FIN,
                MOD_FIN,
                EI,
                EI,
                RETI,
                RETI,
                DI,
                DI,
 
 
                -- 9X ... FX
                -- 9X ... FX
                ADD_RR_I,
                ADD_RR_I,
                SUB_RR_I,
                SUB_RR_I,
                MOVE_I_RR,
                MOVE_I_RR,
                ADD_SP_I,
                ADD_SP_I,
                SEQ_LL_I,
                SEQ_LL_I,
                MOVE_I_LL,
                MOVE_I_LL,
 
 
                undef );
                undef );
 
 
        type SP_OP is ( SP_NOP, SP_INC, SP_LOAD );
        type SP_OP is ( SP_NOP, SP_INC, SP_LOAD );
 
 
        -- ALU codes
        -- ALU codes
        --
        --
        constant ALU_X_HS_Y   : std_logic_vector(4 downto 0) := "00000";
        constant ALU_X_HS_Y   : std_logic_vector(4 downto 0) := "00000";
        constant ALU_X_LO_Y   : std_logic_vector(4 downto 0) := "00001";
        constant ALU_X_LO_Y   : std_logic_vector(4 downto 0) := "00001";
        constant ALU_X_HI_Y   : std_logic_vector(4 downto 0) := "00010";
        constant ALU_X_HI_Y   : std_logic_vector(4 downto 0) := "00010";
        constant ALU_X_LS_Y   : std_logic_vector(4 downto 0) := "00011";
        constant ALU_X_LS_Y   : std_logic_vector(4 downto 0) := "00011";
        constant ALU_X_GE_Y   : std_logic_vector(4 downto 0) := "00100";
        constant ALU_X_GE_Y   : std_logic_vector(4 downto 0) := "00100";
        constant ALU_X_LT_Y   : std_logic_vector(4 downto 0) := "00101";
        constant ALU_X_LT_Y   : std_logic_vector(4 downto 0) := "00101";
        constant ALU_X_GT_Y   : std_logic_vector(4 downto 0) := "00110";
        constant ALU_X_GT_Y   : std_logic_vector(4 downto 0) := "00110";
        constant ALU_X_LE_Y   : std_logic_vector(4 downto 0) := "00111";
        constant ALU_X_LE_Y   : std_logic_vector(4 downto 0) := "00111";
        constant ALU_X_EQ_Y   : std_logic_vector(4 downto 0) := "01000";
        constant ALU_X_EQ_Y   : std_logic_vector(4 downto 0) := "01000";
        constant ALU_X_NE_Y   : std_logic_vector(4 downto 0) := "01001";
        constant ALU_X_NE_Y   : std_logic_vector(4 downto 0) := "01001";
 
 
        constant ALU_NEG_Y    : std_logic_vector(4 downto 0) := "01100";
        constant ALU_NEG_Y    : std_logic_vector(4 downto 0) := "01100";
        constant ALU_X_SUB_Y  : std_logic_vector(4 downto 0) := "01101";
        constant ALU_X_SUB_Y  : std_logic_vector(4 downto 0) := "01101";
        constant ALU_MOVE_Y   : std_logic_vector(4 downto 0) := "01110";
        constant ALU_MOVE_Y   : std_logic_vector(4 downto 0) := "01110";
        constant ALU_X_ADD_Y  : std_logic_vector(4 downto 0) := "01111";
        constant ALU_X_ADD_Y  : std_logic_vector(4 downto 0) := "01111";
 
 
        constant ALU_X_AND_Y  : std_logic_vector(4 downto 0) := "10000";
        constant ALU_X_AND_Y  : std_logic_vector(4 downto 0) := "10000";
        constant ALU_X_OR_Y   : std_logic_vector(4 downto 0) := "10001";
        constant ALU_X_OR_Y   : std_logic_vector(4 downto 0) := "10001";
        constant ALU_X_XOR_Y  : std_logic_vector(4 downto 0) := "10010";
        constant ALU_X_XOR_Y  : std_logic_vector(4 downto 0) := "10010";
        constant ALU_NOT_Y    : std_logic_vector(4 downto 0) := "10011";
        constant ALU_NOT_Y    : std_logic_vector(4 downto 0) := "10011";
 
 
        constant ALU_X_LSR_Y  : std_logic_vector(4 downto 0) := "10100";
        constant ALU_X_LSR_Y  : std_logic_vector(4 downto 0) := "10100";
        constant ALU_X_ASR_Y  : std_logic_vector(4 downto 0) := "10101";
        constant ALU_X_ASR_Y  : std_logic_vector(4 downto 0) := "10101";
        constant ALU_X_LSL_Y  : std_logic_vector(4 downto 0) := "10110";
        constant ALU_X_LSL_Y  : std_logic_vector(4 downto 0) := "10110";
        constant ALU_X_MIX_Y  : std_logic_vector(4 downto 0) := "10111";
        constant ALU_X_MIX_Y  : std_logic_vector(4 downto 0) := "10111";
 
 
        constant ALU_MUL_IU  : std_logic_vector(4 downto 0) := "11000";
        constant ALU_MUL_IU  : std_logic_vector(4 downto 0) := "11000";
        constant ALU_MUL_IS  : std_logic_vector(4 downto 0) := "11001";
        constant ALU_MUL_IS  : std_logic_vector(4 downto 0) := "11001";
        constant ALU_DIV_IU  : std_logic_vector(4 downto 0) := "11010";
        constant ALU_DIV_IU  : std_logic_vector(4 downto 0) := "11010";
        constant ALU_DIV_IS  : std_logic_vector(4 downto 0) := "11011";
        constant ALU_DIV_IS  : std_logic_vector(4 downto 0) := "11011";
 
 
        constant ALU_MD_STP  : std_logic_vector(4 downto 0) := "11100";
        constant ALU_MD_STP  : std_logic_vector(4 downto 0) := "11100";
        constant ALU_MD_FIN  : std_logic_vector(4 downto 0) := "11101";
        constant ALU_MD_FIN  : std_logic_vector(4 downto 0) := "11101";
        constant ALU_MOD_FIN : std_logic_vector(4 downto 0) := "11110";
        constant ALU_MOD_FIN : std_logic_vector(4 downto 0) := "11110";
 
 
        constant ALU_ANY     : std_logic_vector(4 downto 0) := ALU_X_AND_Y;
        constant ALU_ANY     : std_logic_vector(4 downto 0) := ALU_X_AND_Y;
--------------------------------------------------------------
--------------------------------------------------------------
        constant SA_43_0    : std_logic_vector(1 downto 0) := "00";
        constant SA_43_0    : std_logic_vector(1 downto 0) := "00";
        constant SA_43_FFFF : std_logic_vector(1 downto 0) := "01";      -- last bit 1 !!!
        constant SA_43_FFFF : std_logic_vector(1 downto 0) := "01";      -- last bit 1 !!!
        constant SA_43_I16  : std_logic_vector(1 downto 0) := "10";
        constant SA_43_I16  : std_logic_vector(1 downto 0) := "10";
        constant SA_43_I8S  : std_logic_vector(1 downto 0) := "11";
        constant SA_43_I8S  : std_logic_vector(1 downto 0) := "11";
 
 
        constant SA_21_0    : std_logic_vector(1 downto 0) := "00";
        constant SA_21_0    : std_logic_vector(1 downto 0) := "00";
        constant SA_21_LL   : std_logic_vector(1 downto 0) := "01";
        constant SA_21_LL   : std_logic_vector(1 downto 0) := "01";
        constant SA_21_RR   : std_logic_vector(1 downto 0) := "10";
        constant SA_21_RR   : std_logic_vector(1 downto 0) := "10";
        constant SA_21_SP   : std_logic_vector(1 downto 0) := "11";
        constant SA_21_SP   : std_logic_vector(1 downto 0) := "11";
 
 
        constant ADR_cSP_L  : std_logic_vector(4 downto 0) := SA_43_0    & SA_21_SP & '0';
        constant ADR_cSP_L  : std_logic_vector(4 downto 0) := SA_43_0    & SA_21_SP & '0';
        constant ADR_cRR_L  : std_logic_vector(4 downto 0) := SA_43_0    & SA_21_RR & '0';
        constant ADR_cRR_L  : std_logic_vector(4 downto 0) := SA_43_0    & SA_21_RR & '0';
        constant ADR_cLL_L  : std_logic_vector(4 downto 0) := SA_43_0    & SA_21_LL & '0';
        constant ADR_cLL_L  : std_logic_vector(4 downto 0) := SA_43_0    & SA_21_LL & '0';
        constant ADR_cI16_L : std_logic_vector(4 downto 0) := SA_43_I16  & SA_21_0  & '0';
        constant ADR_cI16_L : std_logic_vector(4 downto 0) := SA_43_I16  & SA_21_0  & '0';
        constant ADR_16SP_L : std_logic_vector(4 downto 0) := SA_43_I16  & SA_21_SP & '0';
        constant ADR_16SP_L : std_logic_vector(4 downto 0) := SA_43_I16  & SA_21_SP & '0';
        constant ADR_8SP_L  : std_logic_vector(4 downto 0) := SA_43_I8S  & SA_21_SP & '0';
        constant ADR_8SP_L  : std_logic_vector(4 downto 0) := SA_43_I8S  & SA_21_SP & '0';
        constant ADR_IO     : std_logic_vector(4 downto 0) := SA_43_I8S  & SA_21_0  & '0';
        constant ADR_IO     : std_logic_vector(4 downto 0) := SA_43_I8S  & SA_21_0  & '0';
 
 
        constant ADR_cSP_H  : std_logic_vector(4 downto 0) := SA_43_0    & SA_21_SP & '1';
        constant ADR_cSP_H  : std_logic_vector(4 downto 0) := SA_43_0    & SA_21_SP & '1';
        constant ADR_cRR_H  : std_logic_vector(4 downto 0) := SA_43_0    & SA_21_RR & '1';
        constant ADR_cRR_H  : std_logic_vector(4 downto 0) := SA_43_0    & SA_21_RR & '1';
        constant ADR_cLL_H  : std_logic_vector(4 downto 0) := SA_43_0    & SA_21_LL & '1';
        constant ADR_cLL_H  : std_logic_vector(4 downto 0) := SA_43_0    & SA_21_LL & '1';
        constant ADR_cI16_H : std_logic_vector(4 downto 0) := SA_43_I16  & SA_21_0  & '1';
        constant ADR_cI16_H : std_logic_vector(4 downto 0) := SA_43_I16  & SA_21_0  & '1';
        constant ADR_16SP_H : std_logic_vector(4 downto 0) := SA_43_I16  & SA_21_SP & '1';
        constant ADR_16SP_H : std_logic_vector(4 downto 0) := SA_43_I16  & SA_21_SP & '1';
        constant ADR_8SP_H  : std_logic_vector(4 downto 0) := SA_43_I8S  & SA_21_SP & '1';
        constant ADR_8SP_H  : std_logic_vector(4 downto 0) := SA_43_I8S  & SA_21_SP & '1';
 
 
        constant ADR_dSP    : std_logic_vector(4 downto 0) := SA_43_FFFF & SA_21_SP & '0';
        constant ADR_dSP    : std_logic_vector(4 downto 0) := SA_43_FFFF & SA_21_SP & '0';
        constant ADR_dRR    : std_logic_vector(4 downto 0) := SA_43_FFFF & SA_21_RR & '0';
        constant ADR_dRR    : std_logic_vector(4 downto 0) := SA_43_FFFF & SA_21_RR & '0';
        constant ADR_dLL    : std_logic_vector(4 downto 0) := SA_43_FFFF & SA_21_LL & '0';
        constant ADR_dLL    : std_logic_vector(4 downto 0) := SA_43_FFFF & SA_21_LL & '0';
        constant ADR_SPi    : std_logic_vector(4 downto 0) := SA_43_FFFF & SA_21_SP & '1';
        constant ADR_SPi    : std_logic_vector(4 downto 0) := SA_43_FFFF & SA_21_SP & '1';
        constant ADR_RRi    : std_logic_vector(4 downto 0) := ADR_cRR_L;
        constant ADR_RRi    : std_logic_vector(4 downto 0) := ADR_cRR_L;
        constant ADR_LLi    : std_logic_vector(4 downto 0) := ADR_cLL_L;
        constant ADR_LLi    : std_logic_vector(4 downto 0) := ADR_cLL_L;
--------------------------------------------------------------
--------------------------------------------------------------
        constant SX_LL   : std_logic_vector(1 downto 0) := "00";
        constant SX_LL   : std_logic_vector(1 downto 0) := "00";
        constant SX_RR   : std_logic_vector(1 downto 0) := "01";
        constant SX_RR   : std_logic_vector(1 downto 0) := "01";
        constant SX_SP   : std_logic_vector(1 downto 0) := "10";
        constant SX_SP   : std_logic_vector(1 downto 0) := "10";
        constant SX_PC   : std_logic_vector(1 downto 0) := "11";
        constant SX_PC   : std_logic_vector(1 downto 0) := "11";
        constant SX_ANY  : std_logic_vector(1 downto 0) := SX_RR;
        constant SX_ANY  : std_logic_vector(1 downto 0) := SX_RR;
--------------------------------------------------------------
--------------------------------------------------------------
        constant SY_SY0  : std_logic_vector(3 downto 0) := "0000";
        constant SY_SY0  : std_logic_vector(3 downto 0) := "0000";
        constant SY_SY1  : std_logic_vector(3 downto 0) := "0001";
        constant SY_SY1  : std_logic_vector(3 downto 0) := "0001";
        constant SY_SY2  : std_logic_vector(3 downto 0) := "0010";
        constant SY_SY2  : std_logic_vector(3 downto 0) := "0010";
        constant SY_SY3  : std_logic_vector(3 downto 0) := "0011";
        constant SY_SY3  : std_logic_vector(3 downto 0) := "0011";
        constant SY_I16  : std_logic_vector(3 downto 0) := "0100";
        constant SY_I16  : std_logic_vector(3 downto 0) := "0100";
        constant SY_RR   : std_logic_vector(3 downto 0) := "0101";
        constant SY_RR   : std_logic_vector(3 downto 0) := "0101";
 
 
        constant SY_SI8  : std_logic_vector(3 downto 0) := "1000";
        constant SY_SI8  : std_logic_vector(3 downto 0) := "1000";
        constant SY_UI8  : std_logic_vector(3 downto 0) := "1001";
        constant SY_UI8  : std_logic_vector(3 downto 0) := "1001";
        constant SY_SQ   : std_logic_vector(3 downto 0) := "1010";
        constant SY_SQ   : std_logic_vector(3 downto 0) := "1010";
        constant SY_UQ   : std_logic_vector(3 downto 0) := "1011";
        constant SY_UQ   : std_logic_vector(3 downto 0) := "1011";
        constant SY_SM   : std_logic_vector(3 downto 0) := "1100";
        constant SY_SM   : std_logic_vector(3 downto 0) := "1100";
        constant SY_UM   : std_logic_vector(3 downto 0) := "1101";
        constant SY_UM   : std_logic_vector(3 downto 0) := "1101";
        constant SY_ANY  : std_logic_vector(3 downto 0) := SY_RR;
        constant SY_ANY  : std_logic_vector(3 downto 0) := SY_RR;
--------------------------------------------------------------
--------------------------------------------------------------
        constant PC_NEXT : std_logic_vector(2 downto 0) := "000";        -- count up
        constant PC_NEXT : std_logic_vector(2 downto 0) := "000";        -- count up
        constant PC_JMP  : std_logic_vector(2 downto 0) := "001";        -- JMP/CALL
        constant PC_JMP  : std_logic_vector(2 downto 0) := "001";        -- JMP/CALL
        constant PC_RETH : std_logic_vector(2 downto 0) := "010";        -- RET (H)
        constant PC_RETH : std_logic_vector(2 downto 0) := "010";        -- RET (H)
        constant PC_RETL : std_logic_vector(2 downto 0) := "011";        -- RET (L)
        constant PC_RETL : std_logic_vector(2 downto 0) := "011";        -- RET (L)
        constant PC_WAIT : std_logic_vector(2 downto 0) := "100";        -- WAIT
        constant PC_WAIT : std_logic_vector(2 downto 0) := "100";        -- WAIT
        constant PC_JPRR : std_logic_vector(2 downto 0) := "101";        -- JMP (RR)
        constant PC_JPRR : std_logic_vector(2 downto 0) := "101";        -- JMP (RR)
        constant PC_INT  : std_logic_vector(2 downto 0) := "110";        -- INT
        constant PC_INT  : std_logic_vector(2 downto 0) := "110";        -- INT
--------------------------------------------------------------
--------------------------------------------------------------
 
 
end cpu_pack;
end cpu_pack;
 
 
package body cpu_pack is
package body cpu_pack is
 
 
end cpu_pack;
end cpu_pack;
 
 

powered by: WebSVN 2.1.0

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