О потенциале расширения системы команд

Comment are off

Мы неоднократно утверждали что наш микропроцессор имеет уникальные возможности расширения и что по этому показателю мы лидируем среди всех существующих архитектур. Давайте попробуем вместе разобраться — насколько великии возможности расширения и далеки ли от истины наши утверждения. Для начала определимся с возможными путями расширения системы команд — это префиксы, свободные биты в «аргументах» некоторых инструкций и свободные коды операций. В этой статье мы не будем рассматривать возможности расширения системы команд через префиксы и зарезервированные биты, а рассмотрим самый простой способ расширения — использование незанятых кодов операций. Итак, список «дырок», которые доступны для расширения системы команд версии 1.1

Первый свободный регион расположен в диапазоне с 0x10 по по 0x1f. Этот регион находится на стыке однобайтовых и двухбайтовых операций и при необходимости мы можем отдать его под однобайтовые или двухбайтовые инструкции без усложнения логики декодера. Мы имеем 16 свободных позиций для одно или двухбайтовых инструкций. Начало положено.

FreeRegion_0x10

Следующий свободный блок находится в диапазоне двухбайтовых инструкций. Здесь меньшее поле для маневра и мы имеем 8 зарезервированных двухбайтовых кодов операций.

FreeRegion_0x28

Несмотря на то, что зарезервированный блок 0x78 находится на границе двух и трехбайтовых инструкций, он является частью блока 0x70 и скорее всего будет использован для двухбайтовых инструкций.

FreeRegion_0x78

Следующий свободный блок кодов операций попадает на границу трех и четырехбайтовых инструкций и содержит 32 зарезервированных кода операции. Мы рассчитываем использовать этот блок для расширения режимов адресации стандартных инструкций и добавления новых логических операций и команд.

FreeRegion_0xA0

Последние 16 кодов операций зарезервированы для дальнейшего расширения. Инструкции из этого блока могут занимать от 5 байт и больше. Пока мы не определились с максимальной длиной инструкции — в случае простейших микроконтроллеров можно остановиться на 5 байтах, что позволяет за один такт выбирать инструкции из двухпортового кэша. Но мы можем представить и более длинные инструкции, длина которых может быть ограничена лишь физическими возможностями устройства и здравым смыслом.

FreeRegion_0xF0

Как видно из рисунков, даже на уровне незанятых кодов операций, наша система команд имеет беспрецендентые возможности для расширения. Добавьте к этому возможность использования префиксов (свободные опкоды в диапазоне от 0x00 до 0x0f мы пока не раскрываем, но они есть). Наконец, множество определённых операций имеют свободные биты во втором и третьем битах, что позволяет не только расширить режими адресации, но и частично поменять логику операций.

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

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


Оставить комментарий