Введение

Компонент центрального процессора компьютера.

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

Многоциклические блоки управления

Самые простые компьютеры используют микроархитектуру с многоцикловым режимом работы. Это были самые ранние разработки. Они до сих пор популярны в самых маленьких компьютерах, таких как встраиваемые системы, управляющие оборудованием. В компьютере блок управления часто последовательно выполняет цикл инструкций. Этот цикл состоит из выборки инструкции, выборки операндов, декодирования инструкции, выполнения инструкции и последующей записи результатов обратно в память. Когда следующая инструкция помещается в блок управления, она изменяет его поведение для корректного завершения текущей инструкции. Таким образом, биты инструкции напрямую управляют блоком управления, который, в свою очередь, управляет компьютером. Блок управления может включать в себя двоичный счетчик, указывающий логике блока управления, какой шаг необходимо выполнить. Блоки управления с многоцикловым режимом работы обычно используют как положительный, так и отрицательный фронты тактового сигнала прямоугольной формы. Они выполняют один шаг операции на каждом фронте тактового сигнала, так что операция, состоящая из четырех шагов, завершается за два тактовых цикла. Это удваивает скорость работы компьютера при использовании той же логической элементной базы. Многие компьютеры имеют два типа нештатных событий. Прерывание возникает, когда для корректной работы какому-либо типу ввода или вывода требуется внимание программного обеспечения. Исключение вызывается операцией компьютера. Важное отличие заключается в том, что время возникновения прерывания нельзя предсказать. Другое отличие состоит в том, что некоторые исключения (например, исключение "память недоступна") могут быть вызваны инструкцией, которую необходимо перезапустить. Блоки управления могут быть спроектированы для обработки прерываний одним из двух типичных способов. Если важен быстрый отклик, блок управления предназначен для прекращения текущей работы и обработки прерывания. В этом случае текущая работа будет возобновлена после завершения последней выполненной инструкции. Если компьютер должен быть очень дешевым, очень простым, очень надежным или выполнять больший объем работы, блок управления завершит текущую работу перед обработкой прерывания. Завершение текущей работы не требует дополнительных затрат, поскольку не требуется регистр для записи последней завершенной инструкции. Это просто и надежно, поскольку имеет минимальное количество состояний и приводит к наименьшим потерям выполненной работы. В очень простых компьютерах исключения могут обрабатываться как прерывания. Если требуется виртуальная память, исключение "память недоступна" должно повторить выполнение неудачной инструкции. Для компьютеров с многоцикловым режимом работы обычно требуется больше циклов. Иногда выполнение условного перехода занимает больше времени, поскольку счетчик программы необходимо перезагрузить. Иногда операции умножения или деления выполняются посредством процесса, аналогичного длинному двоичному умножению и делению. Очень маленькие компьютеры могут выполнять арифметические операции над одним или несколькими битами за раз. Некоторые другие компьютеры имеют очень сложные инструкции, требующие множества шагов.

Контрольные устройства с трубопроводом

