pmpaddr0

PMP Address 0

PMP entry address

Attributes

CSR Address

0x3b0

Defining extension

  • Smpmp, version >= Smpmp@1.11.0

Length

64-bit

Privilege Mode

M

Format

pmpaddr0 format
Figure 1. pmpaddr0 format

Field Summary

Name Location Type Reset Value

ADDR

63:0

RW

UNDEFINED_LEGAL

Fields

ADDR

Location

pmpaddr0[63:0]

Description

Bits PHYS_ADDR_WIDTH-1:2 of the address specifier for PMP entry 0 (or, if pmp1cfg.A == TOR, for PMP entry 1).

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 ((%%LINK%csr_field;pmpcfg0.pmp0cfg;CSR[pmpcfg0].pmp0cfg%%[4] == 0)) {
  Bits<PHYS_ADDR_WIDTH - 2> mask = {10{1'b1}};
  return %%LINK%csr_field;pmpaddr0.ADDR;CSR[pmpaddr0].ADDR%% & ~mask;
} else {
  return %%LINK%csr_field;pmpaddr0.ADDR;CSR[pmpaddr0].ADDR%%;
}
if (MXLEN == 32) {
  if ((PMP_GRANULARITY >= 16) && (%%LINK%csr_field;pmpcfg0.pmp0cfg;CSR[pmpcfg0].pmp0cfg%%[4] == 1)) {
    return %%LINK%csr_field;pmpaddr0.ADDR;CSR[pmpaddr0].ADDR%% | {PMP_GRANULARITY - 3{1'b1}};
  } else if ((PMP_GRANULARITY >= 8) && (%%LINK%csr_field;pmpcfg0.pmp0cfg;CSR[pmpcfg0].pmp0cfg%%[4] == 0)) {
    Bits<PHYS_ADDR_WIDTH - 2> mask = {PMP_GRANULARITY - 2{1'b1}};
    return %%LINK%csr_field;pmpaddr0.ADDR;CSR[pmpaddr0].ADDR%% & ~mask;
  } else {
    return %%LINK%csr_field;pmpaddr0.ADDR;CSR[pmpaddr0].ADDR%%;
  }
} else {
  if ((PMP_GRANULARITY >= 16) && (%%LINK%csr_field;pmpcfg0.pmp0cfg;CSR[pmpcfg0].pmp0cfg%%[4] == 1)) {
    return %%LINK%csr_field;pmpaddr0.ADDR;CSR[pmpaddr0].ADDR%% | {PMP_GRANULARITY - 3{1'b1}};
  } else if ((PMP_GRANULARITY >= 8) && (%%LINK%csr_field;pmpcfg0.pmp0cfg;CSR[pmpcfg0].pmp0cfg%%[4] == 0)) {
    Bits<PHYS_ADDR_WIDTH - 2> mask = {PMP_GRANULARITY - 2{1'b1}};
    return %%LINK%csr_field;pmpaddr0.ADDR;CSR[pmpaddr0].ADDR%% & ~mask;
  } else {
    return %%LINK%csr_field;pmpaddr0.ADDR;CSR[pmpaddr0].ADDR%%;
  }
}