blob: ac8288bbc17377a138f41f8b0e11031467d67f76 [file] [log] [blame]
`ifndef PMTRDT_DEFINE_SVH
`define PMTRDT_DEFINE_SVH
typedef enum logic [1:0] {
PERMUTATION,
REDUCTION,
COMPARE
} PMTRDT_UOP_TYPE_e;
typedef struct packed {
PMTRDT_UOP_TYPE_e uop_type;
} PMTRDT_UOP_TYPE_t;
typedef enum logic [2:0] {
NOT_EQUAL,
EQUAL,
LESS_THAN,
LESS_THAN_OR_EQUAL,
GREAT_THAN,
GREAT_THAN_OR_EQUAL,
COUT, // carry-out
BOUT // borrow-out
} CMP_TYPE_e;
typedef enum logic [2:0] {
SUM,
MAX,
MIN,
AND,
OR,
XOR
} RDT_OPERATION_e;
typedef enum logic [1:0] {
SLIDE_DOWN,
SLIDE_UP,
GATHER
} PMT_OPERATION_e;
typedef struct packed {
logic sign_opr; // set if signed value, clear if unsigned value
CMP_TYPE_e cmp_opr;
logic widen; // set if vd EEW is 2*SEW
RDT_OPERATION_e rdt_opr;
logic compress; // set if the uop is compress instruction
// signals from uop
`ifdef TB_SUPPORT
logic [`PC_WIDTH-1:0] uop_pc;
`endif
logic [`ROB_DEPTH_WIDTH-1:0] rob_entry;
logic [`VL_WIDTH-1:0] vl;
logic [`VL_WIDTH-1:0] cmp_evl; // evl for compare instruction
logic vm;
EEW_e vs1_eew;
logic [`VLEN-1:0] v0_data;
logic [`VLEN-1:0] vs3_data;
logic last_uop_valid;
} RDT_CTRL_t;
typedef struct packed {
PMT_OPERATION_e pmt_opr;
// signals from uop
`ifdef TB_SUPPORT
logic [`PC_WIDTH-1:0] uop_pc;
`endif
logic [`ROB_DEPTH_WIDTH-1:0] rob_entry;
logic [`VLEN-1:0] vs3_data;
} PMT_CTRL_t;
typedef struct packed {
// signals from uop
`ifdef TB_SUPPORT
logic [`PC_WIDTH-1:0] uop_pc;
`endif
logic [`ROB_DEPTH_WIDTH-1:0] rob_entry;
logic [`VLEN-1:0] vs3_data;
logic last_uop_valid;
} COMPRESS_CTRL_t;
`endif