Stratix® 10 Hard Processor System Technical Reference Manual

ID 683222
Date 8/15/2024
Public
Document Table of Contents

4.7.3. Specifying Address Ranges for Slave Devices

You can program each master to access different slave ranges and access privileges. You can also configure memory as shared or non-shared for different masters depending on how you program the Address Base (*am_adbase*) registers.
By programming the Address Base registers (*am_adbase*) and the Address Mask registers (*am_admask*), you can specify lower and upper-bound addresses for each slave a master is accessing. You must configure address ranges at a 64 byte cache line boundary because the lower six bits of these registers specify access permissions for the address range. Each master can have a different valid slave access range and different access privileges. An address on the AR or AW channel matches against a range if the address satisfies the equation:
AxAddress & AM_ADMASK[i] == AM_ADBASE[i]
where i represents a register bit.

You can program address ranges as disabled, read-only, or write-only. During address decode, the CCU compares ARPROT or AWPROT signals with the access privilege programmed for an address range. A failed access check results in a decode error response for the transaction.

  1. Program the following fields in a bridge's *am_adbase* register:
    Table 49.  *am_adbase* Register Field Settings
    *am_adbase* Register Bitfield Configuration Description
    BASE_ADDRESS The base address value must be a factor of the address mask value. The base address register bitfields must not have a 1 where a corresponding mask bit is 0.
    Note: To prevent access errors, ensure that the *am_adbase* base address lies within the slave's valid address range.
    DI Set this bit if you are configuring this address range to be disabled.
    R_Wn Set this bit to make this address range readable; clear this bit to make it writable.
    I Set this bit if this address range holds instructions.
    NS Set this bit to make the address range non-secure; clear this bit to make the address range secure.
    P Set this bit to indicate if this range is only available through a privileged access.
  2. Program the corresponding *am_admask* register.

    Bits [2:0] of *am_adbase* and *am_admask* act as a value and mask for checking against the AxPROT of an incoming command. The CCU allows a command access to a range if

    AxPROT & *am_admask*[2:0] == *am_adbase*[2:0] & *am_admask*[2:0]
    If the above check fails, then the CCU denies the command access to the range and returns a decode error response. For any access, you can selectively disable an address range or designate the access as read-only or write-only access using *am_adbase*[4:3] and *am_admask*[3]. The table below details the encodings.
    Table 50.  Address Range Access
    Note: An X in this table denotes a "don't care."
    *am_adbase*[4]-DI *am_admask*[3]-VALID *am_adbase*[3]-R_Wn Access
    1 X X Range disabled
    0 1 1 Read only
    0 1 0 Write only
    0 0 X Read/write