X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=cpu%2Fsrc%2Fcommon_pkg.vhd;h=ec18a20b975d1b6157081cc31a6611a46c9a20ff;hb=7b04055757bc6a71bf5ae5b35cba6fb61471bb01;hp=3d93390472a254249764beca21b2ade7fc98347b;hpb=05fc0d5300956fef107bbb8507a6480ee11695ff;p=calu.git diff --git a/cpu/src/common_pkg.vhd b/cpu/src/common_pkg.vhd index 3d93390..ec18a20 100755 --- a/cpu/src/common_pkg.vhd +++ b/cpu/src/common_pkg.vhd @@ -25,15 +25,17 @@ package common_pkg is constant INSTR_ADDR_WIDTH : INTEGER := 32; constant PHYS_INSTR_ADDR_WIDTH : INTEGER := 11; constant REG_ADDR_WIDTH : INTEGER := 4; - constant DATA_ADDR_WIDTH : INTEGER := 32; + constant DATA_ADDR_WIDTH : INTEGER := 11; constant PHYS_DATA_ADDR_WIDTH : INTEGER := 32; constant NUM_OP_OPT_WIDTH : INTEGER := 6; constant COND_WIDTH : INTEGER := 4; + constant DATA_END_ADDR : integer := ((2**DATA_ADDR_WIDTH)-1); subtype instruction_word_t is std_logic_vector(WORD_WIDTH-1 downto 0); subtype instruction_addr_t is std_logic_vector(INSTR_ADDR_WIDTH-1 downto 0); + subtype instr_addr_t is instruction_addr_t; subtype gp_addr_t is std_logic_vector(REG_ADDR_WIDTH-1 downto 0); subtype data_ram_word_t is std_logic_vector(WORD_WIDTH-1 downto 0); @@ -52,13 +54,16 @@ package common_pkg is constant ARITH_OPT : integer := 1; constant CARRY_OPT : integer := 2; - + constant RIGHT_OPT : integer := 3; + constant JMP_REG_OPT : integer := 3; + constant ST_OPT : integer := 3; -- store opt + constant RET_OPT : integer := 3; constant NO_PSW_OPT : integer := 4;--no sharing constant NO_DST_OPT : integer := 5; --no sharing - type op_info_t is (ADDSUB_OP,AND_OP,OR_OP, XOR_OP,SHIFT_OP); + type op_info_t is (ADDSUB_OP,AND_OP,OR_OP, XOR_OP,SHIFT_OP, LDST_OP, JMP_OP, JMP_ST_OP); subtype op_opt_t is std_logic_vector(NUM_OP_OPT_WIDTH-1 downto 0); @@ -74,6 +79,8 @@ package common_pkg is immediate : std_logic_vector(WORD_WIDTH-1 downto 0); + displacement : gp_register_t; + jmptype : std_logic_vector(1 downto 0); high_low, fill, signext, bp: std_logic; @@ -91,6 +98,8 @@ package common_pkg is rtw_reg2 : std_logic; immediate : gp_register_t; imm_set : std_logic; + reg1_addr : gp_addr_t; + reg2_addr : gp_addr_t; end record; @@ -99,6 +108,9 @@ package common_pkg is op_group : op_info_t; op_detail : op_opt_t; brpr : std_logic; + + displacement : gp_register_t; + prog_cnt : instr_addr_t; src1 : gp_register_t; src2 : gp_register_t; @@ -110,7 +122,18 @@ package common_pkg is end record; - + type writeback_rec is record +-- result : in gp_register_t; --reg (alu result or jumpaddr) +-- result_addr : in gp_addr_t; --reg + address : word_t; --ureg +-- alu_jmp : in std_logic; --reg +-- br_pred : in std_logic; --reg +-- write_en : in std_logic; --reg (register file) + dmem_en : std_logic; --ureg (jump addr in mem or in address) + dmem_write_en : std_logic; --ureg + hword : std_logic; --ureg + byte_s : std_logic; + end record; function inc(value : in std_logic_vector; constant by : in integer := 1) return std_logic_vector;