Intel 8087

редактировать
Intel 8087
Intel C8087.jpg Математический сопроцессор Intel 8087
Общая информация
Запущен1980
ПродаетсяIntel, IBM
РазработаноIntel
Обычным производителем (-ами)
Производительность
Макс. CPU тактовая частота от 4 МГц до 10 МГц
Архитектура и классификация
Мин. размер элемента 3 мкм
Набор команд x87 (сопроцессор расширение x86-16 )
Физические характеристики
Пакет (ы)
  • 40-контактный DIP
История
Предшественник8231/8232
Преемник80287

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

Целью 8087 было ускорение вычисления для арифметики с плавающей запятой, например сложение, вычитание, умножение, деление и квадратный корень. Он также вычислял трансцендентные функции, такие как экспоненциальные, логарифмические или тригонометрические вычисления, а также вычисления с плавающей запятой. он также может работать с большими двоичными и десятичными целыми числами. Повышение производительности составило примерно от 20% до более 500%, в зависимости от конкретного приложения. 8087 может выполнять около 50 000 FLOPS используя около 2,4 Вт. От установки 8087 выиграли только арифметические операции; компьютеры, используемые только с такими приложениями, как обработка текста, например, не выиграют от дополнительных затрат (около 150 долларов) и энергопотребления 8087.

Die Intel 8087

8087 был усовершенствованной ИС для своего времени, раздвигая границы производственных технологий того периода. Первоначальный доход был чрезвычайно низким.

Продажи 8087 значительно выросли, когда IBM включила сокет сопроцессора на материнскую плату IBM PC. Из-за нехватки чипов IBM фактически не предлагала 8087 в качестве опции для ПК до тех пор, пока она не появилась на рынке в течение шести месяцев. Разработка 8087 привела к появлению стандарта IEEE 754-1985 для арифметики с плавающей запятой. Позднее появились сопроцессоры x87 для процессоров 80186 (не используются в ПК-совместимых), 80286, 80386 и 80386SX. Начиная с 80486, более поздние процессоры Intel x86 не использовали отдельный сопроцессор с плавающей запятой; Функции с плавающей запятой были интегрированы с процессором.

Внутри микросхемы не хватало аппаратного умножителя и выполнялись вычисления с использованием алгоритма CORDIC.

Содержание
  • 1 Проектирование и разработка
    • 1.1 Регистры
    • 1.2 IEEE с плавающей точкой -point standard
    • 1.3 Infinity
    • 1.4 Интерфейс сопроцессора
    • 1.5 Модели и вторые источники
  • 2 Преемники
  • 3 Ссылки
  • 4 Библиография
  • 5 Внешние ссылки
Дизайн и разработка

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

Изначально 8087 был разработан Биллом Полманом, техническим менеджером Intel, который курировал разработку 8086 микросхема. Билл предпринял шаги, чтобы убедиться, что чип 8086 может поддерживать математический чип, который еще предстоит разработать.

В 1977 году Польман получил добро на разработку математической микросхемы 8087. Брюс Рэвенел был назначен архитектором, а Джон Палмер был нанят в качестве соавтора и математика для проекта. Они разработали революционный дизайн с 64 битами мантиссы и 16 битами экспоненты для действительного числа самого длинного формата, с ЦП с архитектурой стека и 8 80-битными регистрами стека с богатым вычислительным набором инструкций. Эта конструкция решила несколько нерешенных известных проблем в области числовых вычислений и числового программного обеспечения: были устранены проблемы с ошибками округления для 64-битных операндов и решены преобразования числового режима для всех 64-битных чисел. Палмер считал, что Уильям Кахан писал о числах с плавающей запятой, как существенное влияние на их дизайн.

