Равнозначны следующие аббревиатуры обозначения математического сопроцессора:
NDP (Numeral Data Processor),
MCP (Math Co-Processor),
FPU (Floating Point Unit),
APU (Accelerate Processor Unit).
Для однозначности - примем обозначение FPU.
FPU выполняет следующие функции:
- операции с плавающей точкой;
- вычисление тригонометрических функций;
- логарифмирование;
- работу с двоично-десятичными числами.
Эти операции выполняются FPU по собственной микропрограмме, значительно (до 150 раз) быстрее, чем CPU, хотя CPU может их выполнять и сам, при наличии программ-эмуляторов режима совместимой с FPU работы, но медленнее. Так что FPU необязателен, и целесообразен только при больших объемах вычислений с плавающей точкой и т.п. Впрочем, успехи технологии СБИС позволяют интегрировать FPU прямо в кристалл CPU, так что современные CPU, начиная с i486 и Pentium, имеют встроенный в CPU математический сопроцессор.
FPU поддерживает вещественные, целые и двоично-десятичные числа, представленные в формате с плавающей точкой:
(-1)S[1.f1 - f(23,52,63)]*2[E - (127,1023,16383)]
где
S = 0 - знак мантиссы "+",
S = 1 - знак мантиссы "-",
f - мантисса,
Е - экспонента,
(23, 52, 63) - размеры поля дробной части мантиссы действительных данных в коротком, длинном и временном формате операндов с FP, соответственно,
(127, 1023, 16383) - величины смещения, вычитаемые из характеристики (характеристика включает в себя знак порядка) для представления истинного порядка.
Имеются два поколения FPU:
- 8087, 80287 - имеют неполное соответствие существующему стандарту IEEE-75-4-1985;
- 80387, 80387DX ,80387SX ,80287A ,80287XL, 80C187, 80487SX - стандартизованы и их скоростные характеристики выше.
FPU i387 может работать с CPU синхронно или асинхронно, поэтому FPU подбирается для совместной работы с CPU на частотах, равных, или выше рабочей частоты CPU.
FPU i287 тоже может использоваться в РС 386, но имеет асинхронный интерфейс с CPU.
FPU i387, для выравнивания скорости интерфейса FPU и скорости работы локальной шины данных CPU, имеет буфер данных (DB), стек типа FIFO и, в отличие от i287, работает без тактов ожидания. Обобщенная структурная схема FPU приведена на рисунке 1.5. Фирма WEITEK Corp. производит сопроцессоры WTL3167, WTL4167 (для CPU 386 и 486 соответственно) - самые скоростные модели, однако несовместимые с FPU классической архитектуры, как по системе команд, так и по способу их загрузки. Для их работы требуются специальные программные средства поддержки, фирм Metaware или Microway.
Фирма Cyrix производит менее скоростные, но самые точные FPU 83D87 (для i386DX), 83S87 (для i386SX), 82S87 (для i286). Это FPU классической архитектуры, но их производительность на 25% выше, чем i387, так как все критичные по времени процессы реализованы жесткой логикой (аппаратные умножитель и АЛУ мантиссы, 90-разрядные регистры и т. д.). Энергопотребление их втрое ниже, чем i387.
При объединении CPU i386 c FPU i387, в адресное пространство CPU добавляются адреса портов ввода-вывода регистров данных FPU i387: 800000F8-800000FFh (адреса портов FPU F8-FFh).