1 |
11 |
dinesha |
/// Copyright by Syntacore LLC © 2016-2021. See LICENSE for details
|
2 |
|
|
/// @file
|
3 |
|
|
/// @brief Pipeline types description file
|
4 |
|
|
///
|
5 |
|
|
|
6 |
|
|
`ifndef SCR1_ARCH_TYPES_SVH
|
7 |
|
|
`define SCR1_ARCH_TYPES_SVH
|
8 |
|
|
|
9 |
|
|
`include "scr1_arch_description.svh"
|
10 |
|
|
|
11 |
|
|
//-------------------------------------------------------------------------------
|
12 |
|
|
// MPRF and CSR parameters
|
13 |
|
|
//-------------------------------------------------------------------------------
|
14 |
|
|
|
15 |
|
|
`ifdef SCR1_RVE_EXT
|
16 |
|
|
`define SCR1_MPRF_AWIDTH 4
|
17 |
|
|
`define SCR1_MPRF_SIZE 16
|
18 |
|
|
`else // SCR1_RVE_EXT
|
19 |
|
|
`define SCR1_MPRF_AWIDTH 5
|
20 |
|
|
`define SCR1_MPRF_SIZE 32
|
21 |
|
|
`endif // SCR1_RVE_EXT
|
22 |
|
|
|
23 |
21 |
dinesha |
// Masked due to iverilog issue
|
24 |
|
|
//typedef logic [`SCR1_XLEN-1:0] type_scr1_mprf_v;
|
25 |
|
|
//typedef logic [`SCR1_XLEN-1:0] type_scr1_pc_v;
|
26 |
11 |
dinesha |
|
27 |
|
|
parameter int unsigned SCR1_CSR_ADDR_WIDTH = 12;
|
28 |
|
|
parameter int unsigned SCR1_CSR_MTVEC_BASE_ZERO_BITS = 6;
|
29 |
|
|
parameter int unsigned SCR1_CSR_MTVEC_BASE_VAL_BITS = `SCR1_XLEN-SCR1_CSR_MTVEC_BASE_ZERO_BITS;
|
30 |
|
|
parameter bit [`SCR1_XLEN-1:SCR1_CSR_MTVEC_BASE_ZERO_BITS] SCR1_CSR_MTVEC_BASE_WR_RST_VAL =
|
31 |
|
|
SCR1_CSR_MTVEC_BASE_VAL_BITS'(SCR1_ARCH_MTVEC_BASE >> SCR1_CSR_MTVEC_BASE_ZERO_BITS);
|
32 |
|
|
parameter int unsigned SCR1_CSR_MTVEC_BASE_RO_BITS = (`SCR1_XLEN-(SCR1_CSR_MTVEC_BASE_ZERO_BITS+SCR1_MTVEC_BASE_WR_BITS));
|
33 |
|
|
|
34 |
|
|
`define SCR1_MTVAL_ILLEGAL_INSTR_EN
|
35 |
|
|
|
36 |
|
|
//-------------------------------------------------------------------------------
|
37 |
|
|
// Exception and IRQ codes
|
38 |
|
|
//-------------------------------------------------------------------------------
|
39 |
|
|
parameter int unsigned SCR1_EXC_CODE_WIDTH_E = 4;
|
40 |
|
|
|
41 |
|
|
// Exceptions
|
42 |
|
|
typedef enum logic [SCR1_EXC_CODE_WIDTH_E-1:0] {
|
43 |
|
|
SCR1_EXC_CODE_INSTR_MISALIGN = 4'd0, // from EXU
|
44 |
|
|
SCR1_EXC_CODE_INSTR_ACCESS_FAULT = 4'd1, // from IFU
|
45 |
|
|
SCR1_EXC_CODE_ILLEGAL_INSTR = 4'd2, // from IDU or CSR
|
46 |
|
|
SCR1_EXC_CODE_BREAKPOINT = 4'd3, // from IDU or BRKM
|
47 |
|
|
SCR1_EXC_CODE_LD_ADDR_MISALIGN = 4'd4, // from LSU
|
48 |
|
|
SCR1_EXC_CODE_LD_ACCESS_FAULT = 4'd5, // from LSU
|
49 |
|
|
SCR1_EXC_CODE_ST_ADDR_MISALIGN = 4'd6, // from LSU
|
50 |
|
|
SCR1_EXC_CODE_ST_ACCESS_FAULT = 4'd7, // from LSU
|
51 |
|
|
SCR1_EXC_CODE_ECALL_M = 4'd11 // from IDU
|
52 |
|
|
} type_scr1_exc_code_e;
|
53 |
|
|
|
54 |
|
|
// IRQs, reset
|
55 |
|
|
parameter bit [SCR1_EXC_CODE_WIDTH_E-1:0] SCR1_EXC_CODE_IRQ_M_SOFTWARE = 4'd3;
|
56 |
|
|
parameter bit [SCR1_EXC_CODE_WIDTH_E-1:0] SCR1_EXC_CODE_IRQ_M_TIMER = 4'd7;
|
57 |
|
|
parameter bit [SCR1_EXC_CODE_WIDTH_E-1:0] SCR1_EXC_CODE_IRQ_M_EXTERNAL = 4'd11;
|
58 |
|
|
parameter bit [SCR1_EXC_CODE_WIDTH_E-1:0] SCR1_EXC_CODE_RESET = 4'd0;
|
59 |
|
|
|
60 |
|
|
//-------------------------------------------------------------------------------
|
61 |
|
|
// Operand width for BRKM
|
62 |
|
|
//-------------------------------------------------------------------------------
|
63 |
|
|
typedef enum logic [1:0] {
|
64 |
|
|
SCR1_OP_WIDTH_BYTE = 2'b00,
|
65 |
|
|
SCR1_OP_WIDTH_HALF = 2'b01,
|
66 |
|
|
SCR1_OP_WIDTH_WORD = 2'b10
|
67 |
|
|
`ifdef SCR1_XPROP_EN
|
68 |
|
|
,
|
69 |
|
|
SCR1_OP_WIDTH_ERROR = 'x
|
70 |
|
|
`endif // SCR1_XPROP_EN
|
71 |
|
|
} type_scr1_op_width_e;
|
72 |
|
|
|
73 |
|
|
`endif //SCR1_ARCH_TYPES_SVH
|