Дизайн 8087 первоначально встретил прохладный прием в Санта-Кларе из-за его агрессивного дизайна. В конце концов, дизайн был передан Intel Israel, а Рафи Нейв был назначен руководить внедрением чипа. Палмер, Равенель и Нейв получили патенты на дизайн. Роберт Келер и Джон Бейлисс также получили патент на методику, при которой некоторые инструкции с определенным битовым шаблоном были выгружены в сопроцессор.

8087 имел 45 000 транзисторов и был изготовлен с обедняющей нагрузкой 3 мкм Схема HMOS. Он работал в тандеме с 8086 или 8088 и представил около 60 новых инструкций . Большинство мнемоник сборки 8087 начинаются с F, такие как FADD, FMUL, FCOM и т. Д., Что делает их легко отличимыми от инструкций 8086. Двоичное кодирование для всех инструкций 8087 начинается с битовой комбинации 11011, десятичное число 27, то же самое, что и символ ESC ASCII, хотя и в битах более высокого порядка байта; подобные префиксы команд также иногда упоминаются как «escape-коды ». Мнемоника инструкций, назначенная Intel для этих инструкций сопроцессора, - «ESC».

Когда ЦП 8086 или 8088 выполнял команду ESC, если второй байт (байт ModR / M) определял операнд памяти, ЦП выполнял цикл шины для чтения одного слова из области памяти, указанной в инструкция (с использованием любого режима адресации 8086), но она не будет сохранять операнд чтения в каком-либо регистре ЦП или выполнять с ним какие-либо операции; 8087 будет наблюдать за шиной и декодировать поток команд синхронно с 8086, распознавая инструкции сопроцессора, предназначенные для себя. Для инструкции 8087 с операндом в памяти, если инструкция требует чтения операнда, 8087 будет брать слово данных, считываемых основным ЦП из шины данных. Если бы считываемый операнд был длиннее одного слова, 8087 также скопировал бы адрес с адресной шины; затем, после завершения цикла чтения данных, управляемого ЦП, 8087 немедленно использует DMA для управления шиной и передачи дополнительных байтов самого операнда. Если инструкция 8087 с операндом памяти вызвала запись этого операнда, 8087 проигнорирует слово чтения на шине данных и просто скопирует адрес, затем запросит DMA и запишет весь операнд таким же образом, как он будет читать конец расширенного операнда. Таким образом, главный ЦП поддерживал общий контроль шины и синхронизации шины, в то время как 8087 обрабатывал все другие аспекты выполнения инструкций сопроцессора, за исключением коротких периодов DMA, когда 8087 брал на себя шину для чтения или записи операндов в / из собственных внутренних регистров. Как следствие этой конструкции, 8087 мог работать только с операндами, взятыми либо из памяти, либо из его собственных регистров, а любой обмен данными между 8087 и 8086 или 8088 происходил только через RAM.

Программа основного ЦП продолжала выполняться, пока 8087 выполнял инструкцию; с точки зрения основного процессора 8086 или 8088, инструкция сопроцессора занимала столько времени, сколько обработка кода операции и любого цикла операнда памяти (2 тактовых цикла без операнда, 8 тактовых циклов плюс время вычисления EA [от 5 до 12 тактов циклов] для операнда памяти [плюс еще 4 тактовых цикла на 8088], чтобы передать второй байт слова операнда), после чего ЦП начнет выполнение следующей инструкции программы. Таким образом, система с 8087 была способна выполнять настоящую параллельную обработку, выполняя одну операцию в целочисленном ALU основного ЦП, одновременно выполняя операцию с плавающей запятой в сопроцессоре 8087. Поскольку 8086 или 8088 исключительно управляли потоком команд и синхронизацией и не имели прямого доступа к внутреннему состоянию 8087, и поскольку 8087 мог выполнять только одну инструкцию за раз, программы для объединенной системы 8086/8087 или 8088/8087 должен был убедиться, что 8087 успевает выполнить последнюю отданную ему инструкцию, прежде чем он будет отдан другой. Для этой цели была предоставлена ​​инструкция WAIT (основного ЦП), и большинство ассемблеров неявно утверждали инструкцию WAIT перед каждым экземпляром большинства инструкций сопроцессора с плавающей запятой. (Нет необходимости использовать инструкцию WAIT перед операцией 8087, если программа использует другие средства, чтобы гарантировать, что между выдачей чувствительных к времени инструкций 8087 проходит достаточно времени, чтобы 8087 никогда не мог получить такую ​​инструкцию, прежде чем он завершит предыдущую Если используется WAIT, также необязательно, чтобы она предшествовала следующей инструкции 8087). Инструкция WAIT ждала, пока входной вывод -TEST 8086/8088 не будет подтвержден (низкий), и этот вывод был подключен к выводу BUSY 8087 во всех системах, которые имели 8087 (поэтому TEST был подтвержден, когда BUSY был отключен).

