ФЭНДОМ


Шаблон:Карточка центрального процессора

Intel 8087 — первый математический сопроцессор для линейки процессоров 8086, реализующий архитектуру набора команд x87 и выпущенный в 1980 году компанией Intel[1][2].

Сопроцессор 8087 был предназначен для увеличения быстродействия при вычислениях с плавающей точкой за счёт ускорения таких операций как сложение, вычитание, деление и извлечение квадратного корня. Он также мог вычислять трансцендентные функции, например экспоненциальную функцию, логарифмы и тригонометрические функции. Прирост производительности от установки сопроцессора составлял от 20 % до 500 %, в зависимости от специфики задач. Intel 8087 имел производительность около 50000 Флопс[1] и потреблял примерно 2,4 Ватт[2]. Выгода от установки 8087 проявлялась только при выполнении математических операций. Компьютеры, использовавшиеся, например, для обработки текстов, не выигрывали от дополнительных расходов (примерно $150[3]) и увеличения потребляемой мощности.

С выпуском фирмой IBM компьютера IBM PC, имевшего сокет для установки сопроцессора, продажи 8087 значительно повысились. Появление сопроцессора привело к созданию стандарта IEEE 754-1985 для арифметики с плавающей точкой. Поздние процессоры Intel, начиная с 80486, имеют встроенный арифметический сопроцессор (за исключением 486SX — для них выпускался сопроцессор 487SX, который можно было не устанавливать).

История создания и устройство Править

Ранее компанией Intel выпускались микросхемы 8231 «Арифметического процессора» и 8232 «Процессора операций с плавающей точкой». Они были разработаны для использования с процессором 8080 или его аналогами и использовали 8-битную шину данных. Основной процессор взаимодействовал с ними через инструкции ввода-вывода, либо через контроллер DMA[4].

Первые шаги в разработке 8087 предпринял Билл Полман (Шаблон:Lang-en) — менеджер проекта, контролировавший разработку микропроцессора 8086 в Intel. Он обеспечил поддержку математического сопроцессора, который ещё только предстояло разработать, со стороны 8086.

В 1977 году Полман получил «зелёный свет» на разработку математического сопроцессора 8087. Архитектором был назначен Брюс Ревенел (Шаблон:Lang-en), в качестве помощника архитектора и математика проекта был нанят Джон Палмер (Шаблон:Lang-en). Вместе они разработали новаторскую архитектуру, предусматривавшую использование для промежуточных вычислений 80-битного вещественного числа с 64-битной мантиссой и 16-битной экспонентой, стековую организацию сопроцессора с восемью 80-битными регистрами и набор инструкций, обеспечивающий вычисление большого числа математических функций. 80-битный формат решал ряд известных трудностей организации вычислений и создания программного обеспечения для числовой обработки: было значительно снижено влияние ошибок округления при работе с 64-битными вещественными операндами, а также обеспечена точность вычислений для 18-значных двоично-десятичных и целых 64-битных чисел. Палмер отмечал, что большое влияние на проект оказали публикации Уильяма Кэхэна по вычислениям с плавающей точкойШаблон:Sfn.

Руководство Intel в Санта-Кларе прохладно отнеслось к проекту 8087 из-за его высоких требований. В конце концов, разработка была передана в израильское отделение компании, а руководителем, ответственным за изготовление микросхемы был назначен Рафи Неф (Шаблон:Lang-en). Палмеру, Ревенелу и Нефу был выдан патент на архитектуру сопроцессора[5]. Роберту Келеру (Шаблон:Lang-en) и Джону Бейлису (Шаблон:Lang-en) был выдан патент на способ передачи сопроцессору инструкций с определенной битовой комбинацией[6].

Сопроцессорор 8087 был выпущен в 1980 году и содержал 45000 транзисторов. Он был изготовлен по техпроцессу 3 мкм. Производство Intel 8087 осуществлялось в Малайзии[2].

