Coprocessor Interface
ARM DDI 0301H
Copyright © 2004-2009 ARM Limited. All rights reserved.
11-22
ID012310
Non-Confidential, Unrestricted Access
11.7
Multiple coprocessors
There might be more than one coprocessor attached to the core, and so some means is required
for dealing with multiple coprocessors. It is important, for reasons of economy, to ensure that as
little of the coprocessor interface is duplicated. In particular, the coprocessors must share the
length, accept, and store data queues, that the core maintains.
If these queues are to be shared, only one coprocessor can use the queues at any time. This is
achieved by enabling only one coprocessor to be active at any time. This is not a serious
limitation because only one coprocessor is in use at any time.
Typically, a processor is driven through driver software, that drives only one coprocessor. Calls
to the driver software, and returns from it, ensure that there are several core instructions between
the use of one coprocessor and the use of a different coprocessor.
11.7.1
Interconnect considerations
If only one coprocessor is permitted to communicate with the core at any time, all coprocessors
can share the coprocessor interface signals from the core. Signals from the coprocessors to the
core can be ORed together, provided that every coprocessor holds its outputs to zero when it is
inactive.
11.7.2
Coprocessor selection
Coprocessors are enabled by a signal
ACPENABLE
from the core. There are 12 of these
signals, one for each coprocessor. Only one can be active at any time. In addition, instructions
to the coprocessor include the coprocessor number, enabling coprocessors to reject instructions
that do not match their own number. Core instructions are also rejected.
11.7.3
Coprocessor switching
When the core decodes a coprocessor instruction destined for a different coprocessor to that last
addressed, it stalls this instruction until the previous coprocessor instruction has been retired.
This ensures that all activity in the currently selected coprocessor has ceased.
The coprocessor selection is switched, disabling the last active coprocessor and activating the
new coprocessor. The coprocessor that received the new coprocessor instruction must have
ignored it, being disabled. Therefore, the instruction is resent by the core, and is now accepted
by the newly activated coprocessor.
A coprocessor is disabled by the core by setting
ACPENABLE
LOW for the selected
coprocessor. The coprocessor responds by ceasing all activity and setting all its output signals
LOW.
When the coprocessor is enabled, signaled by setting
ACPENABLE
HIGH, it must
immediately set the signals
CPALENGTHHOLD
and
CPAACCEPTHOLD
HIGH, and
CPASTDATAV
LOW, because the pipeline is empty at this point. The coprocessor can then
start normal operation.