Процесс записи микрокода для управляющей памяти центрального процессора компьютера называется микропрограммированием. Микрокод для управляющей памяти генерируется после того, как конфигурация компьютера и его микропрограммированный блок управления установлены. Управляющая память является частью блока управления, в котором хранятся все микропрограммы, которые нельзя часто изменять. Каждая строка микропрограммы представляет собой микроинструкцию, которая определяет одну или несколько микроопераций. Существует два различных способа организации микроинструкций: горизонтальный и вертикальный. Горизонтальные микроинструкции представляют собой несколько микроопераций, которые выполняются одновременно. Однако в крайних случаях каждая горизонтальная микроинструкция контролирует все аппаратные ресурсы системы. Напротив, вертикальная микроинструкция напоминает обычный формат машинного языка, содержащий одну операцию и несколько операндов. В отличие от горизонтальных микроинструкций, вертикальная микроинструкция представляет собой отдельные микрооперации.
При горизонтальном микропрограммировании каждый бит конкретно идентифицируется одной контрольной точкой, которая указывает, что должна быть выполнена соответствующая микрооперация. Поскольку каждая микроинструкция способна управлять несколькими ресурсами одновременно, она обладает потенциальным преимуществом более эффективного использования аппаратного обеспечения и, кроме того, требует меньшего количества микроинструкций на микропрограмму. Это позволяет более высокую степень параллелизма с минимальным количеством кодирования и отдельными полями управления. Однако разработка микропрограмм, которые используют ресурсы оптимально или эффективно, является сложной задачей. Горизонтальное микропрограммирование обеспечивает большую гибкость, поскольку каждый бит управления не зависит друг от друга. Он имеет большую длину, поэтому обычно содержит больше информации, чем вертикальные микроинструкции.
Вертикальное микропрограммирование использует переменный формат и более высокую степень кодирования, в отличие от горизонтального микропрограммирования. Это не только сокращает длину микроинструкции, но и предотвращает непосредственное влияние увеличения объема памяти на длину микроинструкции. Каждая вертикальная микроинструкция обычно представляет собой одну микрооперацию. Код используется для каждой микрооперации, которую необходимо выполнить, и декодер преобразует код в отдельные сигналы управления. Поскольку указывается только микрооперация, поля микроинструкции используются полностью. Плюс вертикальные микропрограммы легче писать, чем их горизонтальные аналоги. Вертикальная микроинструкция напоминает обычный формат машинного языка, состоящий из одной операции и нескольких операндов. Следовательно, его легко использовать для микропрограммирования. Как правило, он состоит из четырех-шести полей, требующих от 16 до 32 бит на инструкцию.
Вертикальное микропрограммирование использует переменный формат и более высокую степень кодирования, в отличие от горизонтального микропрограммирования. При вертикальном микропрограммировании биты управления кодируются каждым кодом, используемым для каждого действия, которое необходимо выполнить, и декодер команд декодирует код в несколько сигналов управления. Напротив, горизонтальное микропрограммирование включает в себя горизонтальные микроинструкции, которые вообще не используют кодирование. Они представляют каждый бит управления в канале данных, назначенный с отдельным битом в формате микроинструкции. Каждый бит в поле управления связан с линией управления.
Горизонтальное микропрограммирование, как правило, следует последовательному подходу для указания следующей микроинструкции в микропрограмме, аналогично обычному формату машинного языка. Каждый бит конкретно идентифицируется одной контрольной точкой, которая указывает, что должна быть выполнена соответствующая микрооперация. Затем для прерывания последовательности требуются специальные условные и безусловные переходные микроинструкции. Вертикальное микропрограммирование может использовать схему относительной адресации, в которой требуется несколько битов для указания относительного прямого или обратного скачка. Это требует вычисления адреса на каждом этапе.
- Вертикальные микропрограммы имеют лучшую плотность кода, что выгодно для размера контрольного хранилища. Вертикальная микроинструкция напоминает обычный формат машинного языка, состоящий из одной операции и нескольких операндов. Каждая вертикальная микроинструкция представляет одну микрооперацию, в то время как операнды могут указывать приемник данных и источник. Горизонтальные микропрограммы, с другой стороны, обычно представляют несколько микроопераций, которые выполняются одновременно. В крайних случаях каждая горизонтальная микроинструкция одновременно управляет несколькими аппаратными ресурсами..
- Горизонтальные микропрограммы обеспечивают повышенную гибкость, поскольку каждый бит управления не зависит друг от друга. Он имеет большую длину, поэтому обычно содержит больше информации, чем вертикальные микроинструкции. Горизонтальные микроинструкции с 48 или более битами довольно распространены. Горизонтальные микропрограммы обладают потенциальным преимуществом более эффективного использования аппаратных средств, и, кроме того, для них требуется меньшее количество микроинструкций на микропрограмму. Вертикальные микроинструкции, с другой стороны, являются более компактными, но менее гибкими, чем горизонтальные микроинструкции. Вертикальный подход, следовательно, прост в использовании для микропрограммирования.
В отличие от горизонтальных микроинструкций, вертикальная микроинструкция представляет собой отдельные микрооперации. Горизонтальные микропрограммы допускают более высокую степень параллелизма с минимальным количеством кодирования и отдельными полями управления, тогда как биты управления кодируются в вертикальных микропрограммах. Выбор между двумя подходами должен быть сделан тщательно. Однако на практике дизайнеры используют комбинацию горизонтальных и вертикальных форматов микроинструкций, чтобы полученная структура была компактной, но эффективной.