4927 subscribers

Микроконтроллеры для начитающих. Часть 4. Очень кратко о микропрограммах.

1,4k full reads
3,1k story viewUnique page visitors
1,4k read the story to the endThat's 47% of the total page views
3,5 minutes — average reading time

Это четвертая статья цикла. Предыдущую можно прочитать здесь. Статья будет относительно короткая, так как носит факультативный, то есть не обязательный для изучения, характер. Но она полезна для формирования более полной общей картины устройства процессоров.

Ранее рассмотренная модель абстрактного процессора была построена на жесткой логике. При некотором желании такой процессор можно собрать, да и собирали в свое время такие, даже на 155 серии ТТЛ микросхем. Такой процессор будет хорошо и довольно быстро работать если набор команд относительно прост и регулярен.

Но так бывает не всегда. Могут существовать машинные команды, которые требуют выполнения большого количества дополнительных шагов. Примером может служить обработка прерываний или переключение контекста задачи в процессорах 80х86. Другим примером могут служить команды умножения и деления (особенно, деления) которые раскладываются не несколько циклически выполняемых операций сдвигов и сложений или вычитаний.

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

Теперь программа выполняется, по сути, не реальным, а виртуальным процессором. Эта "другая программа", которая нам недоступна (в большинстве случаев) и написана не нами, а разработчиком процессора, и называется микропрограммой.

Процессор с микропрограммным управлением можно считать "виртуальным". Иллюстрация моя
Процессор с микропрограммным управлением можно считать "виртуальным". Иллюстрация моя
Процессор с микропрограммным управлением можно считать "виртуальным". Иллюстрация моя

Ничего не напоминает? А если заменить микропрограмму на HAL? HAL, или уровень аппаратных абстракций, скорее всего хорошо Вам знаком. Он скрывает реальное оборудование ЭВМ за абстракциями упрощая разработку программ, так как не требует учитывать все разнообразие реальных конфигураций.

Другим примером может послужить использование макросов или подпрограмм, а в современном мире объектного программирования и классов, для создания виртуального образа устройства или системы, с которым потом и будет работать прикладная программа.

HAL это прослойка абстракции, обычно предоставляемая операционной системой и драйверами. Макросы, подпрограммы, классы (объекты) это надстройка, укрупненное и упрощенное представление. А микропрограмма (микрокоманды) это детализированное средство управления на более низком, внутреннем уровне.

Вверх и крупнее это макро. Вниз и детальнее, глубже, это микро. Отсюда и такое название. Внутренняя структура процессора несколько изменится.

Структура процессора с микропрограммным управлением

Упрощенная структура абстрактного процессора с микропрограммным управлением. Иллюстрация моя
Упрощенная структура абстрактного процессора с микропрограммным управлением. Иллюстрация моя
Упрощенная структура абстрактного процессора с микропрограммным управлением. Иллюстрация моя

Основным изменением является появившийся блок микропрограммного управления. Немного более упорядоченной стала и структура собственно процессора. Я не стал показывать цепи синхронизации. Не стал и детально показывать связь блока микропрограммного управления с остальными узлами процессора. Иначе даже такая упрощенная схема станет слишком запутанной.

Блок микропрограммного управления включает в себя память микропрограмм (ПМК), регистр адреса микрокоманды (РАМК) и регистр микрокоманды (РМК). Это основные узлы нашего блока управления. Реальные блоки микропрограммного управления значительно сложнее, но нам достаточно такого упрощенного представления.

Микрокоманды

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

Пример формата микрокоманды. Иллюстрация моя
Пример формата микрокоманды. Иллюстрация моя
Пример формата микрокоманды. Иллюстрация моя

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

На рисунке показано 4 поля для формирования сигналов управления. Поля MUX_1 и MUX_2 определяют выбор пути поступления данных на входы операндов АЛУ, а поле MUX_R путь записи результата операции. Собственно требуемая операция задается полем "операция АЛУ" микрокоманды. Изменив содержимое этих полей мы можем полностью изменить работы процессора не изменяя его схему!

Поле AUX условно отражает управление другими, не указанными на нашей структурной схеме узлами процессора. А два оставшихся поля нужно рассмотреть немного подробнее.

Поле "условия" определяет, будет ли данная микрокоманда вообще выполнена. В общем случае, это поле соответствует флагам, битам регистра FLAGS. Но может содержать и дополнительные признаки. Если какой то бит в этом поле установлен, то микрокоманда будет выполнена только в том случае, если установлен и соответствующий бит в регистре FLAGS. Разумеется, может быть установлено несколько разрядов одновременно.

Поле "адрес следующей микрокоманды" используется в точном соответствии со своим названием. То есть, оно указывает, какая микрокоманда будет выполнена следующей.

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

Кроме того, поле адреса следующей команды может задавать не полный адрес, а его смещение относительно адреса выполняющейся в данный момент микрокоманды. А полный адрес будет получаться сложением поля адреса из микрокоманды и содержимого РАМК. Это дает нам возможность выполнять относительные переходы при выполнении микрокоманд.

Особенности микрокомандного управления

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

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

Это не совсем так. Частота, на которой работает ядро процессора, вовсе не обязательно должна быть равной частоте тактового генератора. Можно использовать умножение тактовой частоты, например, в 8 раз. А это позволит избежать падения производительности процессора. Дело в том, что микрокоманды более просты и структурированы, что позволяет им выполняться быстрее, чем машинным командам.

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

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

Работа микропрограммного управления

Сначала нужно отметить, что процессор может или полностью управляться микропрограммой, или микрокоманды используются только для выполнения команд.

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

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

В любом случае, адрес микрокоманды формируется в РАМК и поступает в ПМК. В результате микрокоманда из ПМК помещается в РМК и начинает выполняться. Для всех узлов процессора из содержимого полей микрокоманды формируются управляющие сигналы. Если заданы условия, то они учитываются при выполнении микрокоманды. При этом формируется и адрес следующей микрокоманды, который помещается в РАМК. После этого цикл повторяется.

Заключение

Построение процессора на основе микропрограммного управления имеет свои плюсы и минусы. Оно позволяет настраивать процессор на выполнение различных наборов команд. То есть, один и тот же базовый кристалл может использоваться для разных моделей процессоров и микроконтроллеров. Достаточно изменить содержимое памяти микрокоманд.

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

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

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

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

На сегодня все. В следующей статье начнем знакомство с понятием архитектуры ЭВМ, что имеет непосредственное отношение практике использования микроконтроллеров.