vscause
Virtual Supervisor Cause
Reports the cause of the latest exception taken in VS-mode.
Attributes
Defining Extension |
H, version >= H@1.0.0 |
|---|---|
CSR Address |
0x242 |
Virtual CSR Address |
0x142 |
Length |
* 32 when CSR[hstatus].VSXL == 0 * 64 when CSR[hstatus].VSXL == 1 |
Privilege Mode |
VS |
Format
This CSR format changes dynamically.
Figure 1. vscause Format when CSR[hstatus].VSXL == 0
Figure 2. vscause Format when CSR[hstatus].VSXL == 1
Field Summary
| Name | Location | Type | Reset Value |
|---|---|---|---|
* 31 when CSR[hstatus].VSXL == 0 * 63 when CSR[hstatus].VSXL == 1 |
RW-RH |
UNDEFINED_LEGAL |
|
* 30:0 when CSR[hstatus].VSXL == 0 * 62:0 when CSR[hstatus].VSXL == 1 |
RW-RH |
UNDEFINED_LEGAL |
Software write
This CSR may store a value that is different from what software attempts to write.
When a software write occurs (e.g., through csrrw), the following determines the written value:
INT = # the write only holds if the INT/CODE combination is valid
# otherwise, the old value is retained
if (csr_value.INT == 1) {
if (valid_interrupt_code?(csr_value.CODE)) {
return 1;
}
return ILLEGAL_WLRL;
} else {
if (valid_exception_code?(csr_value.CODE)) {
return 1;
}
return ILLEGAL_WLRL;
}
CODE = # the write only holds if the INT/CODE combination is valid
# otherwise, the old value is retained
if (csr_value.INT == 1) {
if (valid_interrupt_code?(csr_value.CODE)) {
return csr_value.CODE;
}
return ILLEGAL_WLRL;
} else {
if (valid_exception_code?(csr_value.CODE)) {
return csr_value.CODE;
}
return ILLEGAL_WLRL;
}