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 является развитием той же архитектуры Berkeley RISC , которая также привела к появлению Sun SPARC , Intel i960 , ARM и RISC-V .
Одним из элементов дизайна, используемых в некоторых проектах, производных от Berkeley 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. 64-элементный буфер трансляции (TLB) сохранял сопоставления с виртуальными адресами в физические, и при обнаружении нетранслированного адреса результирующий «промах» 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, без кэша на кристалле, но с плавающей точкой с полностью конвейерными операциями умножения-накопления , большим кэшем Branch Target Cache объемом 1 КБ с заявленной частотой попаданий 80% и улучшенными конвейерными операциями загрузки, ускоренными 4-записным TLB -подобным физическим адресным кэшем. Хотя это не суперскалярный процессор, он позволяет выполнять операцию с плавающей точкой и целочисленную операцию в одном и том же цикле. Целочисленная и плавающая стороны имеют собственный порт записи в регистры. [11] Он содержал 428 000 транзисторов [12] на 1-микронном процессе [13] с эффективной длиной канала 0,8 мкм [11] и был доступен на частотах 20, 25, 33 и 40 МГц. Позже Am29040 был выпущен на частотах 33, 40 и 50 МГц, будучи похожим на Am29030, за исключением наличия кэша данных объемом 4 КБ, блока умножения и нескольких других усовершенствований. [14] 119 мм 2 Am29040 содержал 1,2 миллиона транзисторов на 0,7-микронном процессе. [15] [16]
Суперскалярная версия 29K разрабатывалась, но была отменена в пользу x86. Она имела кодовое название Jaguar [ 3] и была описана в ноябре 1994 и августе 1995. [17] [ 18] Это была передовая конструкция, способная к четырехсторонней отправке на шесть станций резервирования и спекулятивному выполнению инструкций вне очереди с четырехсторонним выводом из эксплуатации. Регистровый файл допускал четыре чтения и две записи одновременно. Кэши для инструкций и данных имели размер по 8 КБ каждый. Загрузки из кэша могли обходить хранилища . У нее не было встроенного FPU из-за соображений стоимости и целевого рынка. Ожидалось, что она достигнет частоты 100 МГц на 0,4-микронном процессе. [17] [19]
AMD использовала невыпущенную микроархитектуру 29K в качестве основы серии процессоров K5 , совместимых с x86 . АЛУ были перенесены, как и буфер переупорядочивания с небольшими изменениями. 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-м. И потребовалось, я бы сказал, около трех лет и, может быть, четыре оборота, прежде чем это заработало.