Поскольку очереди предварительной выборки команд 8086 и 8088 делают время, когда инструкция выполняется, не всегда таким же, как время ее выборки, сопроцессор, такой как 8087, не может определить, когда инструкция для себя является следующая инструкция должна выполняться исключительно путем наблюдения за шиной ЦП. У 8086 и 8088 есть два сигнала состояния очереди, подключенных к сопроцессору, чтобы позволить ему синхронизироваться с внутренним временем выполнения ЦП инструкций из его очереди предварительной выборки. 8087 поддерживает собственную идентичную очередь предварительной выборки, из которой он считывает коды операций сопроцессора, которые фактически выполняет. Поскольку очереди предварительной выборки 8086 и 8088 имеют разные размеры и разные алгоритмы управления, 8087 определяет, к какому типу ЦП он подключен, наблюдая за определенной линией шины ЦП при сбросе системы, и 8087 соответствующим образом корректирует свою внутреннюю очередь команд. Избыточное дублирование оборудования очереди предварительной выборки в ЦП и сопроцессоре неэффективно с точки зрения энергопотребления и общей площади кристалла, но оно позволило интерфейсу сопроцессора использовать очень мало выделенных выводов IC, что было важно. В то время, когда был представлен 8086, который определял интерфейс сопроцессора, пакеты IC с более чем 40 выводами были редкими, дорогими и сталкивались с такими проблемами, как чрезмерная емкость выводов, основной фактор ограничения скорости передачи сигналов.

Коды операций сопроцессора кодируются в 6 битах по 2 байта, начиная с управляющей последовательности:

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

Первые три "x" биты - это первые три бита кода операции с плавающей запятой. Затем два бита «m», затем три последних бита кода операции с плавающей запятой, за которыми следуют три бита «r». Биты «m» и «r» определяют информацию о режиме адресации.

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

Регистры

Упрощенная микроархитектура 8087

Семейство x87 не использует набор регистров с прямой адресацией, такой как главные регистры процессоров x86; вместо этого регистры x87 образуют восьмиуровневую структуру стека глубиной от st0 до st7, где st0 - вершина. Инструкции x87 работают, вставляя, вычисляя и выталкивая значения в этот стек. Однако двоичные операции, такие как FADD, FMUL, FCMP и т. Д., Могут либо неявно использовать самые верхние st0 и st1, либо могут использовать st0 вместе с явным операндом или регистром памяти; Таким образом, регистр st0 может использоваться как аккумулятор (т. е. как комбинированный адресат и левый операнд), а также может использоваться для обмена с любым из восьми регистров стека с помощью команды FXCH stX (коды D9C8 – D9CF ч). Это позволяет использовать стек x87 в качестве семи свободно адресуемых регистров плюс аккумулятор. Это особенно применимо на суперскалярных процессорах x86 (Pentium 1993 года и позже), где эти инструкции обмена оптимизированы до потери нулевой тактовой частоты.

Стандарт IEEE с плавающей запятой

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

