SPRUIU1C July 2020 – February 2024 DRA821U , DRA821U-Q1
When access requests arrive at the MSMC slave ports, the requests may target the same endpoint and hence need arbitration. These endpoint arbiters implement a multi-layer fairness arbitration scheme with starvation bounds to allow the user control to partition system bandwidth.
In each arbitration cycle, each arbiter prioritizes all active requests using the following prioritized layers until it selects a unique winner:
In addition to the three levels the arbiter tracks a starvation count for each requestor to each arbiter. Every time a request wins arbitration, all loser requests have their starvation count decremented. Every time a requestor wins arbitration for an active request, the starvation count resets to the initial state. If the starvation count reaches zero, that requestor priority level elevates to the highest priority level. Once the starved active request wins arbitration the priority level reverts back to the normal value. These starvation bounds can be programmed via the MSMC_SBNDCOH0 through MSMC_SBNDCOH12 registers.
Not all MSMC_SBNDCOHx registers are used on this device.
The three-layer arbitration scheme is not sufficient to ensure a bound on the minimum bandwidth experienced by lower priority requests relative to higher priority requests. Consequently, a starvation bound can be defined to limit that minimum bandwidth experienced by the lower priority requests relative to higher priority requests.
Since MSMC introduces multiple virtual channels feeding the same physical arbiter, the starvation mechanism is expanded to specify bounds for these channels.
Port | Channel | Resource Target | Register Name and Field |
---|---|---|---|
Cache coherent 0 | Real-time | External memory | MSMC_SBNDCOH0[55-48] SBNDE_RT |
On-chip resources | MSMC_SBNDCOH0[39-32] SBNDM_RT | ||
Non-real-time | External memory | MSMC_SBNDCOH0[23-16] SBNDE_NRT | |
On-chip resources | MSMC_SBNDCOH0[7-0] SBNDM_NRT | ||
Cache coherent 11 | Real-time | External memory | MSMC_SBNDCOH11[55-48] SBNDE_RT |
On-chip resources | MSMC_SBNDCOH11[39-32] SBNDM_RT | ||
Non-real-time | External memory | MSMC_SBNDCOH11[23-16] SBNDE_NRT | |
On-chip resources | MSMC_SBNDCOH11[7-0] SBNDM_NRT | ||
Cache coherent 12 | Real-time | External memory | MSMC_SBNDCOH12[55-48] SBNDE_RT |
On-chip resources | MSMC_SBNDCOH12[39-32] SBNDM_RT | ||
Non-real-time | External memory | MSMC_SBNDCOH12[23-16] SBNDE_NRT | |
On-chip resources | MSMC_SBNDCOH12[7-0] SBNDM_NRT | ||
Responses Snoops | Real-time | External memory | MSMC_SBNDRESP[55-48] SBNDE_RT |
On-chip resources | MSMC_SBNDRESP[39-32] SBNDM_RT | ||
Non-real-time | External memory | MSMC_SBNDRESP[23-16] SBNDE_NRT | |
On-chip resources | MSMC_SBNDRESP[7-0] SBNDM_NRT |
The starvation bounds specified through the registers in Table 8-9 apply to each trip an access requires through an arbitration point. The number of potential arbitrations should be considered when programming the starvation bounds. The following are few common examples of round-trip command arbitration for reads:
Depending on whether caching and coherence are enabled and the state of the system, the number of potential arbitrations for a given access may vary and starvation should be considered accordingly.