30.3. CONTROL UNIT



Control Unit - сердце микропроцессора.  CU дает указания что делать всем
другим узлам микропроцессора.

Как он это делает?
В микропроцессоре существует специальный регистр называемый 
PC (Program counter - программный счетчик) [иногда его называют
IP - Instruction pointer - указатель на инструкцию].
Это регистр указвает на место в памяти, где находится команда которую
процессор будет выполнять.

Процессор выбирает эту команду из памяти и помещает ее в Instruction Register.
И тут начинается самое интерестное:


CU / \ Аппаратный Микропрограммный








Аппаратный CU

(регистр PC и схема выборки не показана)





Аппаратный CU дешифрует команду в набор сигналов (Instruction Decoder), кроме того он содержит счетчик тактов (внутренних тактов - они имеют частоту большую, чем частота процессора) Clock Counter. Этот счетчик соединен с дешифратором и имеет схему сброса в 0 по запуску новой комманды. Линии от Instruction Decoderа и от дешифратора входят в большой блок комбинационной логики (не содержит триггеров) и на выходе получается набор управляющих сигналов для блоков процессора). [Кстати первое что делает эта логика - это выбирает команду из памяти и ее дешифрует]. Плюсы: высокое быстродействие Минусы: жесткая конструкция - трудно исправлять ошибки и модернизивовать.


Последовательность работы аппаратного CU



1. Сбрасывается счетчик тактов в 0. Через дешифратор выбираются линия в комбинационной логике. 2. Логика выбирает следующую инструкцию из памяти 3. Инструкция помещается в Instruction Register и декодируется.

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


Микропрограмный CU





Микропрограммный подход возник исторически: Команды делают предопределенную последовательность действий. Делать это аппаратно - сложно + большой размер схем (по тем временам) [Тогда еще не было таких технологий и возможностей]. М.Уилкс в 1951 году предложил решить эту проблему software методом: Микропрограммы (firmware). Команда выбранная и декодированная процессором дает начальный адресс для микропрограммы внутри процессора. CU содержит в себе новый регистры MPC (Microprogram Counter). MPC является указателем инструкции внутри Microcode ROM. Инструкции внутри microcode содержат адресс следующей микрокоманды в microcode ROM, а так же управляющие сигналы для процессора. (они могут порходить через комбинационную логику вместе с частью декодированной команды) [но сложность этой логики на порядки ниже чем в случае аппаратного CU]. Плюсы: легкость модификации Минусы: быстродействие Так формируются управляющие сигналы из микрокода:


Последовательность работы микропрограммного CU



1. MPC сбрасывается в 0. 2. Из Microcode ROM выбираеются микрокоманды начиная с адресса 0 (в адрессе 0 сидит микропрограмма для выборки и декодирования инструкции) 3. Выбирается команда из памяти по адрессу PC. Обновляется PC. 4. Выбранная инструкция помещается в Instruction Register.

5. Инструкция декодируется 6. Результат декодирования - адресс в microcode ROM. Этот адресс заносится в MPC.

7. Данные из Microcode ROM, регистра флагов и части декодированной команды формируют управляющие сигналы микропроцессора и аддресс следующей микрокоманды. 8. При завершении команды адресс следующей микрокоманды ставится в 0. (и весь цикл повторяется).


Команда другим узлам CPU состоит из последовательности различных комбинаций сигнала для данного узла. Пример кусочка псевдо-микрокода: ----------------------------------------------------- Register File | | | ----------------------+ ALU | BIU | BUS A | BUS B | BUS R | | | ----------------------------------------------------- 0123 | 0123 | 0123 | CMD CF EO | EN | ----------------------------------------------------- -1-- --1- ---- | ADD 0 0 | 0 Пример: ADD R3=R2+R1 ---- ---- ---1 | ADD 0 1 | 0 -----------------------------------------------------


Пример микрокоманд на примере учебного ARC CPU:






Нанокоманды: Многоуровневые микрокоманды - основные содержаться в Control Unite - они выдают стартовый адресс нанокоманды для соответствующего узла. Узел выполняет нанокомманды (причем с большей тактовой частотой чем CU).




Последовательность выполнения команды:

Посмотрим сейчас последовательность выполнения команды: ---------------------------------------------------------------------- 0. Если установлен сигнал RESET, то загрузить CU PC в предопределенное начальное значение (Init) 1. Проверить есть ли прерывания IRQ[0..J] которые можно CU обработать [Прерывания могут быть маскированы флагом прерываний IF]. Если да то запустить обработку прерывания (Interrupt) (т.e. сохранить состояние и загрузить в PC предопределенное значения). 2. Извлечения команды из памяти (Fetch) BIU 3. Обновление PC (Fetch) CU 3. Разшифровка команды (Decode) CU 4. Вычисления адресса операнда [опционально] ALU 5. Извлечение операнда REG,BIU 6. Обработка данных (Execute) ALU (Может модифицировать PC) 7. Вычисления адресса результата [опционально] ALU 8. Сохранение результата REG,BIU ----------------------------------------------------------------------




Prefetcher

Поскольку выборку команды преходится делать постоянно обычно ее выносят в отдельный функциональный блок называемый prefetcher.

Prefetcher выбирает команды заранее, он работает паралельно с основной частью CU. Prefetcher модифицирует PC (на самом деле PPC) после каждой выбранной команды и в состоянии отслеживать безусловные переходы и продолжать выбирать с нового адресса. В современных процессорах prefetcher дружит с BTB (Branch Target Buffer), который дает информацию о том произойдет ли условный переход или нет. В случае если поток команд нарушается непредсказанным условным переходом или возвратом prefetcher сбрасывается и начинает выбирать снова.

Index Prev Next