OpenCores
URL https://opencores.org/ocsvn/hpc-16/hpc-16/trunk

Subversion Repositories hpc-16

[/] [hpc-16/] [tags/] [release1/] [impl0/] [rtl/] [vhdl/] [con_pkg.vhd] - Rev 15

Compare with Previous | Blame | View Log

--------------------------------------------------------------
-- con_pkg.vhd
--------------------------------------------------------------
-- project: HPC-16 Microprocessor
--
-- usage: constants, component and type declarations for control unit(fsm) 
--
-- dependency: sync.vhd
--
---------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
 
package con_pkg is
 
-- intruction catagories
   constant mov_rn_rm    : std_logic_vector(7 downto 0) := b"00000_001";
   constant mov_sp_rm    : std_logic_vector(7 downto 0) := b"00000_010";
   constant mov_rn_sp    : std_logic_vector(7 downto 0) := b"00000_100";
 
   constant ld_rn_rb     : std_logic_vector(7 downto 0) := b"00001_000";
   constant ld_rn_rb_disp     : std_logic_vector(7 downto 0) := b"00001_001";
   constant ld_rn_sp     : std_logic_vector(7 downto 0) := b"00001_010";
   constant ld_rn_sp_disp     : std_logic_vector(7 downto 0) := b"00001_100";
 
   constant st_rn_rb     : std_logic_vector(7 downto 0) := b"00010_000";
   constant st_rn_rb_disp     : std_logic_vector(7 downto 0) := b"00010_001";
   constant st_rn_sp     : std_logic_vector(7 downto 0) := b"00010_010";
   constant st_rn_sp_disp     : std_logic_vector(7 downto 0) := b"00010_100";
 
   constant lbzx_rn_rb     : std_logic_vector(7 downto 0) := b"00011_000";
   constant lbzx_rn_rb_disp     : std_logic_vector(7 downto 0) := b"00011_100";
   constant lbsx_rn_rb     : std_logic_vector(7 downto 0) := b"00011_001";
   constant lbsx_rn_rb_disp     : std_logic_vector(7 downto 0) := b"00011_101";
 
   constant sb_rn_rb     : std_logic_vector(7 downto 0) := b"00100_001";
   constant sb_rn_rb_disp     : std_logic_vector(7 downto 0) := b"00100_010";
 
   constant sing_dec   : std_logic_vector(7 downto 0) := b"00101_000";
   constant sing_inc   : std_logic_vector(7 downto 0) := b"00101_001";
 
   constant alur    : std_logic_vector(4 downto 0) := "00110";
 
   constant shiftr  : std_logic_vector(4 downto 0) := "00111";
 
   constant cmp_cmp    : std_logic_vector(7 downto 0) := b"01000_000";
   constant cmp_tst    : std_logic_vector(7 downto 0) := b"01000_101";
 
   constant li_rn     : std_logic_vector(7 downto 0) := b"01001_001";
   constant li_sp     : std_logic_vector(7 downto 0) := b"01001_010";
 
   constant alui   : std_logic_vector(4 downto 0) := "01010";
 
   constant shifti : std_logic_vector(4 downto 0) := "01011";
 
   constant cmpi_cmp   : std_logic_vector(7 downto 0) := b"01100_000";
   constant cmpi_tst   : std_logic_vector(7 downto 0) := b"01100_101";
 
   constant alusp_sub  : std_logic_vector(7 downto 0) := b"01101_000";
   constant alusp_add  : std_logic_vector(7 downto 0) := b"01101_001";
 
   constant stk_pushr    : std_logic_vector(7 downto 0) := b"01110_000";
   constant stk_pushf    : std_logic_vector(7 downto 0) := b"01110_001";
   constant stk_popr    : std_logic_vector(7 downto 0) := b"01110_100";
   constant stk_popf    : std_logic_vector(7 downto 0) := b"01110_101";
 
   constant acall   : std_logic_vector(7 downto 0) := b"01111_001";
 
   constant lcall   : std_logic_vector(7 downto 0) := b"01111_010";
 
   constant scall   : std_logic_vector(4 downto 0) := "10000"; 
 
   constant ret    : std_logic_vector(4 downto 0) := "10001";
 
   constant int    : std_logic_vector(4 downto 0) := "10010";
 
   constant into   : std_logic_vector(4 downto 0) := "10011";
 
   constant iret   : std_logic_vector(4 downto 0) := "10100";
 
   constant ajmp    : std_logic_vector(7 downto 0) := b"10101_001";
 
   constant ljmp    : std_logic_vector(7 downto 0) := b"10101_010";
 
   constant sjmp    : std_logic_vector(4 downto 0) := "10110"; 
 
   constant jcc    : std_logic_vector(4 downto 0) := "10111";
 
   constant fop_clc    : std_logic_vector(7 downto 0) := b"11000_000";
   constant fop_stc    : std_logic_vector(7 downto 0) := b"11000_001";
   constant fop_cmc    : std_logic_vector(7 downto 0) := b"11000_010";
   constant fop_cli    : std_logic_vector(7 downto 0) := b"11000_100";  
   constant fop_sti    : std_logic_vector(7 downto 0) := b"11000_101";   
 
   constant nop    : std_logic_vector(4 downto 0) := "11110";
 
   constant hlt    : std_logic_vector(4 downto 0) := "11111";
 
   -- subop/subtype field
 
   constant a_sub         : std_logic_vector(2 downto 0) := "000";
   constant a_add         : std_logic_vector(2 downto 0) := "001";
   constant a_sbb         : std_logic_vector(2 downto 0) := "010";
   constant a_adc         : std_logic_vector(2 downto 0) := "011";
   constant a_not         : std_logic_vector(2 downto 0) := "100";
   constant a_and         : std_logic_vector(2 downto 0) := "101";
   constant a_or          : std_logic_vector(2 downto 0) := "110";
   constant a_xor         : std_logic_vector(2 downto 0) := "111";
 
   constant s_sll       : std_logic_vector(2 downto 0) := "000";
   constant s_slr       : std_logic_vector(2 downto 0) := "001";
   constant s_sal       : std_logic_vector(2 downto 0) := "010";
   constant s_sar       : std_logic_vector(2 downto 0) := "011";
   constant s_rol       : std_logic_vector(2 downto 0) := "100";
   constant s_ror       : std_logic_vector(2 downto 0) := "101";
   constant s_rcl       : std_logic_vector(2 downto 0) := "110";
   constant s_rcr       : std_logic_vector(2 downto 0) := "111";
 
   -- alu operations
   constant asopsel_sub : std_logic_vector(3 downto 0) := "0000";
   constant asopsel_add : std_logic_vector(3 downto 0) := "0001";
   constant asopsel_sbb : std_logic_vector(3 downto 0) := "0010";
   constant asopsel_adc : std_logic_vector(3 downto 0) := "0011";
   constant asopsel_not : std_logic_vector(3 downto 0) := "0100";
   constant asopsel_and : std_logic_vector(3 downto 0) := "0101";
   constant asopsel_or  : std_logic_vector(3 downto 0) := "0110";
   constant asopsel_xor : std_logic_vector(3 downto 0) := "0111";
 
   -- shifter operations
   constant asopsel_sll : std_logic_vector(3 downto 0) := "1000";
   constant asopsel_slr : std_logic_vector(3 downto 0) := "1001";
   constant asopsel_sal : std_logic_vector(3 downto 0) := "1010";
   constant asopsel_sar : std_logic_vector(3 downto 0) := "1011";
   constant asopsel_rol : std_logic_vector(3 downto 0) := "1100";
   constant asopsel_ror : std_logic_vector(3 downto 0) := "1101";
   constant asopsel_rcl : std_logic_vector(3 downto 0) := "1110";
   constant asopsel_rcr : std_logic_vector(3 downto 0) := "1111";
 
   constant intno_mux_sel_invalid : std_logic_vector(2 downto 0) := "000";
   constant intno_mux_sel_align : std_logic_vector(2 downto 0) := "001";
   constant intno_mux_sel_stk : std_logic_vector(2 downto 0) := "010";
   constant intno_mux_sel_df  : std_logic_vector(2 downto 0) := "011"; 
   constant intno_mux_sel_ir : std_logic_vector(2 downto 0) := "100"; 
   constant intno_mux_sel_intr : std_logic_vector(2 downto 0) := "101"; 
 
   constant adin_mux_sel_tr2 : std_logic_vector(2 downto 0) := "000";
   constant adin_mux_sel_tr5 : std_logic_vector(2 downto 0) := "001";
   constant adin_mux_sel_sp  : std_logic_vector(2 downto 0) := "010";
   constant adin_mux_sel_mdri : std_logic_vector(2 downto 0) := "011";
   constant adin_mux_sel_mdri_high : std_logic_vector(2 downto 0) := "100";
   constant adin_mux_sel_mdri_low : std_logic_vector(2 downto 0) := "101";
 
   constant pcin_mux_sel_aluout : std_logic_vector(1 downto 0) := "00";
   constant pcin_mux_sel_intno : std_logic_vector(1 downto 0) := "01";
   constant pcin_mux_sel_mdri : std_logic_vector(1 downto 0) := "10";
 
   constant spin_mux_sel_aluout : std_logic := '0';
   constant spin_mux_sel_mdri : std_logic := '1';
 
   constant alua_mux_sel_pc : std_logic_vector(1 downto 0) := "00";
   constant alua_mux_sel_sp : std_logic_vector(1 downto 0) := "01";
   constant alua_mux_sel_tr1 : std_logic_vector(1 downto 0) := "10";
   constant alua_mux_sel_tr2 : std_logic_vector(1 downto 0) := "11";
 
   constant alub_mux_sel_tr2 : std_logic_vector(2 downto 0) := "000";
   constant alub_mux_sel_2 : std_logic_vector(2 downto 0) := "001";
   constant alub_mux_sel_1 : std_logic_vector(2 downto 0) := "010";
   constant alub_mux_sel_0 : std_logic_vector(2 downto 0) := "011";
   constant alub_mux_sel_tr3 : std_logic_vector(2 downto 0) := "100";
   constant alub_mux_sel_tr4 : std_logic_vector(2 downto 0) := "101";
   constant alub_mux_sel_mdri : std_logic_vector(2 downto 0) := "110";
 
   constant sbin_mux_sel_tr2 : std_logic := '0';
   constant sbin_mux_sel_ir : std_logic := '1';
 
   constant coszin_mux_sel_asresult : std_logic := '0';
   constant coszin_mux_sel_mdri     : std_logic := '1';
 
   constant marin_mux_sel_pc : std_logic_vector(1 downto 0) := "00";
   constant marin_mux_sel_aluout : std_logic_vector(1 downto 0) := "01";
   constant marin_mux_sel_sp : std_logic_vector(1 downto 0) := "10";
 
   constant mdroin_mux_sel_pc : std_logic_vector(2 downto 0) := "000";
   constant mdroin_mux_sel_tr1 : std_logic_vector(2 downto 0) := "001";
   constant mdroin_mux_sel_flags : std_logic_vector(2 downto 0) := "010";
   constant mdroin_mux_sel_dfh : std_logic_vector(2 downto 0) := "011";
   constant mdroin_mux_sel_intno : std_logic_vector(2 downto 0) := "100";
   constant mdroin_mux_sel_tr1_loweven : std_logic_vector(2 downto 0) := "101";
   constant mdroin_mux_sel_tr1_lowodd : std_logic_vector(2 downto 0) := "110";
 
   type ic is (
   ic_mov_rn_rm, ic_mov_sp_rm, ic_mov_rn_sp,
 
   ic_ld_rn_rb, ic_ld_rn_rb_disp, ic_ld_rn_sp, ic_ld_rn_sp_disp,
 
   ic_st_rn_rb, ic_st_rn_rb_disp, ic_st_rn_sp, ic_st_rn_sp_disp,
 
   ic_lbzx_rn_rb, ic_lbzx_rn_rb_disp, ic_lbsx_rn_rb, ic_lbsx_rn_rb_disp,
 
   ic_sb_rn_rb, ic_sb_rn_rb_disp,
 
   ic_sing_dec, ic_sing_inc,
 
   ic_alur,
 
   ic_shiftr,
 
   ic_cmp_cmp, ic_cmp_tst,
 
   ic_li_rn, ic_li_sp,
 
   ic_alui,
 
   ic_shifti,
 
   ic_cmpi_cmp, ic_cmpi_tst,
 
   ic_alusp_sub, ic_alusp_add,
 
   ic_stk_pushr, ic_stk_pushf, ic_stk_popr, ic_stk_popf,
 
   ic_acall, ic_lcall, ic_scall, 
 
   ic_ret,
 
   ic_int,
 
   ic_into,
 
   ic_iret,
 
   ic_ajmp, ic_ljmp, ic_sjmp, 
 
   ic_jcc,
 
   ic_fop_clc, ic_fop_stc, ic_fop_cmc, ic_fop_cli, ic_fop_sti,   
 
   ic_nop,
 
   ic_hlt,
 
   ic_invalid);
 
   type state is (
      reset,
      fetch0, fetch1, fetch2,
      exec0, exec1, exec2, exec3, exec4, exec5,
      int_chk,
      int0, int1, int2, int3, int4,
      align0, align1, align2, align3, align4, 
      stkerr0, stkerr1, stkerr2, stkerr3, stkerr4, stkerr5, stkerr6, stkerr7,
      invalid0, invalid1, invalid2, invalid3, invalid4, 
      df0, df1, df2, df3, df4, df5, df6, df7, df8, df9,
      halted
   );
 
   component sync is
      port
      (
      d : in std_logic;
      clk : in std_logic;
      q : out std_logic
      );
   end component;   
 
end package;
 

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.