Введение

AMD Am29000, обычно сокращаемый до 29k, — это семейство 32-битных микропроцессоров и микроконтроллеров с архитектурой RISC, разработанных и производимых компанией Advanced Micro Devices (AMD). Основанный на основополагающей архитектуре Berkeley RISC, 29k включал в себя ряд значительных усовершенствований. В течение некоторого времени эти чипы были самыми популярными RISC-чипами на рынке и широко использовались в лазерных принтерах различных производителей. Разработка началась в 1984–1985 годах, анонс состоялся в марте 1987 года, а выпуск — в мае 1988 года. За первоначальным Am29000 последовало несколько версий, последней из которых была Am29040 в 1995 году. Модель 29050 была примечательна тем, что одной из первых получила блок вычислений с плавающей точкой, способный выполнять одну операцию умножения-сложения за цикл. AMD разрабатывала суперскалярную версию до конца 1995 года, когда разработка 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, также рассматривала эту концепцию, но пришла к выводу, что оптимизированные компиляторы могут более эффективно использовать регистры общего назначения, чем фиксированные окна. В оригинальной архитектуре Berkeley, SPARC и i960 размер окон был фиксированным. Процедура, использующая всего одну локальную переменную, все равно занимала восемь регистров SPARC, расточительно используя этот дорогостоящий ресурс. Именно здесь 29000 отличался от этих более ранних разработок, используя окна переменного размера. В этом примере использовались бы только два регистра: один для локальной переменной, другой – для адреса возврата. Также было добавлено больше регистров, включая те же 128 регистров для стека процедур, но дополнительно 64 регистра для глобального доступа. Для сравнения, SPARC имел в общей сложности 128 регистров, а глобальный набор составлял стандартное окно из восьми. Это изменение привело к значительно более эффективному использованию регистров в 29000 при различных рабочих нагрузках. 29000 также расширил стек окон регистров стеком в памяти (и теоретически в кэше). Когда стек окон заполнялся, вызовы переносились из стека регистров в память и восстанавливались по мере необходимости при возврате из процедуры. В целом, использование регистров в 29000 было значительно более продвинутым, чем в конкурирующих разработках, основанных на концепциях Berkeley. Другое отличие от архитектуры Berkeley заключалось в том, что 29000 не имел специального регистра кодов состояния. Любой регистр мог использоваться для этой цели, что позволяло легко сохранять условия, но усложняло некоторый код. Кэш целей ветвлений (512 байт в 29000 и 1024 байта в 29050) хранил наборы из 4 или 2 последовательных инструкций, найденных по адресу цели ветвления, что уменьшало задержку выборки инструкций при выполнении ветвлений. 29000 не включал систему предсказания ветвлений, поэтому при выполнении ветвления возникала задержка. Это означает, что 29000 имеет один слот задержки ветвления. Буфер смягчал это, сохраняя четыре или две инструкции с целевого адреса ветвления, которые могли быть выполнены немедленно, пока буфер выборки заполнялся новыми инструкциями из памяти. Поддержка трансляции виртуальных адресов была аналогична архитектуре MIPS. Буфер трансляции (TLB) на 64 записи хранил соответствия между виртуальными и физическими адресами, и при обнаружении непереведенного адреса возникал "промах" TLB, который приводил к перехвату процессором программной подпрограммы, ответственной за предоставление соответствующего отображения в физическую память. В отличие от подхода MIPS, который использовал случайный регистр для выбора записи TLB для замены при промахе TLB, 29000 предоставлял специальный регистр LRU (least recently used – наименее недавно использовавшийся). Некоторые продукты семейства 29000 предоставляли только 16 записей TLB, чтобы выделить часть кремния для периферийных устройств. В качестве компенсации максимальный размер страницы, используемый для отображения, был увеличен с 8 КБ до 16 МБ.

Версии

