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 CPU read 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
- DMA
- Data Pre-read
- DEBUGSS
Switching between initiators incurs a one-cycle pipeline delay, to allow for the round-robin pointer change.
- For FRI-1, 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, with selection using the following order:
- Instruction fetch (CPU1 for FRI-1)
- L1 data read pipeline output
Changes to the L2 round-robin pointer incur a one-cycle pipeline delay, similar to the L1 arbiter.