pmpaddr3
PMP Address 3
PMP entry address
Fields
ADDR
- Location
-
pmpaddr3[63:0]
- Description
-
Bits PHYS_ADDR_WIDTH-1:2 of the address specifier for PMP entry 3 (or, if
pmp4cfg.A
== TOR, for PMP entry 4). - 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
- Software write
-
This field has special behavior when written by software (e.g., through csrrw).
When software tries to write
csr_value
, the field will be written with the return value of the function below.if (csr_value.ADDR >= (14)) { return UNDEFINED_LEGAL_DETERMINISTIC; } else { return UNDEFINED_LEGAL_DETERMINISTIC; }
Software read
This CSR may return a value that is different from what is stored in hardware.
-
Pruned
-
Original
if ((true) && (CSR[pmpcfg0].pmp3cfg[4] == 0)) {
Bits<PHYS_ADDR_WIDTH - 2> mask = {10{1'b1}};
return CSR[pmpaddr3].ADDR & ~mask;
} else {
return CSR[pmpaddr3].ADDR;
}
if (XLEN == 32) {
if ((PMP_GRANULARITY >= 16) && (CSR[pmpcfg0].pmp3cfg[4] == 1)) {
return CSR[pmpaddr3].ADDR | {PMP_GRANULARITY - 3{1'b1}};
} else if ((PMP_GRANULARITY >= 8) && (CSR[pmpcfg0].pmp3cfg[4] == 0)) {
Bits<PHYS_ADDR_WIDTH - 2> mask = {PMP_GRANULARITY - 2{1'b1}};
return CSR[pmpaddr3].ADDR & ~mask;
} else {
return CSR[pmpaddr3].ADDR;
}
} else {
if ((PMP_GRANULARITY >= 16) && (CSR[pmpcfg0].pmp3cfg[4] == 1)) {
return CSR[pmpaddr3].ADDR | {PMP_GRANULARITY - 3{1'b1}};
} else if ((PMP_GRANULARITY >= 8) && (CSR[pmpcfg0].pmp3cfg[4] == 0)) {
Bits<PHYS_ADDR_WIDTH - 2> mask = {PMP_GRANULARITY - 2{1'b1}};
return CSR[pmpaddr3].ADDR & ~mask;
} else {
return CSR[pmpaddr3].ADDR;
}
}