Многие компьютеры средней сложности используют конвейерную обработку инструкций. Этот подход популярен благодаря своей экономичности и скорости. В конвейерном компьютере инструкции последовательно проходят через различные этапы обработки. Этот проект состоит из нескольких стадий. Например, может быть выделена отдельная стадия для каждого шага цикла фон Неймана. Конвейерный компьютер обычно имеет "регистры конвейера" после каждой стадии. Они хранят результаты, вычисленные на данной стадии, чтобы логические элементы следующей стадии могли использовать их для выполнения следующего шага. Часто четные стадии работают по одному фронту тактового сигнала, а нечетные – по другому. Это позволяет увеличить скорость работы компьютера в два раза по сравнению с однофронтными схемами. В конвейерном компьютере блок управления обеспечивает начало, продолжение и остановку потока инструкций в соответствии с командами программы. Данные инструкций обычно передаются из регистра в регистр между стадиями, при этом для каждой стадии предусмотрена отдельная логика управления. Блок управления также гарантирует, что выполнение инструкции на одной стадии не повлияет на работу инструкций на других стадиях. Например, если двум стадиям требуется использовать одни и те же данные, логика управления обеспечивает их использование в правильной последовательности. При эффективной работе в конвейере на каждой стадии находится одна инструкция. Таким образом, компьютер одновременно работает над всеми этими инструкциями. Он может завершить примерно одну инструкцию за каждый такт тактового генератора. Когда программа принимает решение и переходит к другой последовательности инструкций, конвейеру иногда приходится отбрасывать находящиеся в обработке данные и перезапускаться. Это называется "остановкой" (stall). Если две инструкции могут вызвать конфликт, блок управления иногда должен приостановить обработку последующей инструкции до завершения более ранней. Это называется "пузырем конвейера" (pipeline bubble), поскольку часть конвейера простаивает. Пузыри конвейера могут возникать, когда две инструкции обращаются к одному и тому же регистру. Прерывания и неожиданные исключения также приводят к остановке конвейера. Если конвейерный компьютер прерывает работу для обработки прерывания, теряется больше данных, чем в многотактном компьютере. Предсказуемые исключения не требуют остановки. Например, если инструкция исключения используется для входа в операционную систему, она не вызывает остановки. При одинаковой скорости работы электронных схем конвейерный компьютер может выполнять больше инструкций в секунду, чем многотактный компьютер. Кроме того, хотя электронные схемы имеют фиксированную максимальную скорость, конвейерный компьютер можно сделать быстрее или медленнее, изменяя количество стадий в конвейере. Чем больше стадий, тем меньше работы выполняет каждая стадия, и, следовательно, меньше задержек возникает из-за логических элементов. Конвейерная модель компьютера часто имеет меньше логических элементов на инструкцию в секунду, чем многотактные и внеочередные компьютеры. Это связано с тем, что средняя стадия менее сложна, чем в многотактном компьютере. Внеочередной компьютер обычно имеет большое количество неиспользуемой логики в любой момент времени. Схожие расчеты обычно показывают, что конвейерный компьютер потребляет меньше энергии на инструкцию. Однако конвейерный компьютер обычно сложнее и дороже, чем сопоставимый многотактный компьютер. Как правило, он имеет больше логических элементов, регистров и более сложный блок управления. Аналогичным образом, он может потреблять больше общей энергии, при этом потребляя меньше энергии на инструкцию. Внеочередные процессоры обычно могут выполнять больше инструкций в секунду, поскольку они могут выполнять несколько инструкций одновременно.

Предотвращение застоя

Контрольные устройства используют множество методов для поддержания заполненности конвейера и предотвращения остановок. Например, даже простые устройства управления могут предполагать, что обратный переход к инструкции с меньшим номером, расположенной ранее, является циклом и будет повторяться. Таким образом, устройство управления с такой конструкцией всегда будет заполнять конвейер по пути обратного перехода. Если компилятор может определить наиболее часто выполняемое направление ветвления, он может генерировать инструкции таким образом, чтобы наиболее часто выполняемое ветвление было предпочтительным направлением. Аналогичным образом, устройство управления может получать подсказки от компилятора: некоторые компьютеры имеют инструкции, которые могут кодировать подсказки компилятора о направлении ветвления. Некоторые устройства управления выполняют предсказание ветвлений: устройство управления ведет электронный список последних ветвлений, закодированный адресом инструкции ветвления, который определяет, когда инструкцию можно выдать. "Высота" массива – это количество исполнительных устройств, а "длина" и "ширина" – количество источников операндов. Когда все сигналы сходятся, сигналы от операндов и исполнительного устройства пересекаются. Логика в точке пересечения определяет, что инструкция может быть выполнена, поэтому инструкция "выдается" свободному исполнительному устройству. Альтернативный подход к выдаче инструкций реализует алгоритм Томасуло, который переупорядочивает аппаратную очередь инструкций. В определенном смысле, оба подхода используют очередь. Таблица состояний – это альтернативный способ кодирования и переупорядочивания очереди инструкций, и некоторые разработчики называют ее таблицей очереди. С добавлением дополнительной логики, таблица состояний может компактно объединить переупорядочение выполнения, переименование регистров, а также точную обработку исключений и прерываний. Более того, она может делать это без энергоемкой и сложной ассоциативной памяти, используемой алгоритмом Томасуло.

Переводные блоки управления

Некоторые компьютеры преобразуют каждую отдельную инструкцию в последовательность более простых инструкций. Преимущество заключается в том, что внеочередной процессор может быть проще по основной логике, при этом обрабатывая сложные многошаговые инструкции. Процессоры Intel x86, начиная с Pentium Pro, преобразуют сложные CISC-инструкции x86 в более похожие на RISC внутренние микрооперации. В них "фронтенд" блока управления осуществляет преобразование инструкций. Операнды не преобразуются. "Бэкенд" блока управления представляет собой внеочередной процессор, который выдает микрооперации и операнды в исполнительные устройства и пути передачи данных.

