Coprocessor Interface
ARM DDI 0301H
Copyright © 2004-2009 ARM Limited. All rights reserved.
11-15
ID012310
Non-Confidential, Unrestricted Access
11.5
Data transfer
Data transfers are managed by the LSU on the core side, and the pipeline itself on the
coprocessor side. Transfers can be a single value or a vector. In the latter case, the coprocessor
effectively converts a multiple transfer into a series of single transfers by iterating the instruction
in the issue stage. This creates an instance of the load/store instruction for each item to be
transferred.
The instruction stays in the coprocessor issue stage while it iterates, creating copies of itself that
move down the pipeline. Figure 11-9 on page 11-16 illustrates this process for a load
instruction.
The first of the iterated instructions, shown in uppercase, is the head and the others, shown in
lowercase, are the tails. In the example shown the vector length is four so there is one head and
three tails. At the first iteration of the instruction, the tail flag is set so that subsequent iterations
send tail instructions down the pipeline. In the example shown in Figure 11-9 on page 11-16,
instruction B has stalled in the Ex1 stage, that might be caused by the cancel queue being empty,
so that instruction C does not iterate during its first cycle in the issue stage, but only starts to
iterate after the stall has been removed.
Figure 11-8 shows the extra paths required for passing data to and from the coprocessor.
Figure 11-8 Coprocessor data transfer
Two data paths are required:
•
One passes store data from the coprocessor to the core, and this requires a queue, that is
maintained by the core.
•
The other passes load data from the core to the coprocessor and requires no queue, only
two pipeline registers.
Figure 11-9 on page 11-16 shows instruction iteration for loads.
I
Ex1
Ex2
Ex3
Ex4
Ex5
Ex6
Store data
Load data
To LSU Add stage
From LSU Wbls stage