80387 Numeric Data co-processor:
The 80387 numeric data co-processor is an advanced version of 80287 and it is a high performance numeric data processor and it is specifically designed to operate with 80386 CPU. The instruction set of the 80387 co-processor is transparent to the programmers. The 80387 provides six to eleven times better performance as compared to 80287. The block diagram of 80387 architecture is shown in Fig. 7.54.
The 80387 has three functional units such as bus control logic unit, data interface and control unit and floating-point unit. These units operate in parallel to increase the performance. The operation of 80387 is just like 80287, but the data bus size is different. The data bus of 80387 co-processor is 32 lines D0-D31.
The two clock input signals of 80387 are used for asynchronous or synchronous operations with 80386 main processor. Usually these operations are selected using the CKM pin of 80387. When the CKM is high, the 80387 operates in synchronous mode. If the CKM is low, it operates in the asynchronous mode.
The bus control unit operates synchronously with 80386, and its operation is independent of the mode of operation of the floating point unit. With the help of READY input pin, the ADS input pin is used to provide delay the bus cycles with respect to CPUCLK2 pin. The status enable pin is used as a chip select for the 80387 numeric data co-processor. The other pins of 80387 work as the analogous pins of 80287.
The data interface and control unit can handle the data through FIFO or instruction decoder depending upon the bus control logic directive. The decoder decodes the instruction and generates the control signals to control the data flow within the 80387. This unit also generates the synchronization signals for 80386.
The floating-point unit is used for all the floating point operations in the 80287 coprocessor.
The 80387 co-processor has eight 80-bit floating point data registers, which are used to store signed 80-bit data. Each register has a corresponding 2-bit tag field. The 80387 has a 16-bit control, status and tag word registers. The 80387 has two more 48-bit registers known as instruction and data pointers. The tag word register and the status registers have exactly similar Formats as those of 80287 respectively. The 80387 can be operated as per required by the programmer, when a control word is loaded from memory to its control word register. The control word register has exactly similar format as that of 80287. The data types of 80387 are just like the data types of 80287.