Контрольные устройства для маломощных компьютеров

Многие современные компьютеры оснащены средствами управления, минимизирующими энергопотребление. В компьютерах, работающих от батарей, таких как мобильные телефоны, это обеспечивает более длительное время работы. В компьютерах, подключенных к сети, это оправдано снижением затрат на электроэнергию, охлаждение или уровень шума. Большинство современных компьютеров используют КМОП-логику. КМОП расходует энергию двумя основными способами: путем изменения состояния, то есть "активной мощности", и за счет нежелательной утечки. Активную мощность компьютера можно снизить, отключая управляющие сигналы. Утечку тока можно уменьшить, снижая электрическое напряжение, создавая транзисторы с более широкими обедненными областями или полностью отключая логику. Снизить активную мощность проще, поскольку на хранящиеся в логике данные это не влияет. Обычно для этого снижают тактовую частоту процессора. Большинство компьютерных систем используют этот метод. Часто процессор переходит в режим простоя во время изменения тактовой частоты, чтобы избежать побочных эффектов. Большинство компьютеров также имеют инструкцию "остановки". Она была разработана для остановки кода, не обрабатывающего прерывания, чтобы код, обрабатывающий прерывания, имел надежную синхронизацию. Однако разработчики вскоре заметили, что инструкция "остановки" также является подходящим моментом для полного отключения тактовой частоты процессора, снижая его активную мощность до нуля. Контроллеру прерываний может по-прежнему требоваться тактовая частота, но обычно она потребляет гораздо меньше энергии, чем процессор. Эти методы относительно просты в реализации и стали настолько распространенными, что для получения коммерческой выгоды были разработаны другие. Многие современные маломощные КМОП-процессоры останавливают и запускают специализированные вычислительные блоки и шинные интерфейсы в зависимости от выполняемой инструкции. Некоторые компьютеры даже организуют микроархитектуру процессора с использованием мультиплексоров с передачей, чтобы каждая инструкция использовала только необходимые части логики. Распространенный метод заключается в распределении нагрузки между несколькими процессорами и отключении неиспользуемых процессоров по мере уменьшения нагрузки. Логика переключения задач операционной системы сохраняет данные процессоров в памяти. В некоторых случаях один из процессоров может быть проще и меньше, буквально с меньшим количеством логических элементов. Следовательно, он имеет низкую утечку и отключается последним и включается первым. Кроме того, он является единственным процессором, которому требуются специальные функции энергосбережения. Аналогичный метод используется в большинстве персональных компьютеров, которые обычно имеют вспомогательный встроенный процессор, управляющий системой питания. Однако в персональных компьютерах программное обеспечение обычно находится в BIOS, а не в операционной системе. Теоретически, компьютеры с более низкой тактовой частотой также могут снизить утечку, уменьшив напряжение питания. Это влияет на надежность компьютера различными способами, поэтому разработка обходится дорого и встречается нечасто, за исключением относительно дорогих компьютеров, таких как персональные компьютеры или мобильные телефоны. Некоторые конструкции могут использовать транзисторы с очень низкой утечкой, но это обычно увеличивает стоимость. Можно увеличить барьеры обеднения транзисторов, чтобы уменьшить утечку, но это увеличивает размер транзистора, что делает его медленнее и дороже. Некоторые производители используют эту технику в отдельных частях интегральной схемы, создавая логику с низкой утечкой из больших транзисторов, которые некоторые технологические процессы предоставляют для аналоговых схем. Некоторые технологические процессы размещают транзисторы над поверхностью кремния, в "FinFET", но эти процессы включают больше этапов и, следовательно, дороже. Специальные материалы легирования транзисторов (например, гафний) также могут уменьшить утечку, но это добавляет этапы к производству, что делает его более дорогим. Некоторые полупроводники имеют более широкую запрещенную зону, чем кремний. Однако в настоящее время (2020 год) эти материалы и процессы дороже кремния. Управление утечкой более сложно, поскольку перед отключением логики данные в ней необходимо переместить в хранилище с низкой утечкой. Некоторые процессоры используют специальный тип триггера (для хранения бита), который объединяет быстрое хранилище с высокой утечкой с медленным, большим (дорогим) хранилищем с низкой утечкой. Эти две ячейки имеют отдельные источники питания. Когда процессор переходит в режим энергосбережения (например, из-за остановки, ожидающей прерывания), данные передаются в ячейки с низкой утечкой, а остальные отключаются. Когда процессор выходит из режима низкой утечки (например, из-за прерывания), процесс обращается. В более старых конструкциях состояние процессора копировалось в память или даже на диск, иногда с использованием специализированного программного обеспечения. Очень простые встраиваемые системы иногда просто перезапускаются.