Данные 8087 типы
9...1...7...3...0...1...2...5...0(позиция в битах)
±ПоказательДробь80-битное вещественное число повышенной точности
±ПоказательДробь64-битное вещественное число с двойной точностью
±ПоказательДробь32-разрядное вещественное число с одинарной точностью
±Целое число в двоично-десятичном формате18-значное десятичное целое число
±Целое число64-битное двоичное целое число
±Целое32-битное двоичное целое
±Целое16-битное двоичное целое

Бесконечность

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

Интерфейс сопроцессора

8087 отличался от последующих сопроцессоров Intel тем, что был напрямую подключен к шинам адреса и данных. 8087 искал инструкции, которые начинались с последовательности «11011», и действовал в соответствии с ними, немедленно запрашивая DMA у основного ЦП по мере необходимости для доступа к операндам памяти длиной более одного слова (16 бит), а затем немедленно передавая управление шиной обратно основному ЦП.. Сопроцессор не задерживал выполнение программы до тех пор, пока инструкция сопроцессора не была завершена, и программа должна была явно синхронизировать два процессора, как объяснено выше (в разделе «Проектирование и разработка »). Если инструкция сопроцессора не могла декодироваться до той, которую понимал сопроцессор, возникла потенциальная проблема сбоя. Более поздние сопроцессоры Intel не подключались к шинам таким же образом, но получали инструкции через порты ввода-вывода главного процессора. Это привело к сокращению времени выполнения, но потенциальной проблемы сбоя удалось избежать, так как главный процессор проигнорирует инструкцию, если сопроцессор откажется ее принять. 8087 смог определить, был ли он подключен к 8088 или 8086, отслеживая шину данных во время цикла сброса.

Теоретически 8087 мог работать одновременно, пока 8086/8 обрабатывает дополнительные инструкции. На практике существует вероятность сбоя программы, если сопроцессор выдает новую инструкцию до того, как последняя будет завершена. Ассемблер автоматически вставлял команду FWAIT после каждого кода операции сопроцессора, вынуждая 8086/8 останавливать выполнение до тех пор, пока 8087 не сигнализировал о завершении. Это ограничение было снято с более поздних разработок.

Модели и вторые источники

Распиновка математического сопроцессора Intel 8087

Сопроцессоры Intel 8087 были изготовлены в двух вариантах: один с керамическим паяным сбоку DIP (CerDIP) и один в герметичном DIP (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 -pin DIP корпус и работал от 5 вольт, потребляя около 2,4 Вт. В отличие от более поздних сопроцессоров Intel, 8087 должен был работать с той же тактовой частотой, что и основной процессор. Суффиксы в номере детали обозначают тактовую частоту:

Тактовая частота 8087
Номер моделиЧастота
Intel 80875 МГц
Intel 8087-110 МГц
Intel 8087-28 МГц
Intel 8087-34 МГц
Intel 8087-66 МГц

Часть была секунд- Источник AMD как AMD 8087 и Cyrix как Cyrix 8087. Клон K1810WM87 8087 был произведен в Советском Союзе.

Преемники

Так же, как процессоры 8088 и 8086 были заменены более поздними компонентами, был заменен и 8087. Другими сопроцессорами Intel были 80287, 80387 и 80187. Начиная с 80486, более поздние процессоры Intel не использовали отдельный сопроцессор с плавающей запятой; практически все они включали его на кристалл основного процессора, за значительным исключением 80486SX, который был модифицированным 80486DX с отключенным FPU. 80487 на самом деле был полноценной микросхемой 80486DX с дополнительным выводом. При установке отключил процессор 80486SX. Процессоры 80486DX, Pentium и более поздние версии включают в себя функции с плавающей запятой в ядре ЦП.

Ссылки
Библиография
  • Санчес, Хулио; Кантон, Мария П. (2007). Программные решения для инженеров и ученых. CRC Press. ISBN 1-4200-4302-1. CS1 maint: ref = harv (ссылка )
Внешние ссылки
Последняя правка сделана 2021-05-24 03:56:34
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте