CV32A6_CSR programmers view
CV32A6 does not implement all control and status registers specified in the RISC-V privileged specifications, but is limited to the registers that were needed for a 32-bit application core. This keeps the footprint of the core as low as possible and avoid any overhead that we do not explicitly need.
The Parameter column identifies those CSRs that are dependent on the value of specific compile/synthesis parameters. If these parameters are not set as indicated in Control and Status Register Map then the associated CSR is not implemented. If the parameter column is empty then the associated CSR is always implemented.
The Privilege column indicates the access mode of a CSR. The first letter indicates the lowest privilege level required to access the CSR. Attempts to access a CSR with a higher privilege level than the core is currently running in will throw an illegal instruction exception. This is largely a moot point for the CV32E40P as it only supports machine and debug modes. The remaining letters indicate the read and/or write behavior of the CSR when accessed by the indicated or higher privilge level:
RW: CSR is read-write. That is, CSR instructions (e.g. csrrw) may write any value and that value will be returned on a subsequent read (unless a side-effect causes the core to change the CSR value).
RO: CSR is read-only. Writes by CSR instructions raise an illegal instruction exception.
Writes of a non-supported value to WLRL bitfields of a RW CSR do not result in an illegal instruction exception. The exact bitfield access types, e.g. WLRL or WARL, can be found in the RISC-V privileged specification.
Reads or writes to a CSR that is not implemented will result in an illegal instruction exception.
Any illegal instruction exception raised by CSR access is precise. For instance, reading and writing to a read-only CSR will not update the destination register.
Tip
This section was auto-generated by Register Manager from Jade Design Automation.
Register Summary
Name |
Address Offset |
Width |
Access Type |
Reset Value |
Display Name |
---|---|---|---|---|---|
|
0x1 |
32 |
RW |
0x00000000 |
Floating-Point Accrued Exceptions |
|
0x2 |
32 |
RW |
0x00000000 |
Floating-Point Dynamic Rounding Mode |
|
0x3 |
32 |
RW |
0x00000000 |
Floating-Point Control and Status Register |
|
0x100 |
32 |
RW |
0x00000000 |
Supervisor Status |
|
0x104 |
32 |
RW |
0x00000000 |
Supervisor Interrupt Enable |
|
0x105 |
32 |
RW |
0x00000000 |
Supervisor Trap Vector Base Address |
|
0x106 |
32 |
RW |
0x00000000 |
Supervisor Counter Enable |
|
0x140 |
32 |
RW |
0x00000000 |
Supervisor Scratch |
|
0x141 |
32 |
RW |
0x00000000 |
Supervisor Exception Program Counter |
|
0x142 |
32 |
RW |
0x00000000 |
Supervisor Cause |
|
0x143 |
32 |
RW |
0x00000000 |
Supervisor Trap Value |
|
0x144 |
32 |
RW |
0x00000000 |
Supervisor Interrupt Pending |
|
0x180 |
32 |
RW |
0x00000000 |
Supervisor Address Translation and Protection |
|
0x300 |
32 |
RW |
0x00000000 |
Machine Status |
|
0x301 |
32 |
RW |
0x00000000 |
Machine ISA |
|
0x302 |
32 |
RW |
0x00000000 |
Machine Exception Delegation |
|
0x303 |
32 |
RW |
0x00000000 |
Machine Interrupt Delegation |
|
0x304 |
32 |
RW |
0x00000000 |
Machine Interrupt Enable |
|
0x305 |
32 |
RW |
0x00000000 |
Machine Trap Vector |
|
0x306 |
32 |
RW |
0x00000000 |
Machine Counter Enable |
|
0x323 [+ i*0x1] |
32 |
RW |
0x00000000 |
Hardware Performance-Monitoring Event Selector |
|
0x340 |
32 |
RW |
0x00000000 |
Machine Scratch |
|
0x341 |
32 |
RW |
0x00000000 |
Machine Exception Program Counter |
|
0x342 |
32 |
RW |
0x00000000 |
Machine Cause |
|
0x343 |
32 |
RW |
0x00000000 |
Machine Trap Value |
|
0x344 |
32 |
RW |
0x00000000 |
Machine Interrupt Pending |
|
0x3A0 |
32 |
RW |
0x00000000 |
Physical Memory Protection Config 0 |
|
0x3A1 |
32 |
RW |
0x00000000 |
Physical Memory Protection Config 1 |
|
0x3A2 |
32 |
RW |
0x00000000 |
Physical Memory Protection Config 2 |
|
0x3A3 |
32 |
RW |
0x00000000 |
Physical Memory Protection Config 3 |
|
0x3B0 [+ i*0x1] |
32 |
RW |
0x00000000 |
Physical Memory Protection Address |
|
0x700 |
32 |
RW |
0x00000001 |
Instuction Cache |
|
0x701 |
32 |
RW |
0x00000001 |
Data Cache |
|
0x7A0 |
32 |
RW |
0x00000000 |
Trigger Select |
|
0x7A1 |
32 |
RW |
0x00000000 |
Trigger Data 1 |
|
0x7A2 |
32 |
RW |
0x00000000 |
Trigger Data 2 |
|
0x7A3 |
32 |
RW |
0x00000000 |
Trigger Data 3 |
|
0x7A4 |
32 |
RO |
0x00000000 |
Trigger Info |
|
0x7B0 |
32 |
RW |
0x00000000 |
Debug Control and Status |
|
0x7B1 |
32 |
RW |
0x00000000 |
Debug PC |
|
0x7B2 [+ i*0x1] |
32 |
RW |
0x00000000 |
Debug Scratch Register |
|
0x800 |
32 |
RW |
0x00000000 |
|
|
0xB00 |
32 |
RW |
0x00000000 |
M-mode Cycle counter |
|
0xB02 |
32 |
RW |
0x00000000 |
Machine Instruction Retired counter |
|
0xB03 |
32 |
RW |
0x00000000 |
L1 Inst Cache Miss |
|
0xB04 |
32 |
RW |
0x00000000 |
L1 Data Cache Miss |
|
0xB05 |
32 |
RW |
0x00000000 |
ITLB Miss |
|
0xB06 |
32 |
RW |
0x00000000 |
DTLB Miss |
|
0xB07 |
32 |
RW |
0x00000000 |
Loads |
|
0xB08 |
32 |
RW |
0x00000000 |
Stores |
|
0xB09 |
32 |
RW |
0x00000000 |
Taken Exceptions |
|
0xB0A |
32 |
RW |
0x00000000 |
Exception Return |
|
0xB0B |
32 |
RW |
0x00000000 |
Software Change of PC |
|
0xB0C |
32 |
RW |
0x00000000 |
Procedure Call |
|
0xB0D |
32 |
RW |
0x00000000 |
Procedure Return |
|
0xB0E |
32 |
RW |
0x00000000 |
Branch mis-predicted |
|
0xB0F |
32 |
RW |
0x00000000 |
Scoreboard Full |
|
0xB10 |
32 |
RW |
0x00000000 |
Instruction Fetch Queue Empty |
|
0xB80 |
32 |
RW |
0x00000000 |
Upper 32-bits of M-mode Cycle counter |
|
0xB82 |
32 |
RW |
0x00000000 |
Upper 32-bits of Machine Instruction Retired counter |
|
0xB83 [+ i*0x1] |
32 |
RW |
0x00000000 |
Upper 32-bits of Machine Hardware Performance Monitoring Counter |
|
0xC00 |
32 |
RO |
0x00000000 |
Cycle counter |
|
0xC01 |
32 |
RO |
0x00000000 |
Timer |
|
0xC02 |
32 |
RO |
0x00000000 |
Instruction Retired counter |
|
0xC03 |
32 |
RO |
0x00000000 |
L1 Inst Cache Miss |
|
0xC04 |
32 |
RO |
0x00000000 |
L1 Data Cache Miss |
|
0xC05 |
32 |
RO |
0x00000000 |
ITLB Miss |
|
0xC06 |
32 |
RO |
0x00000000 |
DTLB Miss |
|
0xC07 |
32 |
RO |
0x00000000 |
Loads |
|
0xC08 |
32 |
RO |
0x00000000 |
Stores |
|
0xC09 |
32 |
RO |
0x00000000 |
Taken Exceptions |
|
0xC0A |
32 |
RO |
0x00000000 |
Exception Return |
|
0xC0B |
32 |
RO |
0x00000000 |
Software Change of PC |
|
0xC0C |
32 |
RO |
0x00000000 |
Procedure Call |
|
0xC0D |
32 |
RO |
0x00000000 |
Procedure Return |
|
0xC0E |
32 |
RO |
0x00000000 |
Branch mis-predicted |
|
0xC0F |
32 |
RO |
0x00000000 |
Scoreboard Full |
|
0xC10 |
32 |
RO |
0x00000000 |
Instruction Fetch Queue Empty |
|
0xC80 |
32 |
RO |
0x00000000 |
Upper 32-bits of Cycle counter |
|
0xC81 |
32 |
RO |
0x00000000 |
Upper 32-bit of Timer |
|
0xC82 |
32 |
RO |
0x00000000 |
Upper 32-bits of Instruction Retired counter |
|
0xF11 |
32 |
RO |
0x00000000 |
Machine Vendor ID |
|
0xF12 |
32 |
RO |
0x00000003 |
Machine Architecture ID |
|
0xF13 |
32 |
RO |
0x00000000 |
Machine Implementation ID |
|
0xF14 |
32 |
RO |
0x00000000 |
Machine Hardware Thread ID |
Register Descriptions
Floating-Point Accrued Exceptions (fflags
)
- Address Offset:
0x1
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
The fields within the
fcsr
can also be accessed individually through different CSR addresses, and separate assembler pseudoinstructions are defined for these accesses. The FRRM instruction reads the Rounding Mode fieldfrm
and copies it into the least-significant three bits of integer register rd, with zero in all other bits. FSRM swaps the value in frm by copying the original value into integer register rd, and then writing a new value obtained from the three least-significant bits of integer register rs1 intofrm
. FRFLAGS and FSFLAGS are defined analogously for the Accrued Exception Flags fieldfflags
.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:5] |
|
Reserved |
RO |
0b0 |
[4] |
|
Invalid Operation |
RW |
0b0 |
[3] |
|
Divide by Zero |
RW |
0b0 |
[2] |
|
Overflow |
RW |
0b0 |
[1] |
|
Underflow |
RW |
0b0 |
[0] |
|
Inexact |
RW |
0b0 |
- Invalid Operation (
NV
): The accrued exception flags indicate the exception conditions that have arisen on any floating-point arithmetic instruction since the field was last reset by software. The base RISC-V ISA does not support generating a trap on the setting of a floating-point exception flag.
- Divide by Zero (
DZ
): The accrued exception flags indicate the exception conditions that have arisen on any floating-point arithmetic instruction since the field was last reset by software. The base RISC-V ISA does not support generating a trap on the setting of a floating-point exception flag.
- Overflow (
OF
): The accrued exception flags indicate the exception conditions that have arisen on any floating-point arithmetic instruction since the field was last reset by software. The base RISC-V ISA does not support generating a trap on the setting of a floating-point exception flag.
- Underflow (
UF
): The accrued exception flags indicate the exception conditions that have arisen on any floating-point arithmetic instruction since the field was last reset by software. The base RISC-V ISA does not support generating a trap on the setting of a floating-point exception flag.
- Inexact (
NX
): The accrued exception flags indicate the exception conditions that have arisen on any floating-point arithmetic instruction since the field was last reset by software. The base RISC-V ISA does not support generating a trap on the setting of a floating-point exception flag.
Floating-Point Dynamic Rounding Mode (frm
)
- Address Offset:
0x2
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
The fields within the
fcsr
can also be accessed individually through different CSR addresses, and separate assembler pseudoinstructions are defined for these accesses. The FRRM instruction reads the Rounding Mode fieldfrm
and copies it into the least-significant three bits of integer register rd, with zero in all other bits. FSRM swaps the value in frm by copying the original value into integer register rd, and then writing a new value obtained from the three least-significant bits of integer register rs1 intofrm
. FRFLAGS and FSFLAGS are defined analogously for the Accrued Exception Flags fieldfflags
.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:3] |
|
Reserved |
RO |
0b0 |
[2:0] |
|
Floating-Point Rounding Mode |
RW |
0b0 |
- Floating-Point Rounding Mode (
FRM
): Floating-point operations use either a static rounding mode encoded in the instruction, or a dynamic rounding mode held in
frm
. Rounding modes are encoded as shown in the enumerated value. A value of 111 in the instruction’s rm field selects the dynamic rounding mode held infrm
. Iffrm
is set to an invalid value (101–111), any subsequent attempt to execute a floating-point operation with a dynamic rounding mode will raise an illegal instruction exception. Some instructions, including widening conversions, have the rm field but are nevertheless unaffected by the rounding mode; software should set their rm field to RNE (000).The following table shows the bitfield encoding Value
Name
Description
0b000
RNE
Round to Nearest, ties to Even
0b001
RTZ
Round towards Zero
0b010
RDN
Round Down
0b011
RUP
Round Up
0b100
RMM
Round to Nearest, ties to Max Magnitude
0b101 - 0b110
INVALID
Reserved for future use.
0b111
DYN
- In instruction’s rm field, selects dynamic rounding mode;
In Rounding Mode register, Invalid.
Floating-Point Control and Status Register (fcsr
)
- Address Offset:
0x3
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
The floating-point control and status register,
fcsr
, is a RISC-V control and status register (CSR). It is a read/write register that selects the dynamic rounding mode for floating-point arithmetic operations and holds the accrued exception flags.The
fcsr
register can be read and written with the FRCSR and FSCSR instructions, which are assembler pseudoinstructions built on the underlying CSR access instructions. FRCSR readsfcsr
by copying it into integer register rd. FSCSR swaps the value infcsr
by copying the original value into integer register rd, and then writing a new value obtained from integer register rs1 intofcsr
.The fields within the
fcsr
can also be accessed individually through different CSR addresses, and separate assembler pseudoinstructions are defined for these accesses. The FRRM instruction reads the Rounding Mode fieldfrm
and copies it into the least-significant three bits of integer register rd, with zero in all other bits. FSRM swaps the value in frm by copying the original value into integer register rd, and then writing a new value obtained from the three least-significant bits of integer register rs1 intofrm
. FRFLAGS and FSFLAGS are defined analogously for the Accrued Exception Flags fieldfflags
.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:8] |
|
Reserved |
RO |
0b0 |
[7:5] |
|
Floating-Point Rounding Mode |
RW |
0b0 |
[4] |
|
Invalid Operation |
RW |
0b0 |
[3] |
|
Divide by Zero |
RW |
0b0 |
[2] |
|
Overflow |
RW |
0b0 |
[1] |
|
Underflow |
RW |
0b0 |
[0] |
|
Inexact |
RW |
0b0 |
- Floating-Point Rounding Mode (
FRM
): Floating-point operations use either a static rounding mode encoded in the instruction, or a dynamic rounding mode held in
frm
. Rounding modes are encoded as shown in the enumerated value. A value of 111 in the instruction’s rm field selects the dynamic rounding mode held infrm
. Iffrm
is set to an invalid value (101–111), any subsequent attempt to execute a floating-point operation with a dynamic rounding mode will raise an illegal instruction exception. Some instructions, including widening conversions, have the rm field but are nevertheless unaffected by the rounding mode; software should set their rm field to RNE (000).The following table shows the bitfield encoding Value
Name
Description
0b000
RNE
Round to Nearest, ties to Even
0b001
RTZ
Round towards Zero
0b010
RDN
Round Down
0b011
RUP
Round Up
0b100
RMM
Round to Nearest, ties to Max Magnitude
0b101 - 0b110
INVALID
Reserved for future use.
0b111
DYN
- In instruction’s rm field, selects dynamic rounding mode;
In Rounding Mode register, Invalid.
- Invalid Operation (
NV
): The accrued exception flags indicate the exception conditions that have arisen on any floating-point arithmetic instruction since the field was last reset by software. The base RISC-V ISA does not support generating a trap on the setting of a floating-point exception flag.
- Divide by Zero (
DZ
): The accrued exception flags indicate the exception conditions that have arisen on any floating-point arithmetic instruction since the field was last reset by software. The base RISC-V ISA does not support generating a trap on the setting of a floating-point exception flag.
- Overflow (
OF
): The accrued exception flags indicate the exception conditions that have arisen on any floating-point arithmetic instruction since the field was last reset by software. The base RISC-V ISA does not support generating a trap on the setting of a floating-point exception flag.
- Underflow (
UF
): The accrued exception flags indicate the exception conditions that have arisen on any floating-point arithmetic instruction since the field was last reset by software. The base RISC-V ISA does not support generating a trap on the setting of a floating-point exception flag.
- Inexact (
NX
): The accrued exception flags indicate the exception conditions that have arisen on any floating-point arithmetic instruction since the field was last reset by software. The base RISC-V ISA does not support generating a trap on the setting of a floating-point exception flag.
Supervisor Status (sstatus
)
- Address Offset:
0x100
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
The
sstatus
register keeps track of the processor’s current operating state.The
sstatus
register is a subset of themstatus
register.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31] |
|
State Dirty |
RO |
0b0 |
[30:20] |
|
Reserved |
RO |
0b0 |
[19] |
|
Make eXecutable Readable |
RW |
0b0 |
[18] |
|
Supervisor User Memory |
RW |
0b0 |
[17] |
|
Reserved |
RO |
0b0 |
[16:15] |
|
Extension State |
RO |
0b0 |
[14:13] |
|
Floating-point unit State |
RW |
0b0 |
[12:9] |
|
Reserved |
RO |
0b0 |
[8] |
|
Supervisor mode Prior Privilege |
RW |
0b0 |
[7:6] |
|
Reserved |
RO |
0b0 |
[5] |
|
Supervisor mode Prior Interrupt Enable |
RW |
0b0 |
[4] |
|
RW |
0b0 |
|
[3:2] |
|
Reserved |
RO |
0b0 |
[1] |
|
Supervisor mode Interrupt Enable |
RW |
0b0 |
[0] |
|
RW |
0b0 |
- State Dirty (
SD
): The SD bit is a read-only bit that summarizes whether either the FS, VS, or XS fields signal the presence of some dirty state that will require saving extended user context to memory. If FS, XS, and VS are all read-only zero, then SD is also always zero.
- Make eXecutable Readable (
MXR
): The MXR bit modifies the privilege with which loads access virtual memory. When MXR=0, only loads from pages marked readable will succeed. When MXR=1, loads from pages marked either readable or executable (R=1 or X=1) will succeed. MXR has no effect when page-based virtual memory is not in effect.
- Supervisor User Memory (
SUM
): The SUM (permit Supervisor User Memory access) bit modifies the privilege with which S-mode loads and stores access virtual memory. When SUM=0, S-mode memory accesses to pages that are accessible by U-mode will fault. When SUM=1, these accesses are permitted. SUM has no effect when page-based virtual memory is not in effect. Note that, while SUM is ordinarily ignored when not executing in S-mode, it is in effect when MPRV=1 and MPP=S. SUM is read-only 0 if S-mode is not supported or if
satp
.MODE is read-only 0.- Extension State (
XS
): The XS field is used to reduce the cost of context save and restore by setting and tracking the current state of the user-mode extensions. The XS field encodes the status of the additional user-mode extensions and associated state.
This field can be checked by a context switch routine to quickly determine whether a state save or restore is required. If a save or restore is required, additional instructions and CSRs are typically required to effect and optimize the process.
The following table shows the bitfield encoding Value
Name
Description
0b00
Off
All off
0b01
Initial
None dirty or clean, some on
0b10
Clean
None dirty, some clean
0b11
Dirty
Some dirty
- Floating-point unit State (
FS
): The FS field is used to reduce the cost of context save and restore by setting and tracking the current state of the floating-point unit. The FS field encodes the status of the floating-point unit state, including the floating-point registers
f0–f31
and the CSRsfcsr
,frm
, andfflags
.This field can be checked by a context switch routine to quickly determine whether a state save or restore is required. If a save or restore is required, additional instructions and CSRs are typically required to effect and optimize the process.
The following table shows the bitfield encoding Value
Name
Description
0b00
Off
0b01
Initial
0b10
Clean
0b11
Dirty
- Supervisor mode Prior Privilege (
SPP
): SPP bit indicates the privilege level at which a hart was executing before entering supervisor mode. When a trap is taken, SPP is set to 0 if the trap originated from user mode, or 1 otherwise. When an SRET instruction is executed to return from the trap handler, the privilege level is set to user mode if the SPP bit is 0, or supervisor mode if the SPP bit is 1; SPP is then set to 0.
- Supervisor mode Prior Interrupt Enable (
SPIE
): The SPIE bit indicates whether supervisor interrupts were enabled prior to trapping into supervisor mode. When a trap is taken into supervisor mode, SPIE is set to SIE, and SIE is set to 0. When an SRET instruction is executed, SIE is set to SPIE, then SPIE is set to 1.
UPIE
:When a URET instruction is executed, UIE is set to UPIE, and UPIE is set to 1.
- Supervisor mode Interrupt Enable (
SIE
): The SIE bit enables or disables all interrupts in supervisor mode. When SIE is clear, interrupts are not taken while in supervisor mode. When the hart is running in user-mode, the value in SIE is ignored, and supervisor-level interrupts are enabled. The supervisor can disable individual interrupt sources using the
sie
CSR.UIE
:The UIE bit enables or disables user-mode interrupts.
Supervisor Interrupt Enable (sie
)
- Address Offset:
0x104
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
The
sie
is the register containing supervisor interrupt enable bits.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:10] |
|
Reserved |
RO |
0b0 |
[9] |
|
Supervisor-level External Interrupt Enable |
RW |
0b0 |
[8] |
|
RW |
0b0 |
|
[7:6] |
|
Reserved |
RO |
0b0 |
[5] |
|
Supervisor-level Timer Interrupt Enable |
RW |
0b0 |
[4] |
|
RW |
0b0 |
|
[3:2] |
|
Reserved |
RO |
0b0 |
[1] |
|
Supervisor-level Software Interrupt Enable |
RW |
0b0 |
[0] |
|
RW |
0b0 |
- Supervisor-level External Interrupt Enable (
SEIE
): SEIE is the interrupt-enable bit for supervisor-level external interrupts.
UEIE
:User-level external interrupts are disabled when the UEIE bit in the sie register is clear.
- Supervisor-level Timer Interrupt Enable (
STIE
): STIE is the interrupt-enable bit for supervisor-level timer interrupts.
UTIE
:User-level timer interrupts are disabled when the UTIE bit in the sie register is clear.
- Supervisor-level Software Interrupt Enable (
SSIE
): SSIE is the interrupt-enable bit for supervisor-level software interrupts.
USIE
:User-level software interrupts are disabled when the USIE bit in the sie register is clear
Supervisor Trap Vector Base Address (stvec
)
- Address Offset:
0x105
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
The
stvec
register holds trap vector configuration, consisting of a vector base address (BASE) and a vector mode (MODE).
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:2] |
|
RW |
0b0 |
|
[1:0] |
|
RW |
0b0 |
BASE
:The BASE field in stvec is a WARL field that can hold any valid virtual or physical address, subject to the following alignment constraints: the address must be 4-byte aligned, and MODE settings other than Direct might impose additional alignment constraints on the value in the BASE field.
MODE
:When MODE=Direct, all traps into supervisor mode cause the
pc
to be set to the address in the BASE field. When MODE=Vectored, all synchronous exceptions into supervisor mode cause thepc
to be set to the address in the BASE field, whereas interrupts cause thepc
to be set to the address in the BASE field plus four times the interrupt cause number.The following table shows the bitfield encoding Value
Name
Description
0b00
Direct
All exceptions set
pc
to BASE.0b01
Vectored
Asynchronous interrupts set pc to BASE+4×cause.
0b10 - 0b11
Reserved
Reserved
Supervisor Counter Enable (scounteren
)
- Address Offset:
0x106
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
The counter-enable register
scounteren
controls the availability of the hardware performance monitoring counters to U-mode.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:3] |
|
Hpmcountern |
RW |
0b0 |
[2] |
|
Instret |
RW |
0b0 |
[1] |
|
Time |
RW |
0b0 |
[0] |
|
Cycle |
RW |
0b0 |
- Hpmcountern (
HPMn
): When HPMn is clear, attempts to read the
hpmcountern
register while executing in U-mode will cause an illegal instruction exception. When this bit is set, access to the corresponding register is permitted.- Instret (
IR
): When IR is clear, attempts to read the
instret
register while executing in U-mode will cause an illegal instruction exception. When this bit is set, access to the corresponding register is permitted.- Time (
TM
): When TM is clear, attempts to read the
time
register while executing in U-mode will cause an illegal instruction exception. When this bit is set, access to the corresponding register is permitted.- Cycle (
CY
): When CY is clear, attempts to read the
cycle
register while executing in U-mode will cause an illegal instruction exception. When this bit is set, access to the corresponding register is permitted.
Supervisor Scratch (sscratch
)
- Address Offset:
0x140
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
The
sscratch
register is dedicated for use by the supervisor.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Supervisor Scratch |
RW |
0b0 |
- Supervisor Scratch (
SSCRATCH
): Typically,
sscratch
is used to hold a pointer to the hart-local supervisor context while the hart is executing user code. At the beginning of a trap handler,sscratch
is swapped with a user register to provide an initial working register.
Supervisor Exception Program Counter (sepc
)
- Address Offset:
0x141
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
When a trap is taken into S-mode,
sepc
is written with the virtual address of the instruction that was interrupted or that encountered the exception. Otherwise,sepc
is never written by the implementation, though it may be explicitly written by software.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Supervisor Exception Program Counter |
RW |
0b0 |
- Supervisor Exception Program Counter (
SEPC
): The low bit of SEPC (SEPC[0]) is always zero. On implementations that support only IALIGN=32, the two low bits (SEPC[1:0]) are always zero.
Supervisor Cause (scause
)
- Address Offset:
0x142
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
When a trap is taken into S-mode,
scause
is written with a code indicating the event that caused the trap. Otherwise,scause
is never written by the implementation, though it may be explicitly written by software.Supervisor cause register (
scause
) values after trap are shown in the following table.Interrupt
Exception Code
Description
1
0
Reserved
1
1
Supervisor software interrupt
1
2-4
Reserved
1
5
Supervisor timer interrupt
1
6-8
Reserved
1
9
Supervisor external interrupt
1
10-15
Reserved
1
≥16
Designated for platform use
0
0
Instruction address misaligned
0
1
Instruction access fault
0
2
Illegal instruction
0
3
Breakpoint
0
4
Load address misaligned
0
5
Load access fault
0
6
Store/AMO address misaligned
0
7
Store/AMO access fault
0
8
Environment call from U-mode
0
9
Environment call from S-mode
0
10-11
Reserved
0
12
Instruction page fault
0
13
Load page fault
0
14
Reserved
0
15
Store/AMO page fault
0
16-23
Reserved
0
24-31
Designated for custom use
0
32-47
Reserved
0
48-63
Designated for custom use
0
≥64
Reserved
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31] |
|
RW |
0b0 |
|
[30:0] |
|
Exception Code |
RW |
0b0 |
Interrupt
:The Interrupt bit in the
scause
register is set if the trap was caused by an interrupt.- Exception Code (
Exception_Code
): The Exception Code field contains a code identifying the last exception or interrupt.
Supervisor Trap Value (stval
)
- Address Offset:
0x143
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
When a trap is taken into S-mode,
stval
is written with exception-specific information to assist software in handling the trap. Otherwise,stval
is never written by the implementation, though it may be explicitly written by software. The hardware platform will specify which exceptions must setstval
informatively and which may unconditionally set it to zero.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Supervisor Trap Value |
RW |
0b0 |
- Supervisor Trap Value (
STVAL
): If
stval
is written with a nonzero value when a breakpoint, address-misaligned, access-fault, or page-fault exception occurs on an instruction fetch, load, or store, thenstval
will contain the faulting virtual address.If
stval
is written with a nonzero value when a misaligned load or store causes an access-fault or page-fault exception, thenstval
will contain the virtual address of the portion of the access that caused the fault.If
stval
is written with a nonzero value when an instruction access-fault or page-fault exception occurs on a system with variable-length instructions, thenstval
will contain the virtual address of the portion of the instruction that caused the fault, whilesepc
will point to the beginning of the instruction.The
stval
register can optionally also be used to return the faulting instruction bits on an illegal instruction exception (sepc
points to the faulting instruction in memory). Ifstval
is written with a nonzero value when an illegal-instruction exception occurs, thenstval
will contain the shortest of:the actual faulting instruction
the first ILEN bits of the faulting instruction
the first SXLEN bits of the faulting instruction
The value loaded into
stval
on an illegal-instruction exception is right-justified and all unused upper bits are cleared to zero. For other traps,stval
is set to zero, but a future standard may redefinestval’s
setting for other traps.
Supervisor Interrupt Pending (sip
)
- Address Offset:
0x144
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
The
sip
register contains information on pending interrupts.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:10] |
|
Reserved |
RO |
0b0 |
[9] |
|
Supervisor-level External Interrupt Pending |
RO |
0b0 |
[8] |
|
RW |
0b0 |
|
[7:6] |
|
Reserved |
RO |
0b0 |
[5] |
|
Supervisor-level Timer Interrupt Pending |
RO |
0b0 |
[4] |
|
RW |
0b0 |
|
[3:2] |
|
Reserved |
RO |
0b0 |
[1] |
|
Supervisor-level Software Interrupt Pending |
RO |
0b0 |
[0] |
|
RW |
0b0 |
- Supervisor-level External Interrupt Pending (
SEIP
): SEIP is the interrupt-pending bit for supervisor-level external interrupts.
UEIP
:UEIP may be written by S-mode software to indicate to U-mode that an external interrupt is pending.
- Supervisor-level Timer Interrupt Pending (
STIP
): SEIP is the interrupt-pending bit for supervisor-level timer interrupts.
UTIP
:A user-level timer interrupt is pending if the UTIP bit in the sip register is set
- Supervisor-level Software Interrupt Pending (
SSIP
): SSIP is the interrupt-pending bit for supervisor-level software interrupts.
USIP
:A user-level software interrupt is triggered on the current hart by riting 1 to its user software interrupt-pending (USIP) bit
Supervisor Address Translation and Protection (satp
)
- Address Offset:
0x180
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
The
satp
register controls supervisor-mode address translation and protection.The
satp
register is considered active when the effective privilege mode is S-mode or U-mode. Executions of the address-translation algorithm may only begin using a given value ofsatp
whensatp
is active.Note
Writing
satp
does not imply any ordering constraints between page-table updates and subsequent address translations, nor does it imply any invalidation of address-translation caches. If the new address space’s page tables have been modified, or if an ASID is reused, it may be necessary to execute an SFENCE.VMA instruction after, or in some cases before, writingsatp
.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31] |
|
Mode |
RW |
0b0 |
[30:22] |
|
Address Space Identifier |
RW |
0b0 |
[21:0] |
|
Physical Page Number |
RW |
0b0 |
- Mode (
MODE
): This bitfield selects the current address-translation scheme.
When MODE=Bare, supervisor virtual addresses are equal to supervisor physical addresses, and there is no additional memory protection beyond the physical memory protection scheme.
To select MODE=Bare, software must write zero to the remaining fields of
satp
(bits 30–0). Attempting to select MODE=Bare with a nonzero pattern in the remaining fields has anunspecified
effect on the value that the remaining fields assume and anunspecified
effect on address translation and protection behavior.The following table shows the bitfield encoding Value
Name
Description
0
Bare
No translation or protection.
1
Sv32
Page-based 32-bit virtual addressing.
- Address Space Identifier (
ASID
): This bitfield facilitates address-translation fences on a per-address-space basis.
- Physical Page Number (
PPN
): This bitfield holds the root page table, i.e., its supervisor physical address divided by 4 KiB.
Machine Status (mstatus
)
- Address Offset:
0x300
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
The
mstatus
register keeps track of and controls the hart’s current operating state.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31] |
|
State Dirty |
RO |
0b0 |
[30:23] |
|
Reserved |
RO |
0b0 |
[22] |
|
Trap SRET |
RW |
0b0 |
[21] |
|
Timeout Wait |
RW |
0b0 |
[20] |
|
Trap Virtual Memory |
RW |
0b0 |
[19] |
|
Make eXecutable Readable |
RW |
0b0 |
[18] |
|
Supervisor User Memory |
RW |
0b0 |
[17] |
|
Modify Privilege |
RW |
0b0 |
[16:15] |
|
Extension State |
RO |
0b0 |
[14:13] |
|
Floating-point unit State |
RW |
0b0 |
[12:11] |
|
Machine mode Prior Privilege |
RW |
0b0 |
[10:9] |
|
Reserved |
RO |
0b0 |
[8] |
|
Supervisor mode Prior Privilege |
RW |
0b0 |
[7] |
|
Machine mode Prior Interrupt Enable |
RW |
0b0 |
[6] |
|
Reserved |
RO |
0b0 |
[5] |
|
Supervisor mode Prior Interrupt Enable |
RW |
0b0 |
[4] |
|
RW |
0b0 |
|
[3] |
|
Machine mode Interrupt Enable |
RW |
0b0 |
[2] |
|
Reserved |
RO |
0b0 |
[1] |
|
Supervisor mode Interrupt Enable |
RW |
0b0 |
[0] |
|
RW |
0b0 |
- State Dirty (
SD
): The SD bit is a read-only bit that summarizes whether either the FS, VS, or XS fields signal the presence of some dirty state that will require saving extended user context to memory. If FS, XS, and VS are all read-only zero, then SD is also always zero.
- Trap SRET (
TSR
): The TSR bit supports intercepting the supervisor exception return instruction, SRET. When TSR=1, attempts to execute SRET while executing in S-mode will raise an illegal instruction exception. When TSR=0, this operation is permitted in S-mode.
- Timeout Wait (
TW
): The TW bit supports intercepting the WFI instruction. When TW=0, the WFI instruction may execute in lower privilege modes when not prevented for some other reason. When TW=1, then if WFI is executed in any less-privileged mode, and it does not complete within an implementation-specific, bounded time limit, the WFI instruction causes an illegal instruction exception. The time limit may always be 0, in which case WFI always causes an illegal instruction exception in less-privileged modes when TW=1.
- Trap Virtual Memory (
TVM
): The TVM bit supports intercepting supervisor virtual-memory management operations. When TVM=1, attempts to read or write the
satp
CSR or execute an SFENCE.VMA or SINVAL.VMA instruction while executing in S-mode will raise an illegal instruction exception. When TVM=0, these operations are permitted in S-mode.- Make eXecutable Readable (
MXR
): The MXR bit modifies the privilege with which loads access virtual memory. When MXR=0, only loads from pages marked readable will succeed. When MXR=1, loads from pages marked either readable or executable (R=1 or X=1) will succeed. MXR has no effect when page-based virtual memory is not in effect.
- Supervisor User Memory (
SUM
): The SUM (permit Supervisor User Memory access) bit modifies the privilege with which S-mode loads and stores access virtual memory. When SUM=0, S-mode memory accesses to pages that are accessible by U-mode will fault. When SUM=1, these accesses are permitted. SUM has no effect when page-based virtual memory is not in effect. Note that, while SUM is ordinarily ignored when not executing in S-mode, it is in effect when MPRV=1 and MPP=S.
- Modify Privilege (
MPRV
): The MPRV (Modify PRiVilege) bit modifies the effective privilege mode, i.e., the privilege level at which loads and stores execute. When MPRV=0, loads and stores behave as normal, using the translation and protection mechanisms of the current privilege mode. When MPRV=1, load and store memory addresses are translated and protected, and endianness is applied, as though the current privilege mode were set to MPP. Instruction address-translation and protection are unaffected by the setting of MPRV.
- Extension State (
XS
): The XS field is used to reduce the cost of context save and restore by setting and tracking the current state of the user-mode extensions. The XS field encodes the status of the additional user-mode extensions and associated state.
This field can be checked by a context switch routine to quickly determine whether a state save or restore is required. If a save or restore is required, additional instructions and CSRs are typically required to effect and optimize the process.
The following table shows the bitfield encoding Value
Name
Description
0b00
Off
All off
0b01
Initial
None dirty or clean, some on
0b10
Clean
None dirty, some clean
0b11
Dirty
Some dirty
- Floating-point unit State (
FS
): The FS field is used to reduce the cost of context save and restore by setting and tracking the current state of the floating-point unit. The FS field encodes the status of the floating-point unit state, including the floating-point registers
f0–f31
and the CSRsfcsr
,frm
, andfflags
.This field can be checked by a context switch routine to quickly determine whether a state save or restore is required. If a save or restore is required, additional instructions and CSRs are typically required to effect and optimize the process.
The following table shows the bitfield encoding Value
Name
Description
0b00
Off
0b01
Initial
0b10
Clean
0b11
Dirty
- Machine mode Prior Privilege (
MPP
): Holds the previous privilege mode for machine mode.
- Supervisor mode Prior Privilege (
SPP
): Holds the previous privilege mode for supervisor mode.
- Machine mode Prior Interrupt Enable (
MPIE
): Indicates whether machine interrupts were enabled prior to trapping into machine mode.
- Supervisor mode Prior Interrupt Enable (
SPIE
): Indicates whether supervisor interrupts were enabled prior to trapping into supervisor mode.
UPIE
:indicates whether user-level interrupts were enabled prior to taking a user-level trap
- Machine mode Interrupt Enable (
MIE
): Global interrupt-enable bit for Machine mode.
- Supervisor mode Interrupt Enable (
SIE
): Global interrupt-enable bit for Supervisor mode.
UIE
:Global interrupt-enable bits
Machine ISA (misa
)
- Address Offset:
0x301
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
The misa CSR is reporting the ISA supported by the hart.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:30] |
|
Machine XLEN |
RW |
0b0 |
[29:26] |
|
Reserved |
RO |
0b0 |
[25:0] |
|
Extensions |
RW |
0b0 |
- Machine XLEN (
MXL
): The MXL field encodes the native base integer ISA width.
The following table shows the bitfield encoding Value
Name
Description
0b01
XLEN_32
0b10
XLEN_64
0b11
XLEN_128
- Extensions (
Extensions
): The Extensions field encodes the presence of the standard extensions, with a single bit per letter of the alphabet.
The following table shows the bitfield encoding Value
Name
Description
0b00000000000000000000000001
A
Atomic extension.
0b00000000000000000000000010
B
Tentatively reserved for Bit-Manipulation extension.
0b00000000000000000000000100
C
Compressed extension.
0b00000000000000000000001000
D
Double-precision floating-point extension.
0b00000000000000000000010000
E
RV32E base ISA.
0b00000000000000000000100000
F
Single-precision floating-point extension.
0b00000000000000000001000000
G
Reserved.
0b00000000000000000010000000
H
Hypervisor extension.
0b00000000000000000100000000
I
RV32I/64I/128I base ISA.
0b00000000000000001000000000
J
Tentatively reserved for Dynamically Translated Languages extension.
0b00000000000000010000000000
K
Reserved.
0b00000000000000100000000000
L
Reserved.
0b00000000000001000000000000
M
Integer Multiply/Divide extension.
0b00000000000010000000000000
N
Tentatively reserved for User-Level Interrupts extension.
0b00000000000100000000000000
O
Reserved.
0b00000000001000000000000000
P
Tentatively reserved for Packed-SIMD extension.
0b00000000010000000000000000
Q
Quad-precision floating-point extension.
0b00000000100000000000000000
R
Reserved.
0b00000001000000000000000000
S
Supervisor mode implemented.
0b00000010000000000000000000
T
Reserved.
0b00000100000000000000000000
U
User mode implemented.
0b00001000000000000000000000
V
Tentatively reserved for Vector extension.
0b00010000000000000000000000
W
Reserved.
0b00100000000000000000000000
X
Non-standard extensions present.
0b01000000000000000000000000
Y
Reserved.
0b10000000000000000000000000
Z
Reserved.
Machine Exception Delegation (medeleg
)
- Address Offset:
0x302
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Provides individual read/write bits to indicate that certain exceptions should be processed directly by a lower privilege level.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Synchronous Exceptions |
RW |
0b0 |
- Synchronous Exceptions (
Synchronous_Exceptions
): There is a bit position allocated for every synchronous exception, with the index of the bit position equal to the value returned in the
mcause
register.
Machine Interrupt Delegation (mideleg
)
- Address Offset:
0x303
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Provides individual read/write bits to indicate that certain interrupts should be processed directly by a lower privilege level.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Interrupts |
RW |
0b0 |
- Interrupts (
Interrupts
): This bitfield holds trap delegation bits for individual interrupts, with the layout of bits matching those in the
mip
register.
Machine Interrupt Enable (mie
)
- Address Offset:
0x304
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
This register contains machine interrupt enable bits.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:12] |
|
Reserved |
RO |
0b0 |
[11] |
|
M-mode External Interrupt Enable |
RW |
0b0 |
[10] |
|
Reserved |
RO |
0b0 |
[9] |
|
S-mode External Interrupt Enable |
RW |
0b0 |
[8] |
|
RW |
0b0 |
|
[7] |
|
M-mode Timer Interrupt Enable |
RW |
0b0 |
[6] |
|
Reserved |
RO |
0b0 |
[5] |
|
S-mode Timer Interrupt Enable |
RW |
0b0 |
[4] |
|
RW |
0b0 |
|
[3] |
|
M-mode Software Interrupt Enable |
RW |
0b0 |
[2] |
|
Reserved |
RO |
0b0 |
[1] |
|
S-mode Software Interrupt Enable |
RW |
0b0 |
[0] |
|
RW |
0b0 |
- M-mode External Interrupt Enable (
MEIE
): Enables machine mode external interrupts.
- S-mode External Interrupt Enable (
SEIE
): Enables supervisor mode external interrupts.
UEIE
:enables U-mode external interrupts
- M-mode Timer Interrupt Enable (
MTIE
): Enables machine mode timer interrupts.
- S-mode Timer Interrupt Enable (
STIE
): Enables supervisor mode timer interrupts.
UTIE
:timer interrupt-enable bit for U-mode
- M-mode Software Interrupt Enable (
MSIE
): Enables machine mode software interrupts.
- S-mode Software Interrupt Enable (
SSIE
): Enables supervisor mode software interrupts.
USIE
:enable U-mode software interrrupts
Machine Trap Vector (mtvec
)
- Address Offset:
0x305
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
This register holds trap vector configuration, consisting of a vector base address and a vector mode.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:2] |
|
RW |
0b0 |
|
[1:0] |
|
RW |
0b0 |
BASE
:Holds the vector base address. The value in the BASE field must always be aligned on a 4-byte boundary.
MODE
:Imposes additional alignment constraints on the value in the BASE field.
The following table shows the bitfield encoding Value
Name
Description
0b00
Direct
All exceptions set
pc
to BASE.0b01
Vectored
Asynchronous interrupts set
pc
to BASE+4×cause.0b10-0b11
Reserved
Reserved.
Machine Counter Enable (mcountern
)
- Address Offset:
0x306
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
This register controls the availability of the hardware performance-monitoring counters to the next-lowest privileged mode.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:3] |
|
Hpmcountern |
RW |
0b0 |
[2] |
|
Instret |
RW |
0b0 |
[1] |
|
Time |
RW |
0b0 |
[0] |
|
Cycle |
RW |
0b0 |
- Hpmcountern (
HPMn
): When HPMn is clear, attempts to read the
hpmcountern
register while executing in S-mode or U-mode will cause an illegal instruction exception. When this bit is set, access to the corresponding register is permitted in the next implemented privilege mode.- Instret (
IR
): When IR is clear, attempts to read the
instret
register while executing in S-mode or U-mode will cause an illegal instruction exception. When this bit is set, access to the corresponding register is permitted in the next implemented privilege mode.- Time (
TM
): When TM is clear, attempts to read the
time
register while executing in S-mode or U-mode will cause an illegal instruction exception. When this bit is set, access to the corresponding register is permitted in the next implemented privilege mode.- Cycle (
CY
): When CY is clear, attempts to read the
cycle
register while executing in S-mode or U-mode will cause an illegal instruction exception. When this bit is set, access to the corresponding register is permitted in the next implemented privilege mode.
Hardware Performance-Monitoring Event Selector (hpmevent[6]
)
- Address Offset:
0x323 [+ i*0x1]
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
This register controls which event causes the corresponding counter to increment.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:5] |
|
Reserved |
RO |
0b0 |
[4:0] |
|
RW |
0b0 |
mhpmevent
:event selector CSRs
Machine Scratch (mscratch
)
- Address Offset:
0x340
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
This register is used to hold a pointer to a machine-mode hart-local context space and swapped with a user register upon entry to an M-mode trap handler.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Machine Scratch |
RW |
0b0 |
- Machine Scratch (
mscratch
): Holds a pointer to a machine-mode hart-local context space and swapped with a user register upon entry to an M-mode trap handler.
Machine Exception Program Counter (mepc
)
- Address Offset:
0x341
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
This register must be able to hold all valid virtual addresses.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Machine Exception Program Counter |
RW |
0b0 |
- Machine Exception Program Counter (
mepc
): When a trap is taken into M-mode,
mepc
is written with the virtual address of the instruction that was interrupted or that encountered the exception.
Machine Cause (mcause
)
- Address Offset:
0x342
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
When a trap is taken into M-mode, mcause is written with a code indicating the event that caused the trap.
Machine cause register (
mcause
) values after trap are shown in the following table.Interrupt
Exception Code
Description
1
0
Reserved
1
1
Supervisor software interrupt
1
2-4
Reserved
1
5
Supervisor timer interrupt
1
6-8
Reserved
1
9
Supervisor external interrupt
1
10-15
Reserved
1
≥16
Designated for platform use
0
0
Instruction address misaligned
0
1
Instruction access fault
0
2
Illegal instruction
0
3
Breakpoint
0
4
Load address misaligned
0
5
Load access fault
0
6
Store/AMO address misaligned
0
7
Store/AMO access fault
0
8
Environment call from U-mode
0
9
Environment call from S-mode
0
10-11
Reserved
0
12
Instruction page fault
0
13
Load page fault
0
14
Reserved
0
15
Store/AMO page fault
0
16-23
Reserved
0
24-31
Designated for custom use
0
32-47
Reserved
0
48-63
Designated for custom use
0
≥64
Reserved
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31] |
|
Interrupt |
RW |
0b0 |
[30:0] |
|
Exception Code |
RW |
0b0 |
- Interrupt (
Interrupt
): This bit is set if the trap was caused by an interrupt.
- Exception Code (
exception_code
): This field contains a code identifying the last exception or interrupt.
Machine Trap Value (mtval
)
- Address Offset:
0x343
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
When a trap is taken into M-mode, mtval is either set to zero or written with exception-specific information to assist software in handling the trap.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Machine Trap Value |
RW |
0b0 |
- Machine Trap Value (
mtval
): If
mtval
is written with a nonzero value when a breakpoint, address-misaligned, access-fault, or page-fault exception occurs on an instruction fetch, load, or store, then mtval will contain the faulting virtual address.If
mtval
is written with a nonzero value when a misaligned load or store causes an access-fault or page-fault exception, thenmtval
will contain the virtual address of the portion of the access that caused the fault.If
mtval
is written with a nonzero value when an instruction access-fault or page-fault exception occurs on a system with variable-length instructions, thenmtval
will contain the virtual address of the portion of the instruction that caused the fault, whilemepc
will point to the beginning of the instruction.
Machine Interrupt Pending (mip
)
- Address Offset:
0x344
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
This register contains machine interrupt pending bits.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:12] |
|
Reserved |
RO |
0b0 |
[11] |
|
M-mode External Interrupt Pending |
RO |
0b0 |
[10] |
|
Reserved |
RO |
0b0 |
[9] |
|
S-mode External Interrupt Pending |
RW |
0b0 |
[8] |
|
RW |
0b0 |
|
[7] |
|
M-mode Timer Interrupt Pending |
RO |
0b0 |
[6] |
|
Reserved |
RO |
0b0 |
[5] |
|
S-mode Timer Interrupt Pending |
RW |
0b0 |
[4] |
|
RW |
0b0 |
|
[3] |
|
M-mode Software Interrupt Pending |
RO |
0b0 |
[2] |
|
Reserved |
RO |
0b0 |
[1] |
|
S-mode Software Interrupt Pending |
RW |
0b0 |
[0] |
|
RW |
0b0 |
- M-mode External Interrupt Pending (
MEIP
): The interrupt-pending bit for machine-level external interrupts.
- S-mode External Interrupt Pending (
SEIP
): The interrupt-pending bit for supervisor-level external interrupts.
UEIP
:enables external interrupts
- M-mode Timer Interrupt Pending (
MTIP
): The interrupt-pending bit for machine-level timer interrupts.
- S-mode Timer Interrupt Pending (
STIP
): The interrupt-pending bit for supervisor-level timer interrupts.
UTIP
:Correspond to timer interrupt-pending bits for user interrupt
- M-mode Software Interrupt Pending (
MSIP
): The interrupt-pending bit for machine-level software interrupts.
- S-mode Software Interrupt Pending (
SSIP
): The interrupt-pending bit for supervisor-level software interrupts.
USIP
:A hart to directly write its own USIP bits when running in the appropriate mode
Physical Memory Protection Config 0 (pmpcfg0
)
- Address Offset:
0x3A0
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Holds configuration 0-3.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:24] |
|
Physical Memory Protection 3 Config |
RW |
0b0 |
[23:16] |
|
Physical Memory Protection 2 Config |
RW |
0b0 |
[15:8] |
|
Physical Memory Protection 1 Config |
RW |
0b0 |
[7:0] |
|
Physical Memory Protection 0 Config |
RW |
0b0 |
- Physical Memory Protection 3 Config (
pmp3cfg
): Holds the configuration.
- Physical Memory Protection 2 Config (
pmp2cfg
): Holds the configuration.
- Physical Memory Protection 1 Config (
pmp1cfg
): Holds the configuration.
- Physical Memory Protection 0 Config (
pmp0cfg
): Holds the configuration.
Physical Memory Protection Config 1 (pmpcfg1
)
- Address Offset:
0x3A1
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Holds configuration 4-7.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:24] |
|
Physical Memory Protection 7 Config |
RW |
0b0 |
[23:16] |
|
Physical Memory Protection 6 Config |
RW |
0b0 |
[15:8] |
|
Physical Memory Protection 5 Config |
RW |
0b0 |
[7:0] |
|
Physical Memory Protection 4 Config |
RW |
0b0 |
- Physical Memory Protection 7 Config (
pmp7cfg
): Holds the configuration.
- Physical Memory Protection 6 Config (
pmp6cfg
): Holds the configuration.
- Physical Memory Protection 5 Config (
pmp5cfg
): Holds the configuration.
- Physical Memory Protection 4 Config (
pmp4cfg
): Holds the configuration.
Physical Memory Protection Config 2 (pmpcfg2
)
- Address Offset:
0x3A2
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Holds configuration 8-11.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:24] |
|
Physical Memory Protection 11 Config |
RW |
0b0 |
[23:16] |
|
Physical Memory Protection 10 Config |
RW |
0b0 |
[15:8] |
|
Physical Memory Protection 9 Config |
RW |
0b0 |
[7:0] |
|
Physical Memory Protection 8 Config |
RW |
0b0 |
- Physical Memory Protection 11 Config (
pmp11cfg
): Holds the configuration.
- Physical Memory Protection 10 Config (
pmp10cfg
): Holds the configuration.
- Physical Memory Protection 9 Config (
pmp9cfg
): Holds the configuration.
- Physical Memory Protection 8 Config (
pmp8cfg
): Holds the configuration.
Physical Memory Protection Config 3 (pmpcfg3
)
- Address Offset:
0x3A3
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Holds configuration 12-15.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:24] |
|
Physical Memory Protection 15 Config |
RW |
0b0 |
[23:16] |
|
Physical Memory Protection 14 Config |
RW |
0b0 |
[15:8] |
|
Physical Memory Protection 13 Config |
RW |
0b0 |
[7:0] |
|
Physical Memory Protection 12 Config |
RW |
0b0 |
- Physical Memory Protection 15 Config (
pmp15cfg
): Holds the configuration.
- Physical Memory Protection 14 Config (
pmp14cfg
): Holds the configuration.
- Physical Memory Protection 13 Config (
pmp13cfg
): Holds the configuration.
- Physical Memory Protection 12 Config (
pmp12cfg
): Holds the configuration.
Physical Memory Protection Address (pmpaddr[16]
)
- Address Offset:
0x3B0 [+ i*0x1]
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Address register for Physical Memory Protection.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Address |
RW |
0b0 |
- Address (
address
): Encodes bits 33-2 of a 34-bit physical address.
Instuction Cache (icache
)
- Address Offset:
0x700
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000001
- Description:
Custom Register to enable/disable for Icache [bit 0]
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:1] |
|
Reserved |
RO |
0b0 |
[0] |
|
Instruction Cache |
RW |
0b1 |
- Instruction Cache (
icache
): Custom Register
Data Cache (dcache
)
- Address Offset:
0x701
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000001
- Description:
Custom Register to enable/disable for Dcache [bit 0]
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:1] |
|
Reserved |
RO |
0b0 |
[0] |
|
Data Cache |
RW |
0b1 |
- Data Cache (
dcache
): Custom Register
Trigger Select (tselect
)
- Address Offset:
0x7A0
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
This register determines which trigger is accessible through the other trigger registers.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Index |
RW |
0b0 |
- Index (
index
): The set of accessible triggers must start at 0, and be contiguous.
Writes of values greater than or equal to the number of supported triggers may result in a different value in this register than what was written. To verify that what they wrote is a valid index, debuggers can read back the value and check that
tselect
holds what they wrote.Since triggers can be used both by Debug Mode and M-mode, the debugger must restore this register if it modifies it.
Trigger Data 1 (tdata1
)
- Address Offset:
0x7A1
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Trigger-specific data.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:28] |
|
Type |
RW |
0b0 |
[27] |
|
Debug Mode |
RW |
0b0 |
[26:0] |
|
Data |
RW |
0b0 |
- Type (
type
): Type of trigger.
The following table shows the bitfield encoding Value
Name
Description
0b0000
no_trigger
There is no trigger at this
tselect
.0b0001
legacy_address_match_trigger
The trigger is a legacy SiFive address match trigger. These should not be implemented and aren’t further documented here.
0b0010
address_data_match_trigger
The trigger is an address/data match trigger. The remaining bits in this register act as described in
mcontrol
.0b0011
instruction_count_trigger
The trigger is an instruction count trigger. The remaining bits in this register act as described in
icount
.0b0100
interrupt_trigger
The trigger is an interrupt trigger. The remaining bits in this register act as described in
itrigger
.0b0101
exception_trigger
The trigger is an exception trigger. The remaining bits in this register act as described in
etrigger
.0b0110-0b1110
Reserved
Reserved.
0b1111
trigger_exists
This trigger exists (so enumeration shouldn’t terminate), but is not currently available.
- Debug Mode (
dmode
): This bit is only writable from Debug Mode.
The following table shows the bitfield encoding Value
Name
Description
0
D_and_M_mode
Both Debug and M-mode can write the
tdata
registers at the selectedtselect
.1
M_mode_only
Only Debug Mode can write the
tdata
registers at the selectedtselect
. Writes from other modes are ignored.- Data (
data
): Trigger-specific data.
Trigger Data 2 (tdata2
)
- Address Offset:
0x7A2
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Trigger-specific data.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Data |
RW |
0b0 |
- Data (
data
): Trigger-specific data.
Trigger Data 3 (tdata3
)
- Address Offset:
0x7A3
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Trigger-specific data.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Data |
RW |
0b0 |
- Data (
data
): Trigger-specific data.
Trigger Info (tinfo
)
- Address Offset:
0x7A4
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Shows trigger information.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:16] |
|
Reserved |
RO |
0b0 |
[15:0] |
|
Info |
RO |
0b0 |
- Info (
info
): One bit for each possible
type
enumerated intdata1
. Bit N corresponds to type N. If the bit is set, then that type is supported by the currently selected trigger.If the currently selected trigger doesn’t exist, this field contains 1.
If
type
is not writable, this register may be unimplemented, in which case reading it causes an illegal instruction exception. In this case the debugger can read the only supported type fromtdata1
.
Debug Control and Status (dcsr
)
- Address Offset:
0x7B0
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Debug ontrol and status register.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:28] |
|
Debug Version |
RO |
0b0 |
[27:16] |
|
Reserved |
RO |
0b0 |
[15] |
|
Environment Breakpoint M-mode |
RW |
0b0 |
[14] |
|
Reserved |
RO |
0b0 |
[13] |
|
Environment Breakpoint S-mode |
RW |
0b0 |
[12] |
|
Environment Breakpoint U-mode |
RW |
0b0 |
[11] |
|
Stepping Interrupt Enable |
RW |
0b0 |
[10] |
|
Stop Counters |
RW |
0b0 |
[9] |
|
Stop Timers |
RW |
0b0 |
[8:6] |
|
Cause |
RW |
0b0 |
[5] |
|
Reserved |
RO |
0b0 |
[4] |
|
Modify Privilege Enable |
RW |
0b0 |
[3] |
|
Non-Maskable Interrupt Pending |
RO |
0b0 |
[2] |
|
Step |
RW |
0b0 |
[1:0] |
|
Privilege level |
RW |
0b0 |
- Debug Version (
xdebugver
): Shows the version of the debug support.
The following table shows the bitfield encoding Value
Name
Description
0b0000
no_ext_debug
There is no external debug support.
0b0100
ext_debug_spec
External debug support exists as it is described in the riscv-debug-release document.
0b1111
ext_debug_no_spec
There is external debug support, but it does not conform to any available version of the riscv-debug-release spec.
- Environment Breakpoint M-mode (
ebreakm
): Shows the behvior of the
ebreak
instruction in machine mode.The following table shows the bitfield encoding Value
Name
Description
0
break_as_spec
ebreak
instructions in M-mode behave as described in the Privileged Spec.1
break_to_debug
ebreak
instructions in M-mode enter Debug Mode.- Environment Breakpoint S-mode (
ebreaks
): Shows the behvior of the
ebreak
instruction in supervisor mode.The following table shows the bitfield encoding Value
Name
Description
0
break_as_spec
ebreak
instructions in S-mode behave as described in the Privileged Spec.1
break_to_debug
ebreak
instructions in S-mode enter Debug Mode.- Environment Breakpoint U-mode (
ebreaku
): Shows the behvior of the
ebreak
instruction in user mode.The following table shows the bitfield encoding Value
Name
Description
0
break_as_spec
ebreak
instructions in U-mode behave as described in the Privileged Spec.1
break_to_debug
ebreak
instructions in U-mode enter Debug Mode.- Stepping Interrupt Enable (
stepie
): Enables/disables interrupts for single stepping.
The debugger must not change the value of this bit while the hart is running.
The following table shows the bitfield encoding Value
Name
Description
0
disabled
Interrupts are disabled during single stepping.
1
enabled
Interrupts are enabled during single stepping.
- Stop Counters (
stopcount
): Starts/stops incrementing counters in debug mode.
The following table shows the bitfield encoding Value
Name
Description
0
increment_counters
Increment counters as usual.
1
dont_increment_counters
Don’t increment any counters while in Debug Mode or on
ebreak
instructions that cause entry into Debug Mode.- Stop Timers (
stoptime
): Starts/stops incrementing timers in debug mode.
The following table shows the bitfield encoding Value
Name
Description
0
increment_timers
Increment timers as usual.
1
dont_increment_timers
Don’t increment any hart-local timers while in Debug Mode.
- Cause (
cause
): Explains why Debug Mode was entered.
When there are multiple reasons to enter Debug Mode in a single cycle, hardware sets
cause
to the cause with the highest priority.The following table shows the bitfield encoding Value
Name
Description
0b001
ebreak_instruction
An
ebreak
instruction was executed. (priority 3)0b010
trigger_module
The Trigger Module caused a breakpoint exception. (priority 4, highest)
0b011
debugger_request
The debugger requested entry to Debug Mode using
haltreq
. (priority 1)0b100
single_step
The hart single stepped because
step
was set. (priority 0, lowest)0b101
reset_halt
The hart halted directly out of reset due to
resethaltreq
. It is also acceptable to report 3 when this happens. (priority 2)- Modify Privilege Enable (
mprven
): Enables/disables the modify privilege setting in debug mode.
The following table shows the bitfield encoding Value
Name
Description
0
disable_mprv
MPRV in
mstatus
is ignored in Debug Mode.1
enable_mprv
MPRV in
mstatus
takes effect in Debug Mode.- Non-Maskable Interrupt Pending (
nmip
): When set, there is a Non-Maskable-Interrupt (NMI) pending for the hart.
- Step (
step
): When set and not in Debug Mode, the hart will only execute a single instruction and then enter Debug Mode. If the instruction does not complete due to an exception, the hart will immediately enter Debug Mode before executing the trap handler, with appropriate exception registers set. The debugger must not change the value of this bit while the hart is running.
- Privilege level (
prv
): Contains the privilege level the hart was operating in when Debug Mode was entered. A debugger can change this value to change the hart’s privilege level when exiting Debug Mode.
The following table shows the bitfield encoding Value
Name
Description
0b00
User
0b01
Supervisor
0b11
Machine
Debug PC (dpc
)
- Address Offset:
0x7B1
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Upon entry to debug mode,
dpc
is updated with the virtual address of the next instruction to be executed.When resuming, the hart’s PC is updated to the virtual address stored in
dpc
. A debugger may writedpc
to change where the hart resumes.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
RW |
0b0 |
dpc
:The
dpc
behavior is described in more detail in the table below.Cause
Virtual Address in DPC
ebreak
Address of the
ebreak
instruction.single step
Address of the instruction that would be executed next if no debugging was going on. Ie. pc + 4 for 32-bit instructions that don’t change program flow, the destination PC on taken jumps/branches, etc.
trigger module
If
timing
is 0, the address of the instruction which caused the trigger to fire. Iftiming
is 1, the address of the next instruction to be executed at the time that debug mode was entered.halt request
Address of the next instruction to be executed at the time that debug mode was entered.
Debug Scratch Register (dscratch[2]
)
- Address Offset:
0x7B2 [+ i*0x1]
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Optional scratch register. A debugger must not write to this register unless
hartinfo
explicitly mentions it.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
RW |
0b0 |
ftran
- Address Offset:
0x800
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Floating Point Custom CSR
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:7] |
|
Reserved |
RO |
0b0 |
[6:0] |
|
RW |
0b0 |
ftran
:Floating Point Custom CSR
M-mode Cycle counter (mcycle
)
- Address Offset:
0xB00
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Counts the number of clock cycles executed by the processor core on which the hart is running.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
- Count (
count
): Counts the number of clock cycles executed by the processor core.
Machine Instruction Retired counter (minstret
)
- Address Offset:
0xB02
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Counts the number of instructions the hart has retired.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
- Count (
count
): Counts the number of instructions the hart has retired.
L1 Inst Cache Miss (ml1_icache_miss
)
- Address Offset:
0xB03
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
L1 Data Cache Miss (ml1_dcache_miss
)
- Address Offset:
0xB04
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
ITLB Miss (mitlb_miss
)
- Address Offset:
0xB05
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
DTLB Miss (mdtlb_miss
)
- Address Offset:
0xB06
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
Loads (mload
)
- Address Offset:
0xB07
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
Stores (mstore
)
- Address Offset:
0xB08
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
Taken Exceptions (mexception
)
- Address Offset:
0xB09
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
Exception Return (mexception_ret
)
- Address Offset:
0xB0A
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
Software Change of PC (mbranch_jump
)
- Address Offset:
0xB0B
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
Procedure Call (mcall
)
- Address Offset:
0xB0C
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
Procedure Return (mret
)
- Address Offset:
0xB0D
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
Branch mis-predicted (mmis_predict
)
- Address Offset:
0xB0E
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
Scoreboard Full (msb_full
)
- Address Offset:
0xB0F
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
Instruction Fetch Queue Empty (mif_empty
)
- Address Offset:
0xB10
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
Upper 32-bits of M-mode Cycle counter (mcycleh
)
- Address Offset:
0xB80
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Counts the number of clock cycles executed by the processor core on which the hart is running.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
- Count (
count
): Counts the number of clock cycles executed by the processor core.
Upper 32-bits of Machine Instruction Retired counter (minstreth
)
- Address Offset:
0xB82
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Counts the number of instructions the hart has retired.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
- Count (
count
): Counts the number of instructions the hart has retired.
Upper 32-bits of Machine Hardware Performance Monitoring Counter (mhpmcounterh[6]
)
- Address Offset:
0xB83 [+ i*0x1]
- Width (bits):
32
- Access Type:
RW
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RW |
0b0 |
Cycle counter (cycle
)
- Address Offset:
0xC00
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Cycle counter for RDCYCLE instruction.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Timer (time
)
- Address Offset:
0xC01
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Timer for RDTIME instruction.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Instruction Retired counter (instret
)
- Address Offset:
0xC02
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Instructions-retired counter for RDINSTRET instruction
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
L1 Inst Cache Miss (l1_icache_miss
)
- Address Offset:
0xC03
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
L1 Data Cache Miss (l1_dcache_miss
)
- Address Offset:
0xC04
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
ITLB Miss (itlb_miss
)
- Address Offset:
0xC05
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
DTLB Miss (dtlb_miss
)
- Address Offset:
0xC06
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Loads (load
)
- Address Offset:
0xC07
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Stores (store
)
- Address Offset:
0xC08
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Taken Exceptions (exception
)
- Address Offset:
0xC09
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Exception Return (exception_ret
)
- Address Offset:
0xC0A
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Software Change of PC (branch_jump
)
- Address Offset:
0xC0B
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Procedure Call (call
)
- Address Offset:
0xC0C
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Procedure Return (ret
)
- Address Offset:
0xC0D
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Branch mis-predicted (mis_predict
)
- Address Offset:
0xC0E
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Scoreboard Full (sb_full
)
- Address Offset:
0xC0F
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Instruction Fetch Queue Empty (if_empty
)
- Address Offset:
0xC10
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Hardware performance event counter.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Upper 32-bits of Cycle counter (cycleh
)
- Address Offset:
0xC80
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Cycle counter for RDCYCLE instruction.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Upper 32-bit of Timer (timeh
)
- Address Offset:
0xC81
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Timer for RDTIME instruction.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Upper 32-bits of Instruction Retired counter (instreth
)
- Address Offset:
0xC82
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Instructions-retired counter for RDINSTRET instruction
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Count |
RO |
0b0 |
Machine Vendor ID (mvendorid
)
- Address Offset:
0xF11
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
This register provids the JEDEC manufacturer ID of the provider of the core.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:7] |
|
Bank |
RO |
0b0 |
[6:0] |
|
Offset |
RO |
0b0 |
- Bank (
bank
): Contain encoding for number of one-byte continuation codes discarding the parity bit.
- Offset (
offset
): Contain encording for the final byte discarding the parity bit.
Machine Architecture ID (marchid
)
- Address Offset:
0xF12
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000003
- Description:
This register encodes the base microarchitecture of the hart.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Architecture ID |
RO |
0b11 |
- Architecture ID (
architecture_id
): Provide Encoding the base microarchitecture of the hart.
Machine Implementation ID (mimpid
)
- Address Offset:
0xF13
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
Provides a unique encoding of the version of the processor implementation.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Implementation |
RO |
0b0 |
- Implementation (
implementation
): Provides unique encoding of the version of the processor implementation.
Machine Hardware Thread ID (mhartid
)
- Address Offset:
0xF14
- Width (bits):
32
- Access Type:
RO
- Reset Value:
0x00000000
- Description:
This register contains the integer ID of the hardware thread running the code.
Bits |
Name |
Display Name |
Access Type |
Reset |
---|---|---|---|---|
[31:0] |
|
Hart ID |
RO |
0b0 |
- Hart ID (
hart_id
): Contains the integer ID of the hardware thread running the code.