]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/tumbl.git/blobdiff - hw/mbl_Pkg.vhd
Implement ITT conditional execution
[fpga/lx-cpu1/tumbl.git] / hw / mbl_Pkg.vhd
index 26acc724ae18b1d9e12a15a2578a7c35ab391eea..c81f642f5098be040cebdcf9bb60969637c9ba02 100644 (file)
@@ -45,7 +45,7 @@ PACKAGE mbl_Pkg IS
 
     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);
@@ -55,6 +55,8 @@ PACKAGE mbl_Pkg IS
     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);
@@ -76,6 +78,8 @@ PACKAGE mbl_Pkg IS
         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
@@ -116,6 +120,16 @@ PACKAGE mbl_Pkg IS
         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;
@@ -183,8 +197,9 @@ PACKAGE mbl_Pkg IS
 
     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;
@@ -195,8 +210,8 @@ PACKAGE mbl_Pkg IS
             --
             INT_CTRL_i  :  IN INT_CTRL_Type;
             ID2CTRL_o   : OUT ID2CTRL_Type;
-                                               --
-                                               noLiteOpc_o : OUT STD_LOGIC
+            --
+            noLiteOpc_o : OUT STD_LOGIC
             );
     END COMPONENT;
 
@@ -217,12 +232,15 @@ PACKAGE mbl_Pkg IS
     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;
             EX_WRB_o     : OUT WRB_Type;
@@ -257,11 +275,18 @@ PACKAGE mbl_Pkg IS
     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_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;
@@ -277,6 +302,9 @@ PACKAGE mbl_Pkg IS
             -- 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
             EX2MEM_REG_i    :  IN EX2MEM_Type;
             EX2MEM_REG_o    : OUT EX2MEM_Type;
@@ -299,8 +327,7 @@ PACKAGE mbl_Pkg IS
             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;