Интеграция с компьютером

Все современные процессоры имеют логику управления для подключения процессора к остальной части компьютера. В современных компьютерах это обычно контроллер шины. Когда инструкция читает или записывает в память, блок управления либо напрямую управляет шиной, либо управляет через контроллер шины. Многие современные компьютеры используют один и тот же интерфейс шины для памяти, ввода и вывода. Это называется "ввода-вывода с отображением в память". Для программиста регистры устройств ввода-вывода представляются как числовые значения по определенным адресам памяти. ПК на базе x86 используют более старый метод – отдельную шину ввода-вывода, к которой осуществляется доступ с помощью инструкций ввода-вывода. Современный процессор, как правило, также включает в себя контроллер прерываний. Он обрабатывает сигналы прерываний, поступающие с системной шины. Блок управления – это часть компьютера, которая реагирует на прерывания. Часто присутствует контроллер кэша для кэширования памяти. Контроллер кэша и связанная с ним кэш-память часто являются самой большой физической частью современного высокопроизводительного процессора. Когда память, шина или кэш совместно используются с другими процессорами, логика управления должна взаимодействовать с ними, чтобы гарантировать, что ни один процессор не будет использовать устаревшие данные. Многие старые компьютеры интегрировали определенные типы ввода-вывода непосредственно в блок управления. Например, многие старые компьютеры имели переднюю панель с переключателями и индикаторами, которые напрямую управлялись блоком управления. Это позволяло программисту напрямую вводить программу и отлаживать ее. В более поздних серийных компьютерах наиболее распространенным применением передней панели был ввод небольшой загрузочной программы для чтения операционной системы с диска. Это было неудобно. Поэтому передние панели были заменены загрузочными программами, хранящимися в постоянной памяти. Большинство моделей PDP 8 имели шину данных, предназначенную для того, чтобы устройства ввода-вывода могли использовать логику чтения и записи памяти блока управления. Это снижало сложность и стоимость высокоскоростных контроллеров ввода-вывода, например, для дисков. Xerox Alto имел многозадачный микропрограммируемый блок управления, который выполнял почти весь ввод-вывод. Эта конструкция обеспечивала большинство функций современного ПК, используя лишь небольшую часть электронной логики. Двухпоточный компьютер управлялся двумя микропотоками с наименьшим приоритетом. Они выполняли вычисления, когда ввод-вывод не требовался. Микропотоки с более высоким приоритетом обеспечивали (в порядке убывания приоритета) видео, сеть, дисковый накопитель, периодический таймер, мышь и клавиатуру. Микропрограмма выполняла сложную логику устройства ввода-вывода, а также логику интеграции устройства с компьютером. Для фактического аппаратного ввода-вывода микропрограмма читала и записывала сдвиговые регистры для большинства операций ввода-вывода, иногда с использованием резисторных сетей и транзисторов для изменения уровней выходного напряжения (например, для видео). Для обработки внешних событий микроконтроллер использовал микропрерывания для переключения потоков в конце цикла потока, например, в конце инструкции или после доступа к сдвиговому регистру. Микропрограмму можно было переписывать и переустанавливать, что было очень полезно для исследовательского компьютера.

Функции блока управления

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

Устройство управления

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

Контрольная микропрограмма

Идея микропрограммирования была предложена Морисом Уилксом в 1951 году как промежуточный уровень для исполнения инструкций компьютерных программ. Микропрограммы организованы в виде последовательности микроинструкций и хранятся в специальной памяти управления. Алгоритм для блока управления микропрограммами, в отличие от аппаратного блока управления, обычно задается описанием в виде блок-схемы. Главное преимущество блока управления с микропрограммированием – простота его структуры. Выходы контроллера формируются микроинструкциями. Микропрограмму можно отлаживать и заменять подобно программному обеспечению.

Комбинированные методы проектирования

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