vsireg
Virtual Supervisor Indirect Register Alias
The vsireg CSR is one of several alias registers used to indirectly access virtual supervisor-level CSRs in VS-mode or VU-mode.
The alias mechanism allows indirect CSR access, which helps in virtualization and future extensibility.
A virtual instruction exception is raised for attempts from VS-mode or VU-mode to directly access vsiselect or vsireg, or from VU-mode to access siselect or sireg.
The behavior of accesses to vsireg when vsiselect holds a value that is not implemented at the HS level is UNSPECIFIED.
Implementations are recommended to raise an illegal instruction exception for accesses to unimplemented targets via vsireg.
Attributes
Requirement |
|||
|---|---|---|---|
Defining extensions |
|
||
CSR Address |
0x251 |
||
Virtual CSR Address |
0x251 |
||
Length |
* 32 when CSR[hstatus].VSXL == 0 * 64 when CSR[hstatus].VSXL == 1 |
||
Privilege Mode |
VS |
Format
This CSR format changes dynamically.
Field Summary
| Name | Location | Type | Reset Value |
|---|---|---|---|
* 31:0 when CSR[hstatus].VSXL == 0 * 63:0 when CSR[hstatus].VSXL == 1 |
RW |
UNDEFINED_LEGAL |
Fields
VALUE
- Location
-
-
31:0 when CSR[hstatus].VSXL == 0
-
63:0 when CSR[hstatus].VSXL == 1
-
- Description
-
The data read from or written to the register selected by the current value of the vsiselect CSR.
- Type
-
RW
- Reset value
-
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:
VALUE = Csr handle = indirect_csr_lookup(CSR[vsiselect].VALUE, 1);
if (!handle.valid) {
unimplemented_csr($encoding);
}
if (!handle.writable) {
raise (ExceptionCode::IllegalInstruction, mode(), $encoding);
}
csr_sw_write(handle, csr_value.VALUE);
return csr_hw_read(handle);
Software read
This CSR may return a value that is different from what is stored in hardware.
Csr handle = indirect_csr_lookup(CSR[vsiselect].VALUE, 1);
if (!handle.valid) {
unimplemented_csr($encoding);
}
return csr_sw_read(handle);