Suitable for: ACS, CS(?)
A coprocessor is a subsystem which may be added alongside a CPU to provide additional functionality. They execute instructions which the processor itself does not recognise. Early coprocessors provided facilities such as floating point arithmetic support, which were absent from the CPU due to limitations in the transistor budget.
Modern microprocessors usually include floating point support, but other functions are still outside the processor's remit. One example would be a memory management unit (MMU) which might be controlled by a set of processor instructions but may vary in implementation from system to system. Other coprocessors may be system specific; for example a general purpose CPU used in a graphics system may have a coprocessor to assist with drawing operations.
The coprocessor interfaces closely with the CPU. In a synchronous system it can be assumed that a coprocessor can monitor the instruction stream and read and interpret its own instructions in parallel with the CPU. However we are interested in asynchronous systems where this assumption may be invalid, and new ways of interfacing to coprocessors may be needed. Current research interest is concentrated on - though not restricted to - the - ARM microprocessor, which adds complications such as making all instructions (including coprocessor instructions) conditional on the flags in the CPU.
A number of classes of corpocessor operations are defined, into which real operations must be fitted. The challenge is to implement as many as possible within the limitations of an asynchronous design environment.