ARM: генезис
В 1985 г. английская компания Acorn Computer Group приступила к созданию RISC-процессора. Эта фирма занималась разработкой персональных компьютеров, которые пользовались популярностью в Англии. Машины были весьма интересные: уже тогда они имели графический интерфейс, многозадачный режим работы, весьма стройную архитектуру. Необходимость в собственном ЦП была связана с требованиями роста и развития, компании было необходимо конкурировать как с многочисленными ПК других изготовителей, так и с IBM PC (в Англии его победа была не столь быстрой и триумфальной, как в США).
До этого момента Acorn разрабатывала и делала все самостоятельно, от процессоров и системных плат до ОС и прикладного ПО. Но тут руководство приняло решение отойти от привычной практики, и Acorn направила в Intel запрос на лицензирование ядра ЦП i80286 — по тем временам новинки. Однако Intel не согласилась:
«Мы продаем процессоры, а не ядра». Acorn была вынуждена искать другие решения. В то время выбор огранивался кристаллами National 16032 и Motorola 68000, причем оба ЦП разработчики забраковали. Они плохо вписывались в архитектуру, были сложны, обеспечивали плохое время реакции на прерывания и т. п. Последнее стало основной причиной отказа от них, поскольку для Acorn скорость обработки прерываний была одним из критичных параметров, определявших «отзывчивость» системы. В итоге принимается решение самостоятельно разрабатывать новый ЦП.
Ресурсы скромной фирмы были несравнимы с возможностями лидеров полупроводниковой индустрии. И решение о реализации системы на базе архитектуры RISC, в то время набиравшей популярность, но еще относительно новой, в значительной степени было обусловлено именно недостатком ресурсов. RISC-процессор был технологически проще, позволял добиться значительной вычислительной мощности, хорошего времени реакции на прерывания, а значит, и времени отклика системы и т. д. Началась разработка (хотя даже сами разработчики считали свое занятие сумасшествием), в октябре 1983 г. был готов первый прототип и ряд микросхем сопровождения (видеоконтроллер, контроллер ввода-вывода, память и пр.). ЦП получил название ARM (от Acorn RISC Machine), имел тактовую частоту 8 МГц и более высокое быстродействие, чем тогдашний 80286. Правда, начальная версия в производство не пошла, в реальных системах использовался ARM 2.
В течение нескольких лет дела Acorn и ARM шли довольно вяло, под натиском х86 легендарные компьютеры «восьмибитной» эры один за другим сдавали позиции. Acorn держался долго, но... После продолжительного периода неудач и финансовых неурядиц Acorn RISC Machine была реорганизована в ARM Limited, которая оказалась более успешной, чем ее прародитель. ARM начала лицензировать технологические решения, в том числе ядро ЦП. И именно эта стратегия принесла ей успех. Сегодня ARM Ltd. — один из крупнейших «бесфабричных» разработчиков микропроцессорных архитектур. Лицензии на ядро ARM сейчас имеет практически любая более или менее крупная компания и даже некоторые конкуренты ARM (в том числе и Intel).
ARM: эволюция
В 1991 г. был создан ARM6 (вариантов ARM4 и ARM5 не было по маркетинговым соображениям). ARM 610 стал основой знаменитого Apple Newton MessagePad (до того Apple подумывала также о ЦП AT&T Hobbit). Этот ЦП обеспечивал достаточное быстродействие и был немного сложнее предшественников (35 тыс. транзисторов против 30 тыс. в ARM3), что позволяло удешевить производство на полупроводниковых заводах того времени.
В то же время появилась принятая и сегодня схема обозначений: ARM6 — собственно ядро, ARM60 — целостный ЦП, ARM610 — более развитые модификации ЦП с кэш-памятью, остальные цифры в номере означают наличие той или иной периферии, буквы — те или иные расширения системы команд.
Сегодня ARM предлагает широкую номенклатуру микропроцессорных ядер, архитектурных расширений, инструментальных средств и т. п. Если подходить к вопросу строго, то нужно заметить, что «процессора ARM» как такового не существует. ARM — это название архитектуры. Компания-разработчик продает ядро ЦП, оформленное либо в виде программы на языке Verilog (синтезируемые ядра), либо принципиальной схемы, либо в виде топологической макроячейки. Кроме ЦП предлагается целый ряд других решений, в частности библиотека макроячеек, реализующих стандартную периферию (PowerCell), а также разнообразные дополнительные технологии.
Модельный ряд ядер ARM развивался весьма интенсивно. В номенклатуре ядер ARM место младшего занимает семейство ARM7 Thumb, оно обеспечивает производительность около 130 MIPS, очень компактно (при проектных нормах 180 нм модификация ARM7TDMI занимает всего 0,59 мм2), удельное энергопотребление 0,25 мВт/МГц. Существуют также синтезируемые ядра ARM7TDMI-S и ARM7EJ-S, отличающиеся наличием в системе команд DSP-инструкций и средств акселерации работы виртуальной машины Java (Jazelle). ARM720T оснащается полнофункциональным модулем управления памятью (MMU, размер страницы 4-64 Кбайт), а ARM740T — упрощенным (MPU, без режима трансляции адресов). Оба ЦП имеют кэш-память (8 Кбайт).
В феврале 1996 г. DEC в сотрудничестве с ARM разработала первый ЦП серии StrongARM (SA-110) с пятиступенчатым конвейером, пятипортовым файлом регистров, блоком умножения и т. д., его энергопотребление примерно 1 Вт при тактовой частоте до 233 МГц.
ARM8 — в известной мере переходная модель, разработанная «по следам» совместного с DEC проекта StrongARM, довольно быстро сменившаяся ARM9 (с гарвардской шиной, буфером записи, гибкой схемой защиты памяти). Серия ARM9 Thumb создавалась для портативных устройств со значительными требованиями к быстродействию, производительность ядра достигает 220 MIPS, удельное потребление 0,3 мВт/МГц. В серии имеется несколько модификаций (в том числе ARM920T, ARM922T и ARM940T) с раздельными кэшами команд и данных (16/16, 8/8 и 4/4 Кбайт соответственно). Модификации ARM920T и ARM922T оснащаются MMU. В этой же серии существует семейство ядер ARM9E-S Thumb с DSP-расширениями системы команд и дополнительными средствами, повышающими быстродействие при обработке медиа-кода (в частности, умножитель-накопитель, в ЦП может быть предусмотрен математический сопроцессор VFP9-S, обеспечивающий выполнение операции с плавающей точкой над данными двойной точности). Емкость кэша от 1 Мбайт в ARM946E-S до 4-128 Кбайт в ARM926EJ-S.
Серия ARM10 Thumb ориентирована на 110-нм технологический процесс. Быстродействие ЦП этой серии достигает 700 MIPS при сохранении удельного потребления ARM9. В ядре используются 64-разрядные шины адреса и данных, имеются модули управления памятью команд и данных, в ядро может быть включен математический сопроцессор и т. д.
ARM 11 привнес рост производительности (до 1200 Dhrystone MIPS), еще более мощные средства кодирования и декодирования с акцентом на операции, свойственные MPEG-4, возможность роста тактовых частот за пределы 1 ГГц, улучшенные возможности организации многоядерных конфигураций и т. д.
Кроме процессорных ядер, существует несколько версий самой архитектуры ARM. Об этом следует помнить, поскольку нумерация ядер и архитектур не совпадает (например, в наиболее мощном на сегодня ядре ARM11 реализована система команд ARMv6).
Самая старая из существующих сейчас архитектур — ARMv4, она используется, например, в популярных ЦП StrongARM. ARN\v1 предполагает работу с 32-разрядными операндами в 32-разрядном адресном пространстве. ARMv4T — то же, но с добавлением набора инструкций Thumb (команды Thumb транслируются в их 32-разрядные аналоги). ARMv5 реализована в процессорах Intel XScale. Версия ARMv5TE стала первой, где реализованы DSP-расширения ARM, ARMv5TEJ — то же, но с добавлением команд акселерации Java (Jazelle). ARMv6 была серьезно доработана: появились средства работы с потоковыми данными (SIMD), Thumb-2 TrustZone. Архитектура ARMv7 ввела понятие «процессорных профилей»: «профиль А» определял требования к ЦП для полномасштабных ОС со сложной логикой работы с виртуальной памятью и прикладным ПО, «R» — для систем реального времени, «М» — для микроконтроллеров.
ARM inside
ARM — 32-разрядная, классическая load/store (в качестве операндов могут использоваться только загруженные в регистры процессора значения) RISC-архитектура. Она исключительно эффективна, обеспечивает высокое быстродействие и минимальные требования к питанию и при этом проста с точки зрения технологического процесса изготовления СБИС. В ранних моделях использовалась классическая архитектура фон Неймана (с общей памятью для данных и машинного кода), в современных моделях используется гарвардская архитектура (с раздельной памятью для кода и данных, как минимум на уровне кэша).
ЦП совместимы сверху-вниз, система команд довольно оригинальна, в частности все команды имеют одинаковую длину, выровнены по границе 32-разрядного слова, выполняются за один такт (за некоторыми исключениями). В классических ARM конвейер был короткий, всего три ступени, в современных вариантах доходит до восьми, а также реализуются средства суперконвейерной обработки. Кроме того, все команды условные для минимизации потерь при ветвлении (нередко для фрагментов кода выгоднее пропустить несколько команд, чем заниматься предсказанием ветвлений). Впрочем, в ряде модифицированных архитектур используются и блоки предсказания ветвлений (прежде всего это, конечно, Intel XScale). Имеются команды групповой пересылки, организации взаимодействия с сопроцессором и т. д. Менеджер памяти (MMU) в классической реализации также выполнен в виде отдельного модуля.
В ядре ARM имеется 16 видимых в пользовательском режиме 32-разрядных регистров (R0...R15, всего 31 регистр), счетчик команд (R15), регистр «связи» (R14), указатель стека программ (R13). Процессор может находиться в пяти режимах: привилегированном, пользовательском, прерывания, быстрого прерывания и исключения. При вызове обработчика быстрого прерывания стандартные регистры R8-R14 переименовываются (затеняются), при переходе из нользовательско-го режима в любой из системных переименовываются регистры R13 и R14. Предусматриваются механизмы быстрой обработки прерываний с оригинальной схемой «затенения» регистров (благодаря этому удается избежать такой «тяжелой» операции, как сохранение их содержимого в обработчике прерывания).