| `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 |