Each Flash read interface contains
multiple levels of arbitration to determine in which order concurrent read requests
from multiple initiators are serviced.
- The first level of arbitration is a fixed priority arbiter between C29 CPU
buses. Data Read Bus 1 (DRB1) always gets a higher priority than Data Read Bus 2
(DRB2). This arbitration level enables zero-wait-state switching between the two
data buses belonging to the same CPU. The actual data read bus used for a
specific read request is automatically generated by the compiler.
- The second level of arbitration
is the L1 data read pipeline. This level arbitrates between data read requests
generated by multiple initiators in the system. The initiators are selected
using a round-robin pointer. The round-robin selection order for FRI-1, FRI-3,
and FRI-4 is as follows:
- CPU1
- CPU2 (if present)
- CPU3 (if present)
- CPU4 (if present)
- RTDMA
- HSM (if present)
- Data Pre-read
- Debugger
The round-robin selection order for FRI-2, if present, is as follows:
- CPU3
- CPU4 (if
present)
- CPU1
- CPU2 (if
present)
- RTDMA
- HSM (if present)
- Data Pre-read
- Debugger
Switching between initiators incurs a one-cycle pipeline delay,
to allow for the round-robin pointer change.
- For FRI-1 (and FRI-2, when
present), there is a third level of arbitration between fetch and data requests
(L2). This arbiter is also a round-robin arbiter like the second level,
selecting using the following order:
- Instruction fetch (CPU1
for FRI-1, CPU3 for FRI-2)
- L1 data read pipeline
output
Changes to the L2 round-robin pointer incur a one-cycle pipeline delay,
similar to the L1 arbiter.