AMD Am29000 , обычно сокращаемый до 29k , представляет собой семейство 32-битных RISC- микропроцессоров и микроконтроллеров , разработанных и изготовленных компанией Advanced Micro Devices (AMD). Основанный на оригинальном Berkeley RISC , 29k имеет ряд существенных улучшений. Какое - то время они были самыми популярными RISC-чипами на рынке и широко использовались в лазерных принтерах различных производителей.
Разработанный с 1984 по 1985 год, анонсированный в марте 1987 года и выпущенный в мае 1988 года, [1] [2] [3] за первым Am29000 последовало несколько версий, закончившихся Am29040 в 1995 году. [4] Модель 29050 отличалась Рано представить модуль с плавающей запятой , способный выполнять одну операцию умножения-сложения за цикл.
AMD разрабатывала суперскалярную версию до конца 1995 года, когда AMD прекратила разработку 29k, поскольку группа разработчиков была переведена для поддержки части бизнеса ПК ( x86 ). То, что осталось от бизнеса AMD по производству встраиваемых систем, было переориентировано на семейство встроенных процессоров 186, производных от 80186 . К тому времени большая часть ресурсов AMD была сосредоточена на высокопроизводительных процессорах x86 для настольных ПК, используя многие идеи и отдельные части конструкции 29k для производства AMD K5 .
29k развился из той же конструкции RISC Беркли , которая также привела к Sun SPARC , Intel i960 , ARM и RISC-V .
Одним из элементов дизайна, используемым в некоторых проектах, основанных на RISC Беркли, является концепция окон регистров , метод, используемый для значительного ускорения вызовов процедур . Идея состоит в том, чтобы использовать большой набор регистров в качестве стека, загружая локальные данные в набор регистров во время вызова и помечая их как «мертвые» при завершении процедуры. Значения, возвращаемые из подпрограмм, будут помещены на «глобальную страницу», в восемь верхних регистров SPARC (например). Конкурирующая ранняя разработка RISC Стэнфордского университета , Stanford MIPS , также рассматривала эту концепцию, но решила, что улучшенные компиляторы могут более эффективно использовать регистры общего назначения, чем жестко зашитое окно.
В оригинальном дизайне Беркли, SPARC и i960 размер окон был фиксированным. Подпрограмма, использующая только одну локальную переменную, по-прежнему будет использовать восемь регистров SPARC, тратя впустую этот дорогостоящий ресурс. Именно здесь 29000 отличался от более ранних моделей, используя переменный размер окна. В этом примере будут использоваться только два регистра: один для локальной переменной, другой для адреса возврата . Также было добавлено больше регистров, в том числе те же 128 регистров для стека процедур, но добавлены еще 64 для глобального доступа. Для сравнения, в SPARC всего было 128 регистров, а глобальный набор представлял собой стандартное окно из восьми. Это изменение привело к гораздо лучшему использованию регистров в 29000 при самых разных рабочих нагрузках.
29000 также расширил стек окон регистров за счет стека в памяти (и теоретически в кеше). Когда окно заполнялось, вызовы переносились из конца стека регистров в память и восстанавливались по мере необходимости при возвращении подпрограммы. В целом использование регистров в 29000 было значительно более продвинутым, чем в конкурирующих конструкциях, основанных на концепциях Беркли.
Еще одно отличие от конструкции Беркли заключается в том, что 29000 не включал в себя регистр кодов состояния специального назначения. Для этой цели можно использовать любой регистр, что позволяет легко сохранять условия за счет усложнения некоторого кода. Кэш целевой ветки (512 байт на 29000 и 1024 байт на 29050) хранил наборы из 4 или 2 последовательных инструкций, найденных по целевому адресу ветвления, что уменьшало задержку выборки инструкций во время выполненных ветвей - 29000 не включал никакой системы прогнозирования ветвей. поэтому была задержка, если ветка была взята. Это означает, что 29000 имеет один слот задержки ветвления . [5] Буфер смягчал эту ситуацию, сохраняя четыре или две инструкции из целевого адреса ветки, которые можно было выполнить мгновенно, пока буфер выборки повторно заполнялся новыми инструкциями из памяти. [6]
Поддержка трансляции виртуальных адресов использовала тот же подход, что и в архитектуре MIPS. Буфер просмотра трансляции (TLB) с 64 записями сохранял сопоставления виртуальных адресов с физическими, и при обнаружении нетранслированного адреса результирующий «промах» TLB приводил к тому, что процессор перехватывал программную процедуру, ответственную за обеспечение любого соответствующего сопоставления. в физическую память. В отличие от подхода MIPS, который использовал случайный регистр для выбора записи TLB, подлежащей замене в случае пропуска TLB, 29000 предоставил выделенный регистр lru (наименее недавно использовавшийся). [7] Некоторые продукты семейства 29000 имели только 16 записей TLB, чтобы можно было выделить часть микросхемы для периферийных устройств. Чтобы компенсировать это, максимальный размер страницы, используемый при сопоставлении, был увеличен с 8 КБ до 16 МБ. [8] : 305–306.
Первый Am29000 был выпущен в 1988 году и включал встроенный MMU , но поддержка плавающей запятой была перенесена на Am29027 FPU . Устройства с неисправным MMU или Branch Target Cache продавались как Am29005 . [6]
В 1991 году линейка была расширена за счет Am29030 и Am29035 , которые включали кэш инструкций объемом 8 КБ или 4 КБ соответственно. [9] К тому времени [10] также стал доступен Am29050 , без встроенного кэша, но с модулем вычислений с плавающей запятой с полностью конвейерными операциями умножения-накопления , большим целевым кэшем ветвей размером 1 КБ с заявленной частотой попаданий 80%, и улучшенные конвейерные операции загрузки, ускоренные за счет 4-записного TLB -подобного кэша физических адресов. Хотя это не суперскалярный процессор, он позволяет выполнять операции с плавающей запятой и целочисленные операции в одном и том же цикле. Каждая сторона целого числа и числа с плавающей запятой имеет собственный порт записи в регистры. [11] Он содержал 428 000 транзисторов [12] по 1-микронной технологии [13] с эффективной длиной канала 0,8 микрона [11] и был доступен на частотах 20, 25, 33 и 40 МГц. Позже Am29040 был выпущен на частотах 33, 40 и 50 МГц и был похож на Am29030, за исключением кэша данных объемом 4 КБ, блока умножения и некоторых других усовершенствований. [14] Am29040 площадью 119 мм² содержал 1,2 миллиона транзисторов, изготовленных по 0,7-микронной технологии. [15] [16]
Разрабатывалась суперскалярная версия 29K, но от нее отказались в пользу x86 . Он имел кодовое название Jaguar , [3] и был описан в ноябре 1994 и августе 1995 года. [17] [18] Это была усовершенствованная конструкция, способная к четырехсторонней отправке на шесть станций резервирования и спекулятивному внеочередному выполнению инструкций. , с четырехсторонним выходом на пенсию. Регистровый файл допускал четыре чтения и две записи одновременно. Кэши для инструкций и данных составляли по 8 КБ каждый. Загрузка из кэша может обходить магазины . У него не было встроенного FPU по причинам стоимости и целевого рынка. Ожидалось, что он достигнет частоты 100 МГц при использовании 0,4-микронного процесса. [17] [19]
AMD использовала неизданную микроархитектуру 29K в качестве основы x86 -совместимых процессоров серии K5 . ALU были перенесены, как и буфер повторного порядка с небольшими изменениями. FPU был взят из 29050, но расширен до точности 80 бит . K5 преобразовал инструкции x86 в «RISC-OP» после декодирования, чему способствовала информация о предварительном декодировании, хранящаяся в кэшированных инструкциях. AMD заявила, что суперскаляр 29K будет иметь лишь немного меньшую производительность, чем K5, но гораздо меньшую стоимость из-за разницы в размерах. [20] [17]
Honeywell 29KII — это процессор на базе AMD 29050, который широко использовался в авионике реального времени.
Позиционированный как продукт для «встроенных приложений средней и высокой производительности» с потенциалом использования на рабочих станциях Unix, [7] 29000 использовался в различных продуктах, таких как X-терминалы, карты контроллеров лазерных принтеров, карты графических ускорителей, оптические устройства. решения для распознавания символов и сетевые мосты. [21] Архитектура памяти 29000 особенно привлекала разработчиков продуктов, позволяя им отказаться от внешней кэш-памяти и напрямую использовать динамическое ОЗУ, сохраняя при этом приемлемую производительность, [21] : 1 обеспечивая определенную степень гибкости в выборе памяти. технологии, используемые для сохранения программных инструкций и данных. [22]
29k использовался в качестве вычислительного ускорителя или сопроцессора, особенно на платформах Macintosh и IBM PC-совместимых. Например, Yarc Systems Corporation произвела карты «сопроцессора RISC» на базе 29k для систем Macintosh II и PC AT , наряду с другими картами «сопроцессора CISC» с процессорами Motorola 68020 и 68030, а также картами «параллельного сопроцессора» с транспьютерными процессорами T800. [23] Его карты NuSuper (первоначально называвшиеся McCray [24] ) и AT-Super , использующие процессор Am29000 и ускоритель операций с плавающей запятой Am29027, [23] последовали за MacRageous , обновив процессор до Am29050. [25] Такие карты-ускорители обеспечивали производительность, в несколько раз превышающую производительность самого Macintosh II, и конкурировали с рабочими станциями RISC, такими как DECstation 3100. В систему также можно было установить несколько карт. Однако стоимость системы Macintosh II в сочетании с такой картой приближалась к стоимости существующих рабочих станций RISC под управлением Unix. [26] AT-Super стоил около 4600 долларов и, по сообщениям, работал под управлением Unix и конкурировал с аналогичными продуктами, использующими процессор Intel i860. [27]
Одним из примечательных продуктов, использующих 29k, была Apple Macintosh Display Card 8·24 GC для Macintosh IIfx , оснащенная процессором Am29000 с тактовой частотой 30 МГц, 64 КБ статической кэш-памяти и 2 МБ видеопамяти с возможностью установки дополнительных 2 МБ динамической памяти. ОЗУ для использования графическим набором инструментов QuickDraw. Включение 29k отличало эту конкретную версию карты от других версий, продаваемых Apple, значительно улучшая производительность при обработке изображений с разрешением 24 бита на пиксель. [28]
Ну началось это в 85 году.
И потребовалось, я бы сказал, около трех лет и, возможно, четырех оборотов, прежде чем он заработал.