- 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_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);
- TYPE MSR_ACTION_Type IS (UPDATE_CARRY, KEEP_CARRY);
- TYPE BRANCH_ACTION_Type IS (NO_BR, BR, BRL, BEQ, BNE, BLT, BLE, BGT, BGE);
- TYPE WRB_ACTION_Type IS (NO_WRB, WRB_EX, WRB_MEM);
- 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);
- END RECORD;
-
- TYPE ID2EX_Type IS RECORD
- program_counter : STD_LOGIC_VECTOR (31 DOWNTO 0);
- rdix_rA : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
- rdix_rB : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
- curr_rD : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
- alu_Action : ALU_ACTION_Type;
- alu_Op1 : ALU_IN1_Type;
- alu_Op2 : ALU_IN2_Type;
- alu_Cin : ALU_CIN_Type;
- IMM16 : STD_LOGIC_VECTOR (15 DOWNTO 0);
- IMM_Lock : STD_LOGIC;
- msr_Action : MSR_ACTION_Type;
- branch_Action : BRANCH_ACTION_Type;
- 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
- rdix_rA : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
- rdix_rB : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
- rdix_rD : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
- END RECORD;
-
- TYPE INT_CTRL_Type IS RECORD
- setup_int : STD_LOGIC;
- rti_target : STD_LOGIC_VECTOR (31 DOWNTO 0);
- int_busy : STD_LOGIC;
- END RECORD;
-
- TYPE ID2CTRL_Type IS RECORD
- delayBit : STD_LOGIC;
- int_busy : STD_LOGIC;
- END RECORD;
-
- TYPE GPRF2EX_Type IS RECORD
- data_rA : STD_LOGIC_VECTOR (31 DOWNTO 0);
- data_rB : STD_LOGIC_VECTOR (31 DOWNTO 0);
- data_rD : STD_LOGIC_VECTOR (31 DOWNTO 0);
- END RECORD;
-
- TYPE IMM_LOCK_Type IS RECORD
- locked : STD_LOGIC;
- IMM_hi16 : STD_LOGIC_VECTOR (15 DOWNTO 0);
- END RECORD;
-
- TYPE MSR_Type IS RECORD
- IE : STD_LOGIC; -- MSR[VHDL b1] = [MicroBlaze b30]
- C : STD_LOGIC; -- MSR[VHDL b2 and b31] = [MicroBlaze b29 and b0]
- END RECORD;
-
- TYPE EX2IF_Type IS RECORD
- take_branch : STD_LOGIC;
- 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);
- END RECORD;
-
- TYPE EX2MEM_Type IS RECORD
- mem_Action : MEM_ACTION_Type; -- RD_MEM implies writeback
- wrb_Action : WRB_ACTION_Type;
- exeq_result : STD_LOGIC_VECTOR (31 DOWNTO 0);
- data_rD : STD_LOGIC_VECTOR (31 DOWNTO 0);
- byte_Enable : STD_LOGIC_VECTOR ( 3 DOWNTO 0);
- wrix_rD : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
- END RECORD;
-
- TYPE WRB_Type IS RECORD
- wrb_Action : WRB_ACTION_Type;
- wrix_rD : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
- data_rD : STD_LOGIC_VECTOR (31 DOWNTO 0);
- END RECORD;
-
- TYPE HAZARD_WRB_Type IS RECORD
- hazard : STD_LOGIC;
- save_rX : SAVE_REG_Type;
- data_rX : STD_LOGIC_VECTOR (31 DOWNTO 0);
- data_rD : STD_LOGIC_VECTOR (31 DOWNTO 0);
- END RECORD;
-
- TYPE MEM_REG_Type IS RECORD
- wrb_Action : WRB_ACTION_Type;
- exeq_result : STD_LOGIC_VECTOR (31 DOWNTO 0);
- byte_Enable : STD_LOGIC_VECTOR ( 3 DOWNTO 0);
- wrix_rD : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
- END RECORD;
-
- TYPE MEM2CTRL_Type IS RECORD
- clken : STD_LOGIC;
- int : STD_LOGIC;
- END RECORD;
-
- TYPE CORE2DMEMB_Type IS RECORD
- ena : STD_LOGIC;
- addr : STD_LOGIC_VECTOR (31 DOWNTO 0);
- bSel : STD_LOGIC_VECTOR ( 3 DOWNTO 0);
- wre : STD_LOGIC;
- data : STD_LOGIC_VECTOR (31 DOWNTO 0);
- END RECORD;
-
- TYPE DMEMB2CORE_Type IS RECORD
- clken : STD_LOGIC;
- data : STD_LOGIC_VECTOR (31 DOWNTO 0);
- int : STD_LOGIC;
- END RECORD;
-
- TYPE MEMORY_MAP_Type IS ARRAY(NATURAL RANGE <>) OF STD_LOGIC_VECTOR (31 DOWNTO 0);
- -- NOTE: Use the named association format xxxx := ( 0 => X"A0010000" );
- -- in case the array has to contain only one element !!
+ 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);
+ 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);
+ TYPE MSR_ACTION_Type IS (UPDATE_CARRY, KEEP_CARRY);
+ TYPE BRANCH_ACTION_Type IS (NO_BR, BR, BRL);
+ TYPE IT_ACTION_Type IS (NO_IT, IT, ITT, ITE);
+ TYPE WRB_ACTION_Type IS (NO_WRB, WRB_EX, WRB_MEM);
+ 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 COND_Type IS (COND_ALL, COND_EQ, COND_NE, COND_LT, COND_LE, COND_GT, COND_GE);
+ --
+ TYPE IF2ID_Type IS RECORD
+ program_counter : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ END RECORD;
+
+ TYPE ID2EX_Type IS RECORD
+ program_counter : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ rdix_rA : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
+ rdix_rB : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
+ curr_rD : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
+ alu_Action : ALU_ACTION_Type;
+ alu_Op1 : ALU_IN1_Type;
+ alu_Op2 : ALU_IN2_Type;
+ alu_Cin : ALU_CIN_Type;
+ IMM16 : STD_LOGIC_VECTOR (15 DOWNTO 0);
+ IMM_Lock : STD_LOGIC;
+ msr_Action : MSR_ACTION_Type;
+ branch_Action : BRANCH_ACTION_Type;
+ it_Action : IT_ACTION_Type;
+ mem_Action : MEM_ACTION_Type; -- rd_mem implies writeback
+ transfer_Size : TRANSFER_SIZE_Type;
+ wrb_Action : WRB_ACTION_Type;
+ condition : COND_Type;
+ halt : STD_LOGIC;
+ END RECORD;
+
+ TYPE ID2GPRF_Type IS RECORD
+ rdix_rA : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
+ rdix_rB : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
+ rdix_rD : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
+ END RECORD;
+
+ TYPE INT_CTRL_Type IS RECORD
+ setup_int : STD_LOGIC;
+ rti_target : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ int_busy : STD_LOGIC;
+ END RECORD;
+
+ TYPE ID2CTRL_Type IS RECORD
+ delayBit : STD_LOGIC;
+ int_busy : STD_LOGIC;
+ END RECORD;
+
+ TYPE GPRF2EX_Type IS RECORD
+ data_rA : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ data_rB : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ data_rD : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ END RECORD;
+
+ TYPE IMM_LOCK_Type IS RECORD
+ locked : STD_LOGIC;
+ IMM_hi16 : STD_LOGIC_VECTOR (15 DOWNTO 0);
+ END RECORD;
+
+ TYPE MSR_Type IS RECORD
+ IE : STD_LOGIC; -- MSR[VHDL b1] = [MicroBlaze b30]
+ C : STD_LOGIC; -- MSR[VHDL b2 and b31] = [MicroBlaze b29 and b0]
+ END RECORD;
+
+ TYPE EX2IF_Type IS RECORD
+ take_branch : STD_LOGIC;
+ branch_target : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ END RECORD;
+
+ TYPE EX2CTRL_Type IS RECORD
+ flush_first : STD_LOGIC;
+ flush_second : STD_LOGIC;
+ ignore_state : STD_LOGIC;
+ 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;
+ exeq_result : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ data_rD : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ byte_Enable : STD_LOGIC_VECTOR ( 3 DOWNTO 0);
+ wrix_rD : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
+ END RECORD;
+
+ TYPE WRB_Type IS RECORD
+ wrb_Action : WRB_ACTION_Type;
+ wrix_rD : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
+ data_rD : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ END RECORD;
+
+ TYPE HAZARD_WRB_Type IS RECORD
+ hazard : STD_LOGIC;
+ save_rX : SAVE_REG_Type;
+ data_rX : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ data_rD : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ END RECORD;
+
+ TYPE MEM_REG_Type IS RECORD
+ wrb_Action : WRB_ACTION_Type;
+ exeq_result : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ byte_Enable : STD_LOGIC_VECTOR ( 3 DOWNTO 0);
+ wrix_rD : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
+ END RECORD;
+
+ TYPE MEM2CTRL_Type IS RECORD
+ clken : STD_LOGIC;
+ int : STD_LOGIC;
+ END RECORD;
+
+ TYPE CORE2DMEMB_Type IS RECORD
+ ena : STD_LOGIC;
+ addr : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ bSel : STD_LOGIC_VECTOR ( 3 DOWNTO 0);
+ wre : STD_LOGIC;
+ data : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ END RECORD;
+
+ TYPE DMEMB2CORE_Type IS RECORD
+ clken : STD_LOGIC;
+ data : STD_LOGIC_VECTOR (31 DOWNTO 0);
+ int : STD_LOGIC;
+ END RECORD;
+
+ TYPE MEMORY_MAP_Type IS ARRAY(NATURAL RANGE <>) OF STD_LOGIC_VECTOR (31 DOWNTO 0);
+ -- NOTE: Use the named association format xxxx := ( 0 => X"A0010000" );
+ -- in case the array has to contain only one element !!