OpenCores
URL https://opencores.org/ocsvn/yifive/yifive/trunk

Subversion Repositories yifive

[/] [yifive/] [trunk/] [caravel_yifive/] [verilog/] [rtl/] [syntacore/] [scr1/] [src/] [includes/] [scr1_csr.svh] - Blame information for rev 11

Details | Compare with Previous | View Log

Line No. Rev Author Line
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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.