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 .

Attributes

CSR Address

0x306

Defining extension

  • U, version >= 0

Length

32-bit

Privilege Mode

M

Format

mcounteren format
Figure 1. mcounteren format

Field Summary

Name Location Type Reset Value

CY

0

RW

UNDEFINED_LEGAL

TM

1

RO

0

IR

2

RW

UNDEFINED_LEGAL

HPM3

3

RW

UNDEFINED_LEGAL

HPM4

4

RW

UNDEFINED_LEGAL

HPM5

5

RW

UNDEFINED_LEGAL

HPM6

6

RW

UNDEFINED_LEGAL

HPM7

7

RW

UNDEFINED_LEGAL

HPM8

8

RW

UNDEFINED_LEGAL

HPM9

9

RW

UNDEFINED_LEGAL

HPM10

10

RW

UNDEFINED_LEGAL

HPM11

11

RO

0

HPM12

12

RO

0

HPM13

13

RO

0

HPM14

14

RO

0

HPM15

15

RO

0

HPM16

16

RO

0

HPM17

17

RO

0

HPM18

18

RO

0

HPM19

19

RO

0

HPM20

20

RO

0

HPM21

21

RO

0

HPM22

22

RO

0

HPM23

23

RO

0

HPM24

24

RO

0

HPM25

25

RO

0

HPM26

26

RO

0

HPM27

27

RO

0

HPM28

28

RO

0

HPM29

29

RO

0

HPM30

30

RO

0

HPM31

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

Location

mcounteren[1]

Description

Placeholder for delegating time to less-privileged modes; however, since time is memory-mapped rather than a CSR, this field is always read-only zero.

Type

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