TYPE MEM_ACTION_Type IS (NO_MEM, WR_MEM, RD_MEM);
TYPE TRANSFER_SIZE_Type IS (WORD, HALFWORD, BYTE);
TYPE SAVE_REG_Type IS (NO_SAVE, SAVE_RA, SAVE_RB);
+ TYPE CMP_COND_Type IS (COND_ALL, COND_EQ, COND_NE, COND_LT, COND_LE, COND_GT, COND_GE);
+ TYPE CMP_COND_TYPE_Type IS (COND_TYPE_ALL, COND_TYPE_IF_THEN, COND_TYPE_IF_THEN_THEN, COND_TYPE_IF_THEN_ELSE);
--
TYPE IF2ID_Type IS RECORD
program_counter : STD_LOGIC_VECTOR (31 DOWNTO 0);
mem_Action : MEM_ACTION_Type; -- rd_mem implies writeback
transfer_Size : TRANSFER_SIZE_Type;
wrb_Action : WRB_ACTION_Type;
+ cmp_Cond : CMP_COND_Type;
+ cmp_Cond_Type : CMP_COND_TYPE_Type;
END RECORD;
TYPE ID2GPRF_Type IS RECORD
branch_target : STD_LOGIC_VECTOR (31 DOWNTO 0);
END RECORD;
+ TYPE EX2CTRL_Type IS RECORD
+ flush_first : STD_LOGIC;
+ flush_second : STD_LOGIC;
+ END RECORD;
+
TYPE HALT_Type IS RECORD
halt : STD_LOGIC;
halt_code : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
COMPONENT exeq IS
GENERIC (
USE_HW_MUL_g : BOOLEAN := FALSE;
- USE_BARREL_g : BOOLEAN := FALSE
+ USE_BARREL_g : BOOLEAN := FALSE;
+ COMPATIBILITY_MODE_g : BOOLEAN := FALSE
);
PORT (
ID2EX_i : IN ID2EX_Type;
GPRF2EX_i : IN GPRF2EX_Type;
EX2IF_o : OUT EX2IF_Type;
+ EX2CTRL_o : OUT EX2CTRL_Type;
HALT_o : OUT HALT_Type;
--
EX_WRB_i : IN WRB_Type;
-- exeq to fetch feedback registers
EX2IF_REG_i : IN EX2IF_Type;
EX2IF_REG_o : OUT EX2IF_Type;
+ EX2CTRL_REG_i : IN EX2CTRL_Type;
-- exeq to core (halting)
exeq_halt_i : IN STD_LOGIC;
-- exeq to mem pipeline registers