hstateen0h
Upper 32 bits of Hypervisor State Enable 0 Register
For RV64 harts, the Smstateen/Ssstateen extension adds four new 64-bit CSRs at machine level: mstateen0 (Machine State Enable 0), mstateen1, mstateen2, and mstateen3. If supervisor mode is implemented, another four CSRs are defined at supervisor level: sstateen0, sstateen1, sstateen2, and sstateen3. And if the hypervisor extension is implemented, another set of CSRs is added: hstateen0, hstateen1, hstateen2, and hstateen3.
For RV32, the registers listed above are 32-bit, and for the machine-level and hypervisor CSRs there is a corresponding set of high-half CSRs for the upper 32 bits of each register: mstateen0h, mstateen1h, mstateen2h, mstateen3h, hstateen0h, hstateen1h, hstateen2h, and hstateen3h.
Attributes
Defining Extension |
|
---|---|
CSR Address |
0x61c |
Length |
32-bit |
Privilege Mode |
S |
Field Summary
Name | Location | Type | Reset Value |
---|---|---|---|
31 |
RW |
UNDEFINED_LEGAL |
|
30 |
RW |
UNDEFINED_LEGAL |
|
28 |
RW |
UNDEFINED_LEGAL |
|
27 |
RW |
UNDEFINED_LEGAL |
|
26 |
RW |
UNDEFINED_LEGAL |
|
25 |
RW |
UNDEFINED_LEGAL |
|
22 |
RW |
0 |
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:
SE0 = if (CSR[mstateen0].SE0 == 1'b0){ return 0; } CSR[hstateen0].SE0 = csr_value.SE0; return csr_value.SE0; ENVCFG = if (CSR[mstateen0].ENVCFG == 1'b0){ return 0; } CSR[hstateen0].ENVCFG = csr_value.ENVCFG; return csr_value.ENVCFG; CSRIND = if (CSR[mstateen0].CSRIND == 1'b0){ return 0; } CSR[hstateen0].CSRIND = csr_value.CSRIND; return csr_value.CSRIND; AIA = if (CSR[mstateen0].AIA == 1'b0){ return 0; } CSR[hstateen0].AIA = csr_value.AIA; return csr_value.AIA; IMSIC = if (CSR[mstateen0].IMSIC == 1'b0){ return 0; } CSR[hstateen0].IMSIC = csr_value.IMSIC; return csr_value.IMSIC; CONTEXT = if (CSR[mstateen0].CONTEXT == 1'b0){ return 0; } CSR[hstateen0].CONTEXT = csr_value.CONTEXT; return csr_value.CONTEXT; CTR = if (CSR[mstateen0].CTR == 1'b0){ return 0; } CSR[hstateen0].CTR = csr_value.CTR; return csr_value.CTR;
Software read
This CSR may return a value that is different from what is stored in hardware.
return $bits(hstateen0)[63:32];