TYPE ALU_ACTION_Type IS (A_NOP, A_ADD, A_CMP, A_CMPU, A_OR, A_AND, A_XOR,
A_SHIFT, A_SEXT8, A_SEXT16, A_MFS, A_MTS,
- A_MUL, A_BSLL, A_BSRL, A_BSRA);
+ A_MUL, A_BSLL, A_BSRL, A_BSRA, A_HALT);
TYPE ALU_IN1_Type IS (ALU_IN_REGA, ALU_IN_NOT_REGA, ALU_IN_PC, ALU_IN_ZERO);
TYPE ALU_IN2_Type IS (ALU_IN_REGB, ALU_IN_NOT_REGB, ALU_IN_IMM, ALU_IN_NOT_IMM);
TYPE ALU_CIN_Type IS (CIN_ZERO, CIN_ONE, FROM_MSR, FROM_IN1);
branch_target : STD_LOGIC_VECTOR (31 DOWNTO 0);
END RECORD;
+ TYPE HALT_Type IS RECORD
+ halt : STD_LOGIC;
+ halt_code : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
+ END RECORD;
+
TYPE EX2MEM_Type IS RECORD
mem_Action : MEM_ACTION_Type; -- RD_MEM implies writeback
wrb_Action : WRB_ACTION_Type;
COMPONENT decode IS
GENERIC (
- USE_HW_MUL_g : BOOLEAN := FALSE;
- USE_BARREL_g : BOOLEAN := FALSE
+ USE_HW_MUL_g : BOOLEAN := TRUE;
+ USE_BARREL_g : BOOLEAN := TRUE;
+ COMPATIBILITY_MODE_g : BOOLEAN := FALSE
);
PORT (
IF2ID_i : IN IF2ID_Type;
--
INT_CTRL_i : IN INT_CTRL_Type;
ID2CTRL_o : OUT ID2CTRL_Type;
- --
- noLiteOpc_o : OUT STD_LOGIC
+ --
+ noLiteOpc_o : OUT STD_LOGIC
);
END COMPONENT;
ID2EX_i : IN ID2EX_Type;
GPRF2EX_i : IN GPRF2EX_Type;
EX2IF_o : OUT EX2IF_Type;
+ HALT_o : OUT HALT_Type;
--
EX_WRB_i : IN WRB_Type;
EX_WRB_o : OUT WRB_Type;
END COMPONENT;
COMPONENT core_ctrl IS
+ GENERIC (
+ COMPATIBILITY_MODE_g : BOOLEAN := FALSE
+ );
PORT (
clk_i : IN STD_LOGIC;
rst_i : IN STD_LOGIC;
halt_i : IN STD_LOGIC;
+ bad_op_i : IN STD_LOGIC;
int_i : IN STD_LOGIC;
trace_i : IN STD_LOGIC;
trace_kick_i : IN STD_LOGIC;
- core_clk_en_o : OUT STD_LOGIC;
+ core_clken_o : OUT STD_LOGIC;
-- specific fetch i/o
imem_addr_o : OUT STD_LOGIC_VECTOR (31 DOWNTO 0);
imem_clken_o : OUT STD_LOGIC;
-- exeq to fetch feedback registers
EX2IF_REG_i : IN EX2IF_Type;
EX2IF_REG_o : OUT EX2IF_Type;
+ -- exeq to core (halting)
+ exeq_halt_i : IN STD_LOGIC;
-- exeq to mem pipeline registers
EX2MEM_REG_i : IN EX2MEM_Type;
EX2MEM_REG_o : OUT EX2MEM_Type;
MSR_i : IN MSR_Type;
MSR_o : OUT MSR_Type;
-- miscellaneous
- MEM2CTRL_i : IN MEM2CTRL_Type;
- done_o : OUT STD_LOGIC
+ MEM2CTRL_i : IN MEM2CTRL_Type
);
END COMPONENT;