Первый Am29000 был выпущен в 1988 году и включал встроенный MMU, однако поддержка операций с плавающей запятой была перенесена на FPU Am29027. Модели с неисправным MMU или кэшем целей ветвлений продавались как Am29005. В 1991 году линейка была расширена моделями Am29030 и Am29035, которые включали кэш инструкций объемом 8 КБ или 4 КБ соответственно. К тому времени Am29050 также стал доступен, без кэша на кристалле, но с блоком операций с плавающей запятой, поддерживающим полностью конвейерные операции умножения-накопления, увеличенный кэш целей ветвлений объемом 1 КБ с заявленной эффективностью попадания 80% и улучшенные конвейерные операции загрузки, ускоренные TLB из 4 элементов, работающим как кэш физических адресов. Хотя это не суперскалярный процессор, он позволяет завершать операцию с плавающей запятой и целочисленную операцию в один и тот же такт. Целочисленная и логика операций с плавающей запятой имеют собственные порты записи в регистры. Он содержал 428 000 транзисторов, изготовленных по 1-микронному техпроцессу с эффективной длиной канала 0,8 микрона. Am29040 площадью 119 мм² содержал 1,2 миллиона транзисторов, изготовленных по 0,7-микронному техпроцессу. Разрабатывалась суперскалярная версия 29K, но от нее отказались в пользу архитектуры x86. Она имела кодовое название Jaguar и представляла собой передовую разработку, способную к четырехсторонней выдаче инструкций в шесть резервных станций и спекулятивному внепорядочному выполнению инструкций с четырехсторонним завершением. Файл регистров позволял одновременно выполнять четыре чтения и две записи. Кэши для инструкций и данных имели объем 8 КБ каждый. Загрузки из кэша могли обходить операции записи. Отсутствие FPU на кристалле было обусловлено стоимостью и целевым рынком. Ожидалось, что процессор достигнет частоты 100 МГц при использовании 0,4-микронного техпроцесса. AMD использовала невыпущенную микроархитектуру 29K в качестве основы для серии процессоров K5, совместимых с x86. Арифметико-логические устройства были перенесены, как и буфер переупорядочивания с незначительной модификацией. Блок операций с плавающей запятой был взят из 29050, но расширен до 80-битной точности. K5 преобразовывал инструкции x86 в "RISC OPs" при декодировании, используя информацию предварительного декодирования, хранящуюся в кэше инструкций. AMD утверждала, что суперскалярный 29K будет иметь лишь незначительно более низкую производительность, чем K5, но значительно более низкую стоимость из-за разницы в размерах. Архитектура памяти 29000 была особенно привлекательна для разработчиков продуктов, позволяя им отказаться от внешней кэш-памяти и использовать динамическую оперативную память напрямую, сохраняя при этом приемлемую производительность.

29K использовался в качестве вычислительного ускорителя или сопроцессора, особенно на платформах Macintosh и IBM PC. Например, Yarc Systems Corporation выпустила карты "RISC сопроцессоры" на основе 29K для Macintosh II и PC AT, а также другие карты "CISC сопроцессоры" с процессорами Motorola 68020 и 68030 и карты "параллельных сопроцессоров" с процессорами T800 transputer. Его NuSuper (первоначально названный McCray) и AT Super, использующие процессор Am29000 и ускоритель операций с плавающей запятой Am29027, предлагали производительность в несколько раз выше, чем у самого Macintosh II, и по своим характеристикам конкурировали с рабочими станциями RISC, такими как DECstation 3100. В систему можно было установить несколько карт. Однако стоимость системы Macintosh II в сочетании с такой картой приближалась к стоимости устоявшихся рабочих станций RISC, работающих под управлением Unix. AT Super стоил около 4600 долларов и, как сообщалось, работал под управлением Unix, конкурируя с аналогичными продуктами, использующими процессор Intel i860. Одним из заметных продуктов, использующих 29K, была Macintosh Display Card 8·24 GC от Apple для Macintosh IIfx, оснащенная процессором Am29000 с частотой 30 МГц, 64 КБ статической оперативной памяти и 2 МБ видеопамяти с возможностью добавления еще 2 МБ динамической памяти для использования графическим инструментарием QuickDraw. Наличие 29K отличало эту конкретную версию карты от других версий, продаваемых Apple, значительно повышая производительность при обработке 24-битных изображений на пиксель.