1 |
11 |
dinesha |
/// Copyright by Syntacore LLC © 2016-2021. See LICENSE for details
|
2 |
|
|
/// @file
|
3 |
|
|
/// @brief CSR mapping/description file
|
4 |
|
|
///
|
5 |
|
|
|
6 |
|
|
`ifndef SCR1_CSR_SVH
|
7 |
|
|
`define SCR1_CSR_SVH
|
8 |
|
|
|
9 |
|
|
`include "scr1_arch_description.svh"
|
10 |
|
|
`include "scr1_arch_types.svh"
|
11 |
|
|
`include "scr1_ipic.svh"
|
12 |
|
|
|
13 |
|
|
`ifdef SCR1_RVE_EXT
|
14 |
|
|
`define SCR1_CSR_REDUCED_CNT
|
15 |
|
|
`endif // SCR1_RVE_EXT
|
16 |
|
|
|
17 |
|
|
`ifdef SCR1_CSR_REDUCED_CNT
|
18 |
|
|
`undef SCR1_MCOUNTEN_EN
|
19 |
|
|
`endif // SCR1_CSR_REDUCED_CNT
|
20 |
|
|
|
21 |
|
|
//-------------------------------------------------------------------------------
|
22 |
|
|
// CSR addresses (standard)
|
23 |
|
|
//-------------------------------------------------------------------------------
|
24 |
|
|
|
25 |
|
|
// Machine Information Registers (read-only)
|
26 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MVENDORID = 'hF11;
|
27 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MARCHID = 'hF12;
|
28 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MIMPID = 'hF13;
|
29 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MHARTID = 'hF14;
|
30 |
|
|
|
31 |
|
|
// Machine Trap Setup (read-write)
|
32 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MSTATUS = 'h300;
|
33 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MISA = 'h301;
|
34 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MIE = 'h304;
|
35 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MTVEC = 'h305;
|
36 |
|
|
|
37 |
|
|
// Machine Trap Handling (read-write)
|
38 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MSCRATCH = 'h340;
|
39 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MEPC = 'h341;
|
40 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MCAUSE = 'h342;
|
41 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MTVAL = 'h343;
|
42 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MIP = 'h344;
|
43 |
|
|
|
44 |
|
|
// Machine Counters/Timers (read-write)
|
45 |
|
|
`ifndef SCR1_CSR_REDUCED_CNT
|
46 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MCYCLE = 'hB00;
|
47 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MINSTRET = 'hB02;
|
48 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MCYCLEH = 'hB80;
|
49 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MINSTRETH = 'hB82;
|
50 |
|
|
`endif // SCR1_CSR_REDUCED_CNT
|
51 |
|
|
|
52 |
|
|
// Shadow Counters/Timers (read-only)
|
53 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_TIME = 'hC01;
|
54 |
|
|
`ifndef SCR1_CSR_REDUCED_CNT
|
55 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_CYCLE = 'hC00;
|
56 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_INSTRET = 'hC02;
|
57 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_TIMEH = 'hC81;
|
58 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_CYCLEH = 'hC80;
|
59 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_INSTRETH = 'hC82;
|
60 |
|
|
`endif // SCR1_CSR_REDUCED_CNT
|
61 |
|
|
|
62 |
|
|
`ifdef SCR1_DBG_EN
|
63 |
|
|
//parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_DBGC_SCRATCH = 'h7C8;
|
64 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_HDU_MBASE = 'h7B0;
|
65 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_HDU_MSPAN = 'h004; // must be power of 2
|
66 |
|
|
`endif // SCR1_DBG_EN
|
67 |
|
|
|
68 |
|
|
//-------------------------------------------------------------------------------
|
69 |
|
|
// CSR addresses (non-standard)
|
70 |
|
|
//-------------------------------------------------------------------------------
|
71 |
|
|
`ifdef SCR1_MCOUNTEN_EN
|
72 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_MCOUNTEN = 'h7E0;
|
73 |
|
|
`endif // SCR1_MCOUNTEN_EN
|
74 |
|
|
|
75 |
|
|
`ifdef SCR1_TDU_EN
|
76 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_TDU_MBASE = 'h7A0;
|
77 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_TDU_MSPAN = 'h008; // must be power of 2
|
78 |
|
|
`endif // SCR1_TDU_EN
|
79 |
|
|
|
80 |
|
|
`ifdef SCR1_IPIC_EN
|
81 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_IPIC_BASE = 'hBF0;
|
82 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_IPIC_CISV = (SCR1_CSR_ADDR_IPIC_BASE + SCR1_IPIC_CISV );
|
83 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_IPIC_CICSR = (SCR1_CSR_ADDR_IPIC_BASE + SCR1_IPIC_CICSR);
|
84 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_IPIC_IPR = (SCR1_CSR_ADDR_IPIC_BASE + SCR1_IPIC_IPR );
|
85 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_IPIC_ISVR = (SCR1_CSR_ADDR_IPIC_BASE + SCR1_IPIC_ISVR );
|
86 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_IPIC_EOI = (SCR1_CSR_ADDR_IPIC_BASE + SCR1_IPIC_EOI );
|
87 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_IPIC_SOI = (SCR1_CSR_ADDR_IPIC_BASE + SCR1_IPIC_SOI );
|
88 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_IPIC_IDX = (SCR1_CSR_ADDR_IPIC_BASE + SCR1_IPIC_IDX );
|
89 |
|
|
parameter bit [SCR1_CSR_ADDR_WIDTH-1:0] SCR1_CSR_ADDR_IPIC_ICSR = (SCR1_CSR_ADDR_IPIC_BASE + SCR1_IPIC_ICSR );
|
90 |
|
|
`endif // SCR1_IPIC_EN
|
91 |
|
|
|
92 |
|
|
|
93 |
|
|
//-------------------------------------------------------------------------------
|
94 |
|
|
// CSR definitions
|
95 |
|
|
//-------------------------------------------------------------------------------
|
96 |
|
|
|
97 |
|
|
// General
|
98 |
|
|
parameter bit [`SCR1_XLEN-1:0] SCR1_RST_VECTOR = SCR1_ARCH_RST_VECTOR;
|
99 |
|
|
|
100 |
|
|
// Reset values TBD
|
101 |
|
|
parameter bit SCR1_CSR_MIE_MSIE_RST_VAL = 1'b0;
|
102 |
|
|
parameter bit SCR1_CSR_MIE_MTIE_RST_VAL = 1'b0;
|
103 |
|
|
parameter bit SCR1_CSR_MIE_MEIE_RST_VAL = 1'b0;
|
104 |
|
|
|
105 |
|
|
parameter bit SCR1_CSR_MIP_MSIP_RST_VAL = 1'b0;
|
106 |
|
|
parameter bit SCR1_CSR_MIP_MTIP_RST_VAL = 1'b0;
|
107 |
|
|
parameter bit SCR1_CSR_MIP_MEIP_RST_VAL = 1'b0;
|
108 |
|
|
|
109 |
|
|
parameter bit SCR1_CSR_MSTATUS_MIE_RST_VAL = 1'b0;
|
110 |
|
|
parameter bit SCR1_CSR_MSTATUS_MPIE_RST_VAL = 1'b1;
|
111 |
|
|
|
112 |
|
|
// MISA
|
113 |
|
|
`define SCR1_RVC_ENC `SCR1_XLEN'h0004
|
114 |
|
|
`define SCR1_RVE_ENC `SCR1_XLEN'h0010
|
115 |
|
|
`define SCR1_RVI_ENC `SCR1_XLEN'h0100
|
116 |
|
|
`define SCR1_RVM_ENC `SCR1_XLEN'h1000
|
117 |
|
|
parameter bit [1:0] SCR1_MISA_MXL_32 = 2'd1;
|
118 |
|
|
parameter bit [`SCR1_XLEN-1:0] SCR1_CSR_MISA = (SCR1_MISA_MXL_32 << (`SCR1_XLEN-2))
|
119 |
|
|
`ifndef SCR1_RVE_EXT
|
120 |
|
|
| `SCR1_RVI_ENC
|
121 |
|
|
`else // SCR1_RVE_EXT
|
122 |
|
|
| `SCR1_RVE_ENC
|
123 |
|
|
`endif // SCR1_RVE_EXT
|
124 |
|
|
`ifdef SCR1_RVC_EXT
|
125 |
|
|
| `SCR1_RVC_ENC
|
126 |
|
|
`endif // SCR1_RVC_EXT
|
127 |
|
|
`ifdef SCR1_RVM_EXT
|
128 |
|
|
| `SCR1_RVM_ENC
|
129 |
|
|
`endif // SCR1_RVM_EXT
|
130 |
|
|
;
|
131 |
|
|
|
132 |
|
|
// MVENDORID
|
133 |
|
|
parameter bit [`SCR1_XLEN-1:0] SCR1_CSR_MVENDORID = `SCR1_MVENDORID;
|
134 |
|
|
|
135 |
|
|
// MARCHID
|
136 |
|
|
parameter bit [`SCR1_XLEN-1:0] SCR1_CSR_MARCHID = `SCR1_XLEN'd8;
|
137 |
|
|
|
138 |
|
|
// MIMPID
|
139 |
|
|
parameter bit [`SCR1_XLEN-1:0] SCR1_CSR_MIMPID = `SCR1_MIMPID;
|
140 |
|
|
|
141 |
|
|
// MSTATUS
|
142 |
|
|
parameter bit [1:0] SCR1_CSR_MSTATUS_MPP = 2'b11;
|
143 |
|
|
parameter int unsigned SCR1_CSR_MSTATUS_MIE_OFFSET = 3;
|
144 |
|
|
parameter int unsigned SCR1_CSR_MSTATUS_MPIE_OFFSET = 7;
|
145 |
|
|
parameter int unsigned SCR1_CSR_MSTATUS_MPP_OFFSET = 11;
|
146 |
|
|
|
147 |
|
|
// MTVEC
|
148 |
|
|
// bits [5:0] are always zero
|
149 |
|
|
parameter bit [`SCR1_XLEN-1:SCR1_CSR_MTVEC_BASE_ZERO_BITS] SCR1_CSR_MTVEC_BASE_RST_VAL = SCR1_CSR_MTVEC_BASE_WR_RST_VAL;
|
150 |
|
|
|
151 |
|
|
parameter bit SCR1_CSR_MTVEC_MODE_DIRECT = 1'b0;
|
152 |
|
|
`ifdef SCR1_MTVEC_MODE_EN
|
153 |
|
|
parameter bit SCR1_CSR_MTVEC_MODE_VECTORED = 1'b1;
|
154 |
|
|
`endif // SCR1_MTVEC_MODE_EN
|
155 |
|
|
|
156 |
|
|
// MIE, MIP
|
157 |
|
|
parameter int unsigned SCR1_CSR_MIE_MSIE_OFFSET = 3;
|
158 |
|
|
parameter int unsigned SCR1_CSR_MIE_MTIE_OFFSET = 7;
|
159 |
|
|
parameter int unsigned SCR1_CSR_MIE_MEIE_OFFSET = 11;
|
160 |
|
|
|
161 |
|
|
`ifdef SCR1_MCOUNTEN_EN
|
162 |
|
|
// MCOUNTEN
|
163 |
|
|
parameter int unsigned SCR1_CSR_MCOUNTEN_CY_OFFSET = 0;
|
164 |
|
|
parameter int unsigned SCR1_CSR_MCOUNTEN_IR_OFFSET = 2;
|
165 |
|
|
`endif // SCR1_MCOUNTEN_EN
|
166 |
|
|
|
167 |
|
|
// MCAUSE
|
168 |
|
|
typedef logic [`SCR1_XLEN-2:0] type_scr1_csr_mcause_ec_v;
|
169 |
|
|
|
170 |
|
|
// MCYCLE, MINSTRET
|
171 |
|
|
`ifdef SCR1_CSR_REDUCED_CNT
|
172 |
|
|
parameter int unsigned SCR1_CSR_COUNTERS_WIDTH = 32;
|
173 |
|
|
`else // ~SCR1_CSR_REDUCED_CNT
|
174 |
|
|
parameter int unsigned SCR1_CSR_COUNTERS_WIDTH = 64;
|
175 |
|
|
`endif // ~SCR1_CSR_REDUCED_CNT
|
176 |
|
|
|
177 |
|
|
// HPM
|
178 |
|
|
parameter bit [6:0] SCR1_CSR_ADDR_HPMCOUNTER_MASK = 7'b1100000;
|
179 |
|
|
parameter bit [6:0] SCR1_CSR_ADDR_HPMCOUNTERH_MASK = 7'b1100100;
|
180 |
|
|
parameter bit [6:0] SCR1_CSR_ADDR_MHPMCOUNTER_MASK = 7'b1011000;
|
181 |
|
|
parameter bit [6:0] SCR1_CSR_ADDR_MHPMCOUNTERH_MASK = 7'b1011100;
|
182 |
|
|
parameter bit [6:0] SCR1_CSR_ADDR_MHPMEVENT_MASK = 7'b0011001;
|
183 |
|
|
|
184 |
|
|
//-------------------------------------------------------------------------------
|
185 |
|
|
// Types declaration
|
186 |
|
|
//-------------------------------------------------------------------------------
|
187 |
|
|
typedef enum logic {
|
188 |
|
|
SCR1_CSR_RESP_OK,
|
189 |
|
|
SCR1_CSR_RESP_ER
|
190 |
|
|
`ifdef SCR1_XPROP_EN
|
191 |
|
|
,
|
192 |
|
|
SCR1_CSR_RESP_ERROR = 'x
|
193 |
|
|
`endif // SCR1_XPROP_EN
|
194 |
|
|
} type_scr1_csr_resp_e;
|
195 |
|
|
|
196 |
|
|
`endif // SCR1_CSR_SVH
|