mcounteren
Machine Counter Enable
The counter-enable mcounteren register is a 32-bit register that controls the availability of the hardware performance-monitoring counters to S-mode .
The settings in this register only control accessibility. The act of reading or writing this register does not affect the underlying counters, which continue to increment even when not accessible.
When the CY, TM, IR, or HPMn bit in the mcounteren register is clear, attempts to read the
cycle, time, instret, or hpmcountern
register while executing in
S-mode
will cause an IllegalInstruction
exception. When one of these bits is set, access to the
corresponding register is permitted in
S-mode
The counter-enable bits support two common use cases with minimal hardware. For harts that do not need high-performance timers and counters, machine-mode software can trap accesses and implement all features in software. For harts that need high-performance timers and counters but are not concerned with obfuscating the underlying hardware counters, the counters can be directly exposed to lower privilege modes. |
The cycle, instret, and hpmcountern
CSRs are read-only shadows of mcycle, minstret,
and mhpmcounter n
, respectively. The time CSR is a read-only shadow of the memory-mapped
mtime
register.
Implementations can convert reads of the time and timeh CSRs into loads to the
memory-mapped mtime register, or emulate this functionality on behalf of less-privileged
modes in M-mode software.
|
The cycle, instret, and hpmcountern
CSRs can also be made available to U-mode
through the scounteren CSR
and to VS-mode and/or VU-mode through hcounteren
.
Field Summary
Name | Location | Type | Reset Value |
---|---|---|---|
0 |
RW |
UNDEFINED_LEGAL |
|
1 |
RO |
0 |
|
2 |
RW |
UNDEFINED_LEGAL |
|
3 |
RW |
UNDEFINED_LEGAL |
|
4 |
RW |
UNDEFINED_LEGAL |
|
5 |
RW |
UNDEFINED_LEGAL |
|
6 |
RW |
UNDEFINED_LEGAL |
|
7 |
RW |
UNDEFINED_LEGAL |
|
8 |
RW |
UNDEFINED_LEGAL |
|
9 |
RW |
UNDEFINED_LEGAL |
|
10 |
RW |
UNDEFINED_LEGAL |
|
11 |
RO |
0 |
|
12 |
RO |
0 |
|
13 |
RO |
0 |
|
14 |
RO |
0 |
|
15 |
RO |
0 |
|
16 |
RO |
0 |
|
17 |
RO |
0 |
|
18 |
RO |
0 |
|
19 |
RO |
0 |
|
20 |
RO |
0 |
|
21 |
RO |
0 |
|
22 |
RO |
0 |
|
23 |
RO |
0 |
|
24 |
RO |
0 |
|
25 |
RO |
0 |
|
26 |
RO |
0 |
|
27 |
RO |
0 |
|
28 |
RO |
0 |
|
29 |
RO |
0 |
|
30 |
RO |
0 |
|
31 |
RO |
0 |
Fields
CY
- Location
-
mcounteren[0]
- Description
-
When set, the cycle CSR (an alias of mcycle) is accessible to S-mode.
When scounteren.CY is also set, cycle is futher accessible to U-mode.
When hcounteren.CY is also set, cycle is futher accessible to VS-mode.
When hcounteren.CY && scounteren.CY are both set, cycle is futher accessible to VU-mode.
- Type
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
TM
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
IR
- Location
-
mcounteren[2]
- Description
-
When set, the instret CSR (an alias of minstret) is accessible to S-mode.
When scounteren.IR is also set, instret is futher accessible to U-mode.
When hcounteren.IR is also set, instret is futher accessible to VS-mode.
When hcounteren.IR && scounteren.IR are both set, instret is futher accessible to VU-mode.
- Type
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
HPM3
- Location
-
mcounteren[3]
- Description
-
When set, the hpmcounter3 CSR (an alias of mhpmcounter3) is accessible to S-mode.
When scounteren.HPM3 is also set, hpmcounter3 is futher accessible to U-mode.
When hcounteren.HPM3 is also set, hpmcounter3 is futher accessible to VS-mode.
When hcounteren.HPM3 && scounteren.HPM3 are both set, hpmcounter3 is futher accessible to VU-mode.
- Type
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
HPM4
- Location
-
mcounteren[4]
- Description
-
When set, the hpmcounter4 CSR (an alias of mhpmcounter4) is accessible to S-mode.
When scounteren.HPM4 is also set, hpmcounter4 is futher accessible to U-mode.
When hcounteren.HPM4 is also set, hpmcounter4 is futher accessible to VS-mode.
When hcounteren.HPM4 && scounteren.HPM4 are both set, hpmcounter4 is futher accessible to VU-mode.
- Type
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
HPM5
- Location
-
mcounteren[5]
- Description
-
When set, the hpmcounter5 CSR (an alias of mhpmcounter5) is accessible to S-mode.
When scounteren.HPM5 is also set, hpmcounter5 is futher accessible to U-mode.
When hcounteren.HPM5 is also set, hpmcounter5 is futher accessible to VS-mode.
When hcounteren.HPM5 && scounteren.HPM5 are both set, hpmcounter5 is futher accessible to VU-mode.
- Type
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
HPM6
- Location
-
mcounteren[6]
- Description
-
When set, the hpmcounter6 CSR (an alias of mhpmcounter6) is accessible to S-mode.
When scounteren.HPM6 is also set, hpmcounter6 is futher accessible to U-mode.
When hcounteren.HPM6 is also set, hpmcounter6 is futher accessible to VS-mode.
When hcounteren.HPM6 && scounteren.HPM6 are both set, hpmcounter6 is futher accessible to VU-mode.
- Type
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
HPM7
- Location
-
mcounteren[7]
- Description
-
When set, the hpmcounter7 CSR (an alias of mhpmcounter7) is accessible to S-mode.
When scounteren.HPM7 is also set, hpmcounter7 is futher accessible to U-mode.
When hcounteren.HPM7 is also set, hpmcounter7 is futher accessible to VS-mode.
When hcounteren.HPM7 && scounteren.HPM7 are both set, hpmcounter7 is futher accessible to VU-mode.
- Type
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
HPM8
- Location
-
mcounteren[8]
- Description
-
When set, the hpmcounter8 CSR (an alias of mhpmcounter8) is accessible to S-mode.
When scounteren.HPM8 is also set, hpmcounter8 is futher accessible to U-mode.
When hcounteren.HPM8 is also set, hpmcounter8 is futher accessible to VS-mode.
When hcounteren.HPM8 && scounteren.HPM8 are both set, hpmcounter8 is futher accessible to VU-mode.
- Type
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
HPM9
- Location
-
mcounteren[9]
- Description
-
When set, the hpmcounter9 CSR (an alias of mhpmcounter9) is accessible to S-mode.
When scounteren.HPM9 is also set, hpmcounter9 is futher accessible to U-mode.
When hcounteren.HPM9 is also set, hpmcounter9 is futher accessible to VS-mode.
When hcounteren.HPM9 && scounteren.HPM9 are both set, hpmcounter9 is futher accessible to VU-mode.
- Type
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
HPM10
- Location
-
mcounteren[10]
- Description
-
When set, the hpmcounter10 CSR (an alias of mhpmcounter10) is accessible to S-mode.
When scounteren.HPM10 is also set, hpmcounter10 is futher accessible to U-mode.
When hcounteren.HPM10 is also set, hpmcounter10 is futher accessible to VS-mode.
When hcounteren.HPM10 && scounteren.HPM10 are both set, hpmcounter10 is futher accessible to VU-mode.
- Type
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
HPM11
- Location
-
mcounteren[11]
- Description
-
When set, the hpmcounter11 CSR (an alias of mhpmcounter11) is accessible to S-mode.
When scounteren.HPM11 is also set, hpmcounter11 is futher accessible to U-mode.
When hcounteren.HPM11 is also set, hpmcounter11 is futher accessible to VS-mode.
When hcounteren.HPM11 && scounteren.HPM11 are both set, hpmcounter11 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM12
- Location
-
mcounteren[12]
- Description
-
When set, the hpmcounter12 CSR (an alias of mhpmcounter12) is accessible to S-mode.
When scounteren.HPM12 is also set, hpmcounter12 is futher accessible to U-mode.
When hcounteren.HPM12 is also set, hpmcounter12 is futher accessible to VS-mode.
When hcounteren.HPM12 && scounteren.HPM12 are both set, hpmcounter12 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM13
- Location
-
mcounteren[13]
- Description
-
When set, the hpmcounter13 CSR (an alias of mhpmcounter13) is accessible to S-mode.
When scounteren.HPM13 is also set, hpmcounter13 is futher accessible to U-mode.
When hcounteren.HPM13 is also set, hpmcounter13 is futher accessible to VS-mode.
When hcounteren.HPM13 && scounteren.HPM13 are both set, hpmcounter13 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM14
- Location
-
mcounteren[14]
- Description
-
When set, the hpmcounter14 CSR (an alias of mhpmcounter14) is accessible to S-mode.
When scounteren.HPM14 is also set, hpmcounter14 is futher accessible to U-mode.
When hcounteren.HPM14 is also set, hpmcounter14 is futher accessible to VS-mode.
When hcounteren.HPM14 && scounteren.HPM14 are both set, hpmcounter14 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM15
- Location
-
mcounteren[15]
- Description
-
When set, the hpmcounter15 CSR (an alias of mhpmcounter15) is accessible to S-mode.
When scounteren.HPM15 is also set, hpmcounter15 is futher accessible to U-mode.
When hcounteren.HPM15 is also set, hpmcounter15 is futher accessible to VS-mode.
When hcounteren.HPM15 && scounteren.HPM15 are both set, hpmcounter15 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM16
- Location
-
mcounteren[16]
- Description
-
When set, the hpmcounter16 CSR (an alias of mhpmcounter16) is accessible to S-mode.
When scounteren.HPM16 is also set, hpmcounter16 is futher accessible to U-mode.
When hcounteren.HPM16 is also set, hpmcounter16 is futher accessible to VS-mode.
When hcounteren.HPM16 && scounteren.HPM16 are both set, hpmcounter16 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM17
- Location
-
mcounteren[17]
- Description
-
When set, the hpmcounter17 CSR (an alias of mhpmcounter17) is accessible to S-mode.
When scounteren.HPM17 is also set, hpmcounter17 is futher accessible to U-mode.
When hcounteren.HPM17 is also set, hpmcounter17 is futher accessible to VS-mode.
When hcounteren.HPM17 && scounteren.HPM17 are both set, hpmcounter17 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM18
- Location
-
mcounteren[18]
- Description
-
When set, the hpmcounter18 CSR (an alias of mhpmcounter18) is accessible to S-mode.
When scounteren.HPM18 is also set, hpmcounter18 is futher accessible to U-mode.
When hcounteren.HPM18 is also set, hpmcounter18 is futher accessible to VS-mode.
When hcounteren.HPM18 && scounteren.HPM18 are both set, hpmcounter18 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM19
- Location
-
mcounteren[19]
- Description
-
When set, the hpmcounter19 CSR (an alias of mhpmcounter19) is accessible to S-mode.
When scounteren.HPM19 is also set, hpmcounter19 is futher accessible to U-mode.
When hcounteren.HPM19 is also set, hpmcounter19 is futher accessible to VS-mode.
When hcounteren.HPM19 && scounteren.HPM19 are both set, hpmcounter19 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM20
- Location
-
mcounteren[20]
- Description
-
When set, the hpmcounter20 CSR (an alias of mhpmcounter20) is accessible to S-mode.
When scounteren.HPM20 is also set, hpmcounter20 is futher accessible to U-mode.
When hcounteren.HPM20 is also set, hpmcounter20 is futher accessible to VS-mode.
When hcounteren.HPM20 && scounteren.HPM20 are both set, hpmcounter20 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM21
- Location
-
mcounteren[21]
- Description
-
When set, the hpmcounter21 CSR (an alias of mhpmcounter21) is accessible to S-mode.
When scounteren.HPM21 is also set, hpmcounter21 is futher accessible to U-mode.
When hcounteren.HPM21 is also set, hpmcounter21 is futher accessible to VS-mode.
When hcounteren.HPM21 && scounteren.HPM21 are both set, hpmcounter21 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM22
- Location
-
mcounteren[22]
- Description
-
When set, the hpmcounter22 CSR (an alias of mhpmcounter22) is accessible to S-mode.
When scounteren.HPM22 is also set, hpmcounter22 is futher accessible to U-mode.
When hcounteren.HPM22 is also set, hpmcounter22 is futher accessible to VS-mode.
When hcounteren.HPM22 && scounteren.HPM22 are both set, hpmcounter22 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM23
- Location
-
mcounteren[23]
- Description
-
When set, the hpmcounter23 CSR (an alias of mhpmcounter23) is accessible to S-mode.
When scounteren.HPM23 is also set, hpmcounter23 is futher accessible to U-mode.
When hcounteren.HPM23 is also set, hpmcounter23 is futher accessible to VS-mode.
When hcounteren.HPM23 && scounteren.HPM23 are both set, hpmcounter23 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM24
- Location
-
mcounteren[24]
- Description
-
When set, the hpmcounter24 CSR (an alias of mhpmcounter24) is accessible to S-mode.
When scounteren.HPM24 is also set, hpmcounter24 is futher accessible to U-mode.
When hcounteren.HPM24 is also set, hpmcounter24 is futher accessible to VS-mode.
When hcounteren.HPM24 && scounteren.HPM24 are both set, hpmcounter24 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM25
- Location
-
mcounteren[25]
- Description
-
When set, the hpmcounter25 CSR (an alias of mhpmcounter25) is accessible to S-mode.
When scounteren.HPM25 is also set, hpmcounter25 is futher accessible to U-mode.
When hcounteren.HPM25 is also set, hpmcounter25 is futher accessible to VS-mode.
When hcounteren.HPM25 && scounteren.HPM25 are both set, hpmcounter25 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM26
- Location
-
mcounteren[26]
- Description
-
When set, the hpmcounter26 CSR (an alias of mhpmcounter26) is accessible to S-mode.
When scounteren.HPM26 is also set, hpmcounter26 is futher accessible to U-mode.
When hcounteren.HPM26 is also set, hpmcounter26 is futher accessible to VS-mode.
When hcounteren.HPM26 && scounteren.HPM26 are both set, hpmcounter26 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM27
- Location
-
mcounteren[27]
- Description
-
When set, the hpmcounter27 CSR (an alias of mhpmcounter27) is accessible to S-mode.
When scounteren.HPM27 is also set, hpmcounter27 is futher accessible to U-mode.
When hcounteren.HPM27 is also set, hpmcounter27 is futher accessible to VS-mode.
When hcounteren.HPM27 && scounteren.HPM27 are both set, hpmcounter27 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM28
- Location
-
mcounteren[28]
- Description
-
When set, the hpmcounter28 CSR (an alias of mhpmcounter28) is accessible to S-mode.
When scounteren.HPM28 is also set, hpmcounter28 is futher accessible to U-mode.
When hcounteren.HPM28 is also set, hpmcounter28 is futher accessible to VS-mode.
When hcounteren.HPM28 && scounteren.HPM28 are both set, hpmcounter28 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM29
- Location
-
mcounteren[29]
- Description
-
When set, the hpmcounter29 CSR (an alias of mhpmcounter29) is accessible to S-mode.
When scounteren.HPM29 is also set, hpmcounter29 is futher accessible to U-mode.
When hcounteren.HPM29 is also set, hpmcounter29 is futher accessible to VS-mode.
When hcounteren.HPM29 && scounteren.HPM29 are both set, hpmcounter29 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM30
- Location
-
mcounteren[30]
- Description
-
When set, the hpmcounter30 CSR (an alias of mhpmcounter30) is accessible to S-mode.
When scounteren.HPM30 is also set, hpmcounter30 is futher accessible to U-mode.
When hcounteren.HPM30 is also set, hpmcounter30 is futher accessible to VS-mode.
When hcounteren.HPM30 && scounteren.HPM30 are both set, hpmcounter30 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0
HPM31
- Location
-
mcounteren[31]
- Description
-
When set, the hpmcounter31 CSR (an alias of mhpmcounter31) is accessible to S-mode.
When scounteren.HPM31 is also set, hpmcounter31 is futher accessible to U-mode.
When hcounteren.HPM31 is also set, hpmcounter31 is futher accessible to VS-mode.
When hcounteren.HPM31 && scounteren.HPM31 are both set, hpmcounter31 is futher accessible to VU-mode.
- Type
RO |
Read-Only Field has a hardwired value that does not change. Writes to an RO field are ignored. |
- Reset value
-
0