Для сопроцессора было введено более 60 новых инструкций, название которых начиналось на «F», для того, чтобы отличать их от целочисленных инструкций Intel 8086. Например, аналоги команд ADD/MUL/CMP, в 8087 выглядели как FADD/FMUL/FCOM. Бинарные кодировки для всех новых инструкций начинались с комбинации битов 11011. Эта комбинация соответствует числу 27 в десятичной системе, совпадающему с кодом ASCII символа ESC, поэтому она иногда называлась Escape-кодом. Код инструкции занимает 6 бит в двух байтах, начинающихся с указанной комбинации:

 ┌───────────┬───────────┐
 │ 1101 1xxx │ mmxx xrrr │
 └───────────┴───────────┘

Значения битов:

x — код инструкции
m — режим адресации
r — регистр-операнд или набор регистров, участвующих в вычислении смещения[7]

Приложения должны были быть специально написаны для использования инструкций с плавающей точкой. Во время запуска программа должна была определить наличие сопроцессора и использовать его для этих инструкций; в противном случае, инструкции сопроцессора должны были эмулироваться программно[3].

Регистры Править

Файл:Intel 8087 arch.svg

Семейство сопроцессоров x87 вместо непосредственно адресуемых регистров как в архитектуре x86, использует восьмиуровневый стек регистров[8], при этом возможно обращаться к любому элементу стека по индексу от st0 до st7, где st0 — вершина стека. Положение вершины стека задается полем ST регистра состояния. Инструкции при выполнении извлекают операнды с вершины стека и проталкивают результаты в стек. Инструкции с двумя операндами типа FADD, FMUL, FCOM могут оперировать как с двумя верхними элементами стека, так и напрямую брать один из операндов из произвольной позиции стека.

Стандарт IEEE для чисел с плавающей точкой Править

При создании сопроцессора 8087 компания Intel рассчитывала стандартизировать формат чисел с плавающей точкой для последующих разработок. С исторической точки зрения важность 8087 состоит в том, что он стал основой для стандарта с плавающей точкой IEEE 754. Поскольку стандарт IEEE 754 находился в разработке до 1985 года, сопроцессор 8087 не полностью ему соответствовал, однако уже в сопроцессоре Intel 80387 было достигнуто полное соответствие стандарту. 8087 обеспечивал два основных типа данных с плавающей точкой (32-битный с одинарной точностью и 64-битный с двойной точностью), а также расширенный 80-битный формат для повышения точности больших и сложных расчётов. Помимо этого, 8087 предлагал 80-битный/18-значный двоично-десятичный формат, а также 16, 32 и 64-битные целочисленные типы[8].

Управление бесконечностью Править

8087 обрабатывает значения бесконечности через аффинное или проективное замыкание (режим выбирается через регистр состояния). В режиме аффинного замыкания положительная и отрицательная бесконечности рассматриваются как разные значения. В режиме проективного замыкания обе бесконечности считаются равнымиШаблон:Sfn. Эти два режима работы с бесконечностью были предложены в черновике стандарта IEEE 754. Однако из итоговой версии стандарта режим проективного замыкания был исключен. В сопроцессоре 80287 режим проективного замыкания был сохранён как опция, а сопроцессор 80387 и последующие (включая 80187) поддерживали только режим аффинного замыкания.

Подключение сопроцессора Править

Сопроцессор 8087 отличается от более поздних моделей сопроцессоров Intel тем, что он напрямую подключается к шинам адреса и данных. Процессоры 8086 и 8088 при нахождении инструкций, начинающихся с последовательности '11011' передают управление сопроцессору. Сопроцессор содержит такую же очередь инструкций как и процессор (настройка очереди на параметры процессора 8086 или 8088 производится путём анализа сигнала Шаблон:Overline после аппаратного сброса). Если инструкция требует обмена данными с памятью, процессоры 8088 или 8086 вычисляют их адрес и выполняют фиктивный цикл чтения, игнорируя сами данные. Фактическое чтение данных выполняет сопроцессор. Если требуется чтение более одного слова (байта), сопроцессор запрашивает управление шиной и выполняет чтение оставшейся части операнда, последовательно наращивая адрес[9].

После передачи сопроцессору инструкции основной процессор немедленно приступает к обработке следующей. Поэтому процессоры 8086 или 8088 могут работать параллельно с сопроцессором 8087. Однако, это может привести к двум нежелательным ситуациям:

  • если подряд идут несколько инструкций с плавающей точкой, сопроцессор может быть не готов к приёму очередной инструкции
  • если основной процессор должен обратиться к тем же данным, которые должна изменить инструкция сопроцессора, он может выполнить это обращение раньше, чем закончится инструкция сопроцессора[10]

Для синхронизации процессора и сопроцессора используется инструкция FWAIT, останавливающая работу основного процессора до появления сигнала от сопроцессора о том, что он завершил обработку. Транслятор с языка ассемблера автоматически вставляет эту инструкцию перед каждой инструкцией сопроцессора 8087[7]. В более поздних моделях сопроцессоров необходимость добавлять инструкцию FWAIT перед каждой инструкцией с плавающей точкой отпала, однако инструкция всё ещё нужна для синхронизации процессоров в случае их обращения к одним и тем же данным[11].

Существует риск отказа программы в случае невозможности декодирования инструкции сопроцессором. В более поздних моделях сопроцессоров Intel не использовалось такое подключение к шинам, а инструкции передавались сопроцессору основным процессором. Хотя это приводило к задержке выполнения инструкций, в то же время это позволяло избежать риска отказа программы, поскольку основной процессор проигнорирует инструкцию, которую не принял сопроцессор.

Варианты исполнения и аналоги Править

Файл:Intel 8087.svg

Сопроцессоры Intel 8087 выпускались в керамических корпусах типов CerDIP и PDIP, и были рассчитаны на работу в следующих диапазонах температур:

  • с префиксами C, D, QC и QD: от 0 °C до +70 °C (обычные применения)
  • с префиксами LC, LD, TC и TD: от −40 °C до +85 °C (промышленные применения)
  • с префиксами MC и MD: от −55 °C до +125 °C (военные применения)

Все варианты 8087 выпускались в 40-выводных DIP корпусах и работали при напряжении 5 Вольт, потребляя около 2,4 Ватт. В отличие от более поздних сопроцессоров Intel, 8087 должен был работать на той же тактовой частоте, что и основной процессор[3]. Суффиксы в обозначении микросхем определяли максимальную тактовую частоту:

Тактовые частоты 8087[2][8]
Обозначение микросхемы Частота
Intel 8087 5 МГц
Intel 8087-1 10 МГц
Intel 8087-2 8 МГц
Intel 8087-3 4 МГц
Intel 8087-6 6 МГц

Сопроцессор выпускался по лицензии фирмами AMD под обозначением AMD 8087[12] и Cyrix под обозначением Cyrix 8087[13]. В СССР выпускался аналог 8087 под обозначением К1810ВМ87[14].

Другие поколения сопроцессоров Править

Как и в случае с процессорами 8088 и 8086, сопроцессор 8087 был вытеснен новыми поколениями сопроцессоров Intel. К ним относятся 80287, 80387 и 80187. Начиная с 80486, процессоры Intel больше не требовали отдельного сопроцессора с плавающей точкой. Практически у всех у них сопроцессор был встроен в ядро процессора. Единственным исключением был процессор 80486SX, который представлял собой модификацию 80486DX с отключённым сопроцессором. Сопроцессор 80487 фактически был полноценным процессором i486DX, имевшим дополнительный контакт. При установке он отключал 80486SX.

Примечания Править

  1. 1,0 1,1 Шаблон:Cite web
  2. 2,0 2,1 2,2 2,3 Шаблон:Cite web
  3. 3,0 3,1 3,2 Шаблон:Книга
  4. Intel Component Data Catalog 1980, Intel catalog no. C-864/280/150K/CP, pages 8-21, 8-28
  5. Патент США № 4484259
  6. Патент США № 4270167
  7. 7,0 7,1 Шаблон:Книга
  8. 8,0 8,1 8,2 Шаблон:Cite web
  9. Шаблон:Книга
  10. Шаблон:Cite web
  11. Шаблон:Книга
  12. Ошибка цитирования Неверный тег <ref>; для сносок AMD_8087 не указан текст
  13. Ошибка цитирования Неверный тег <ref>; для сносок Cyrix_8087 не указан текст
  14. Шаблон:Книга

Литература Править

Ссылки Править

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на ФЭНДОМЕ

Случайная вики