Микроархитектурный уровень

advertisement
Микроархитектурный уровень
Над цифровым логическим уровнем находится микроархитектурный уровень. Его задача —
интерпретация команд уровня 2 (уровня архитектуры команд). Строение микроархитектурного
уровня зависит от того, каков уровень архитектуры команд, а также от стоимости и предназначения
компьютера. В настоящее время уровень архитектуры команд часто содержит простые команды,
которые выполняются за один цикл (таковы, в частности, системы RISC). В других системах
(например, в системах Pentium II) на этом уровне имеются более сложные команды; выполнение
одной такой команды занимает несколько циклов.
Пример микроархитектуры
В качестве примера рассмотрим микроархитектуру IJVM. Разработку данной микроархитектуры
удобно считать проблемой программирования, при этом каждая команда уровня архитектуры
команд — функция, вызываемая основной программой. В данном случае основная программа
довольно проста. Она представляет собой бесконечный цикл. Сначала программа определяет, какую
функцию нужно выполнить, затем вызывает эту функцию, а затем начинает все снова.
Микропрограмма содержит набор переменных, к которым имеют доступ все функции. Этот
набор переменных называется состоянием компьютера. Каждая функция изменяет по крайней мере
несколько переменных, формируя при этом состояние. Например, счетчик команд — это часть
состояния. Он указывает местонахождение функции, которую нужно выполнить следующей.
Команды IJVM очень короткие. Каждая команда состоит из нескольких полей, обычно одного
или двух, каждое из которых выполняет определенную функцию. Первое поле является кодом
операции. Этот код определяет тип команды и сообщает, что это, например, команда сложения или
команда ветвления, или еще какая-нибудь команда. Многие команды содержат дополнительное
поле, которое определяет тип операнда. Например, команды, которые имеют доступ к локальным
переменным, должны иметь специальное поле, чтобы определить, какая это переменная.
Такая модель выполнения команды, называемая иногда циклом выборка-исполнение,
полезна для теории, а также может служить основой воплощения уровня архитектуры команд со
сложными командами
Тракт данных
Тракт данных — это часть центрального процессора, состоящая из АЛУ (арифметикологического устройства) и его входов и выходов. Тракт данных микроархитектуры IJVM показан на
рис. 4.1. Он содержит ряд 32-разрядных регистров, которым приписаны символические названия
(например, PC, SP, MDR). Эти регистры доступны только на микроархитектурном уровне (для
микропрограммы). Им даны такие названия, поскольку они обычно содержат значения,
соответствующие переменным с аналогичными названиями на уровне архитектуры команд
Содержание большинства регистров передается на шину В. Выходной сигнал АЛУ запускает схему
сдвига, а затем шину С. Значение из шины С может записываться в один или несколько регистров
одновременно. Шину А мы введем позже, а пока представим, что ее нет
АЛУ, изображенное на рис. 4.1, содержит два входа для данных: левый вход (А) и правый вход
(В). С левым входом связан регистр временного хранения Н. С правым входом связана шина В, в
которую могут поступать значения из одного из девяти источников, что показано с помощью девяти
серых стрелок, примыкающих к шине.
Рис. 4.1 . Тракт данных микроархитектуры IJVM
В регистр Н может поступать функция АЛУ, которая проходит через правый вход (из шины В) к
выходу АЛУ.
Существует еще две линии управления, которые используются независимо от остальных. Они
служат для управления выходом АЛУ. Линия SLL8 (Shift Left Logical — логический сдвиг влево)
сдвигает число влево на 1 байт, заполняя 8 самых младших двоичных разрядов нулями; линия SRA1
(Shift Right Arithmetic — арифметический сдвиг вправо) число вправо на 1 бит, оставляя самый
старший двоичный разряд без изменений.
Синхронизация тракта данных
Как происходит синхронизация этих действий, показано на рис. 4.2. Здесь в начале каждого
цикла генерируется короткий импульс. Он может выдаваться задающим генератором, как показано
на рис. 3.20, в. На заднем фронте импульса устанавливаются биты, которые будут запускать все
вентили. Этот процесс занимает определенный отрезок времени Δw. Затем выбирается регистр, и его
значение передается на шину В. На это требуется время Δх. Затем АЛУ и схема сдвига начинают
оперировать поступившими к ним данными. После промежутка Δу выходные сигналы АЛУ и схемы
сдвига стабилизируются. В течение следующего отрезка Δz результаты проходят по шине С к
регистрам, куда они загружаются на нарастающем фронте следующего импульса. Загрузка должна
запускаться фронтом сигнала и осуществляться мгновенно, так что даже в случае изменений какихлибо входных регистров изменения в шине С будут происходить только после полной загрузки
регистров. На нарастающем фронте импульса регистр, запускающий шину В, приостанавливает свою
работу и ждет следующего цикла.
Рис. 4.2. Временная диаграмма цикла тракта данных
Цикл тракта данных можно разбить на подциклы. Начало подцикла 1 запускается задним
фронтом синхронизирующего сигнала. Ниже показано, что происходит во время каждого из
подциклов. В скобках приводится длина подцикла.
1. Устанавливаются сигналы управления (Δw).
2. Значения регистров загружаются на шину В (Δх).
3. Происходит работа АЛУ и схемы сдвига (Δу).
4. Результаты проходят по шине С обратно к регистрам (Δz).
На нарастающем фронте следующего цикла результаты сохраняются в регистрах.
Работа памяти
Наша машина может взаимодействовать с памятью двумя способами: через порт с пословной
адресацией (32-битный) и через порт с байтовой адресацией (8-битный). Порт с пословной
адресацией управляется двумя регистрами; MAR (Memory Address Register — регистр адреса ячейки
памяти) и MDR (Memory Data Register — информационный регистр памяти), которые показаны на
рис. 4.1. Порт с байтовой адресацией управляется регистром PC, который записывает 1 байт в 8
младших разрядов регистра MBR (Memory Buffer Register — буферный регистр памяти). Этот порт
может считывать данные из памяти, но не может их записывать в память.
Каждый из этих регистров, а также все остальные регистры, изображенные на рис. 4.1,
запускаются одним из сигналов управления. Белая стрелка под регистром указывает на сигнал
управления, который разрешает передавать выходной сигнал регистра на шину В. Регистр MAR не
связан с шиной В, поэтому у него нет сигнала разрешения. У регистра Н этого сигнала тоже нет, так
как он является единственным возможным левым входом АЛУ и поэтому всегда разрешен.
Черная стрелка под регистром указывает на сигнал управления, который записывает (то есть
загружает) регистр из шины С. Поскольку регистр MBR не может загружаться из шины С, у него нет
сигнала записи (но зато есть два сигнала разрешения, о которых речь пойдет ниже). Чтобы
инициировать процесс считывания из памяти или записи в память, нужно загрузить соответствующие
регистры памяти, а затем передать памяти сигнал чтения или записи (он не показан на рис. 4.1).
Регистр MAR содержит адреса слов, таким образом, значения 0,1,2 и т. д. указывают на
последовательные слова. Регистр PC содержит адреса байтов, таким образом, значения 0,1,2 и т. д.
указывают на последовательные байты. Если значение 2 поместить в регистр PC и начать процесс
чтения, то из памяти считается байт 2, который затем будет записан в 8 младших разрядов регистра
MBR. Если значение 2 поместить в регистр MAR и начать процесс чтения, то из памяти считаются
байты 8-11 (то есть слово 2), которые затем будут записаны в регистр MDR.
Для чего потребовалось два регистра с разной адресацией? Дело в том, что регистры MAR и PC
будут использоваться для обращения к двум разным частям памяти, а зачем это нужно, станет ясно
чуть позже. А пока достаточно сказать, что регистры MAR и MDR используются для чтения и записи
слов данных на уровне архитектуры команд, а регистры PC и MBR — для считывания программы
уровня архитектуры команд, которая состоит из потока байтов. Во всех остальных регистрах,
содержащих адреса, применяется принцип пословной адресации, как и в MAR.
В действительности существует только одна память: с байтовой адресацией. Как же регистр
MAR обращается к словам, если намять состоит из байтов? Когда значение регистра MAR помещается
на адресную шину, 32 бита этого значения не попадают точно на 32 адресные линии (с 0 по 31).
Вместо этого бит 0 соединяется с адресной линией 2, бит 1 — с адресной линией 3 и т. д. Два старших
бита не учитываются, поскольку они нужны только для адресов свыше 232 , а такие адреса
недопустимы в нашей машине на 4 Гбайт. Когда значение MAR равно 1, на шину помещается адрес 4;
когда значение MAR равно 2, на шину помещается адрес 8 и т. д. Распределение битов регистра MAR
по адресным линиям показано на рис. 4.3.
Рис. 4.3. Распределение битов регистра MAR в адресной шине
Другой способ превращения 8-битного регистра MBR в 32-битное слово — рассматривать его
как значение со знаком между -128 и +127 и использовать это значение для порождения 32-битного
слова с тем же самым численным значением. Это преобразование делается путем дублирования
знакового бита (самого левого бита) регистра MBR в верхние 24 битовые позиции шины В. Такой
процесс называется расширением по знаку или знаковым расширением Если выбран данный
параметр, то либо все старшие 24 бита примут значение 0, либо все они примут значение 1, в
зависимости от того, каков самый левый бит регистра MBR: 0 или 1.
Микрокоманды
Для управления трактом данных, изображенным на рис. 4.1, нам нужно 29 сигналов Их можно
разделить на пять функциональных групп
• 9 сигналов для записи данных из шины С в регистры.
• 9 сигналов для разрешения передачи регистров на шину В и в АЛУ.
• 8 сигналов для управления АЛУ и схемой сдвига.
• 2 сигнала, которые указывают, что нужно осуществить чтение или запись через регистры
MAR/MDR (на рисунке они не показаны)
• 1 сигнал, который указывает, что нужно осуществить вызов из памяти через регистры
PC/MBR (на рисунке также не показан).
Значения этих 29 сигналов управления определяют операции для одного цикла тракта данных.
Цикл состоит из передачи значений регистров на шину В, прохождения этих сигналов через АЛУ и
схему сдвига, передачи полученных результатов на шину С и записи их в нужный регистр (регистры).
Кроме того, если установлен сигнал считывания данных, то в конце цикла после загрузки регистра
MAR начинается работа памяти. Данные из памяти помещаются в MBR или MDR в конце следующего
цикла, а использоваться эти данные могут в цикле, который идет после него. Другими словами, если
считывание из памяти через любой из портов начинается в конце цикла к, то полученные данные
еще не могут использоваться в цикле к+1 (ТОЛЬКО В цикле к+2 и позже).
Этот процесс объясняется на рис. 4.2. Сигналы управления памятью выдаются только после
загрузки регистров MAR и PC, которая происходит на нарастающем фронте синхронизирующего
сигнала незадолго до конца цикла 1. Мы предположим, что память помещает результаты на шину
памяти в течение одного цикла, поэтому регистры MBR и (или) MDR могут загружаться на следующем
нарастающем фронте вместе с другими регистрами.
Другими словами, мы загружаем регистр MAR в конце цикла тракта данных и запускаем память
сразу после этого. Следовательно, мы не можем ожидать, что результаты считывания будут в
регистре MDR в начале следующего цикла, особенно если длительность импульса небольшая. Этого
времени будет недостаточно. Поэтому между началом считывания из памяти и использованием
этого результата должен помещаться один цикл. Однако во время этого цикла может выполняться не
только передача слова из памяти, но и другие операции. Предположение о том, что работа памяти
занимает один цикл, эквивалентно предположению, что количество успешных обращений в кэшпамять составляет 100%. Подобное предположение никогда не может быть истинным.
Так как регистры MBR и MDR загружаются на нарастающем фронте синхронизирующего
сигнала вместе с другими регистрами, они могут считывать во время циклов, в течение которых
осуществляется передача нового слова из памяти. Они возвращают старые значения, поскольку
прошло еще недостаточно времени для того, чтобы поменять их на новые. Здесь нет никакой
двусмысленности: до тех пор пока новые значения не загрузятся в регистры MBR и MDR на
нарастающем фронте сигнала, предыдущие значения находятся там и могут использоваться.
Выходной сигнал шины С можно записывать сразу в несколько регистров, однако
нежелательно передавать значения более одного регистра на шину В. Немного расширив
схемотехнику, мы можем сократить количество битов, необходимых для выбора одного из
возможных источников для запуска шины В. Существует только 9 входных регистров, которые могут
запустить шину В (регистры MBR со знаком и без знака учитываются отдельно) Следовательно, мы
можем закодировать информацию для шины В в 4 бита и использовать декодер для порождения 16
сигналов управления, 7 из которых не нужны.
Рис. 4.4. Формат микрокоманды для Mic-1
Теперь мы можем управлять трактом данных с помощью 9+4+8+2+1=24 сигналов,
следовательно, нам требуется 24 бита. Однако эти 24 бита управляют трактом данных только в
течение одного цикла. Задача управления — определить, что нужно делать в следующем цикле.
Чтобы включить это в разработку контроллера, мы создадим формат для описания операций,
которые нужно выполнить, используя 24 бита управления и два дополнительных поля поле
NEXT_ADDRESS (следующий адрес) и поле JAM (определяет, как выбирается следующая
микрокоманда.).
Управление микрокомандами: Mic-1
До сих пор мы рассказывали о том, как происходит управление трактом данных, но мы еще не
касались того, каким образом решается, какой именно сигнал управления и на каком цикле должен
запускаться. Для этого существует контроллер последовательности, который отвечает за
последовательность операций, необходимых для выполнения одной команды.
Контроллер последовательности в каждом цикле должен выдавать следующую информацию:
1. Состояние каждого сигнала управления в системе.
2. Адрес микрокоманды, которая будет выполняться следующей.
Рисунок 4.5 представляет собой подробную диаграмму полной микроархитектуры
рассматриваемой машины, которую мы назовем Mic-1.
Диаграмма состоит из двух частей: тракта данных (слева), который мы уже подробно обсудили,
и блока управления (справа), который мы рассмотрим сейчас. Самой большой и самой важной
частью блока управления является управляющая память. Удобно рассматривать ее как память, в
которой хранится полная микропрограмма, хотя иногда она реализуется в виде набора логических
вентилей. Мы будем называть ее управляющей памятью, чтобы не путать с основной памятью,
доступ к которой осуществляется через регистры MBR и MDR. Функционально управляющая память
представляет собой память, которая содержит микрокоманды вместо обычных команд. В нашем
примере она содержит 512 слов, каждое из которых состоит из одной 32-битной микрокоманды с
форматом, изображенным на рис. 4.4. В действительности не все эти слова нужны, но по ряду причин
намтребуются адреса для 512 отдельных слов.
Управляющая память отличается от основной памяти тем, что команды, хранящиеся в
основной памяти, выполняются в порядке адресов (за исключением ветвлений), а микрокоманды —
нет. Увеличение счетчика команд в листинге 2.1 означает, что команда, которая будет выполняться
после текущей, — это команда, которая идет вслед за текущей в памяти. Микропрограммы должны
обладать большей гибкостью (поскольку последовательности микрокоманд обычно короткие),
поэтому они не обладают этим свойством. Вместо этого каждая микрокоманда сама указывает на
следующую микрокоманду.
Поскольку управляющая память функционально представляет собой ПЗУ, ей нужен
собственный адресный регистр и собственный регистр данных. Ей не требуются сигналы чтения и
записи, поскольку здесь постоянно происходит процесс считывания. Мы назовем адресный регистр
управляющей памяти МРС (Microprogram Counter — микропрограммный счетчик). Название не
очень подходящее, поскольку микропрограммы не упорядочены явным образом и понятие счетчика
тут неуместно, но мы не можем пойти против традиций. Регистр данных мы назовем MIR
(Microinstruction Register — регистр микрокоманд). Он содержит текущую микрокоманду, биты
которой запускают сигналы управления, влияющие на работу тракта данных.
Рис. 4.5. Полная диаграмма микроархитектуры Mic-1
Регистр MIR, изображенный на рис 4 5, содержит те же шесть групп сигналов, которые
показаны на рис 4.4. Группы Addr и J (то же, что JAM) контролируют выбор следующей
микрокоманды. Мы обсудим их чуть позже Группа ALU содержит 8 битов, которые выбирают
функцию АЛУ и запускают схему сдвига. Биты С загружают отдельные регистры из шины С. Сигналы
М управляют работой памяти. Наконец, последние 4 бита запускают декодер, который определяет,
значение какого регистра будет передано на шину В. В данном случае мы выбрали декодер, который
содержит 4 входа и 16 выходов, хотя имеется всего 9 разных регистров. В более проработанной
модели мог бы использоваться декодер, имеющий 4 входа и 9 выходов.
Разработка микроархитектурного уровня
Скорость и стоимость
С развитием технологий скорость работы компьютеров стремительно растет. Существует три
основных подхода, которые позволяют увеличить скорость выполнения операций:
1. Сокращение количеств циклов, необходимых для выполнения команды.
2. Упрощение организации машины таким образом, чтобы можно было сделать цикл короче.
3. Выполнение нескольких операций одновременно.
Число циклов, необходимых для выполнения набора операций, называется длиной пути.
Иногда длину пути можно уменьшить с помощью дополнительного аппаратного обеспечения.
Для сокращения числа циклов, необходимых для вызова команды, требуется нечто большее,
чем простое добавление схемы, которая увеличивает PC на 1. Чтобы повысить скорость вызова
команды, нужно применить третью технологию параллельное выполнение команд. Весьма
эффективно отделение схем для вызова команд (8-битного порта памяти и регистров PC и MBR), если
этот блок сделать функционально независимым от основного тракта данных. Таким образом, он
может сам вызывать следующий код операции или операнд.
Одновременное выполнение нескольких операций — самый продуктивный подход. Он дает
возможность очень сильно повысить скорость работы компьютера. Даже простое перекрытие вызова
и выполнения команды чрезвычайно эффективно. При более сложных технологиях допустимо
одновременное выполнение нескольких команд.
Сокращение длины пути
Микроархитектура Mic-1 имеет относительно простую структуру и работает довольно быстро,
хотя эти две характеристики очень трудно совместить. В общем случае простые машины не являются
высокоскоростными, а высокоскоростные машины довольно сложны.
Слияние цикла интерпретатора с микропрограммой
В микроархитектуре Mic-1 основной цикл состоит из микрокоманды, которая должна
выполняться в начале каждой команды IJVM. В некоторых случаях возможно ее перекрытие
предыдущей командой.
Эту идею можно развивать и дальше. В некоторых случаях основной цикл можно свести к
нулю. Это происходит следующим образом. Рассмотрим каждую последовательность микрокоманд,
которая завершается переходом к Mainl (главный метод программы). Каждый раз основной цикл
может добавляться в конце этой последовательности (а не в начале следующей), при этом
межуровневый переход дублируется много раз (но всегда с одним и тем же набором целевых
объектов). В некоторых случаях микрокоманда Mic-1 может сливаться с предыдущими
микрокомандами, поскольку эти команды не всегда полностью используются.
Трехшинная архитектура
Что еще можно сделать, чтобы сократить длину пути? Можно подвести к АЛУ две полные
входные шины, А и В, и следовательно, всего получится три шины. Все (или, по крайней мере,
большинство регистров) должны иметь доступ к обеим входным шинам. Преимущество такой
системы состоит в том, что есть возможность складывать любой регистр с любым другим регистром
за один цикл.
Блок выборки команд
Рассмотрим обычные составные части любой команды: поле вызова и поле декодирования.
Отметим, что в каждой команде могут происходить следующие операции:
1. Значение PC пропускается через АЛУ и увеличивается на 1.
2. PC используется для вызова следующего байта в потоке команд.
3. Операнды считываются из памяти.
4. Операнды записываются в память.
5. АЛУ выполняет вычисление, и результаты сохраняются в памяти.
Если команда содержит дополнительные поля (для операндов), каждое поле должно
вызываться эксплицитно по одному байту. Поле можно использовать только после того, как эти
байты будут объединены. При вызове и компоновке поля АЛУ должно для каждого байта
увеличивать PC на единицу, а затем объединять получившийся индекс или смещение. Когда помимо
выполнения основной работы команды приходится вызывать и объединять поля этой команды, АЛУ
используется практически в каждом цикле. Чтобы объединить основной цикл с какой-нибудь
микрокомандой, нужно освободить АЛУ от некоторых таких задач.
В микроархитектуре Mic-1 с АЛУ можно снять большую часть нагрузки, если создать
независимый блок для вызова и обработки команд. Этот блок, который называется блоком выборки
команд, может независимо от АЛУ увеличивать значение PC на 1 и вызывать байты из потока байтов
до того, как они понадобятся.Этот блок содержит инкрементор, который по строению гораздо
проще, чем полный сумматор. Разовьем эту идею. Блок выборки команд может также объединять 8битные и 16-битные операнды, чтобы они могли использоваться сразу, как только они стали нужны.
Это можно осуществить, по крайней мере, двумя способами:
1. Блок выборки команд может интерпретировать каждый код операции, определять, сколько
дополнительных полей нужно вызвать, и собирать их в регистр, который будет
использоваться основным операционным блоком.
2. Блок выборки команд может постоянно предоставлять следующие 8- или 16-битные куски
информации независимо от того, имеет это смысл или нет. Тогда основной операционный
блок может запрашивать любые данные, которые ему требуются.
Рис. 4.18. Блок выборки команд для микроархитектуры Mic-1
Блок выборки команд может быть смоделирован в виде автомата с конечным числом
состояний (или конечного автомата), как показано на рис. 4.19. Во всех конечных автоматах есть
состояния (на рисунке это кружочки) и переходы (это дуги от одного состояния к другому). Каждое
состояние — это одна из возможных ситуаций, в которой может находиться конечный автомат.
Данный конечный автомат имеет семь состояний, которые соответствуют семи состояниям
сдвигового регистра, показанного на рис. 4.18. Семь состояний соответствуют количеству байтов,
которые находятся в данный момент в регистре (от 0 до 6 включительно).
Каждая дуга репрезентирует событие, которое может произойти. В нашем конечном автомате
возможны три различных события. Первое событие — чтение одного байта из регистра MBR1. Оно
активизирует сдвиговый регистр, самый правый байт в нем убирается, и осуществляется переход в
другое состояние (меньшее на 1). Второе событие — чтение двух байтов из регистра MBR2. При этом
осуществляется переход в состояние, меньшее на 2 (например, из состояния 2 в состояние 0 или из
состояния 5 в состояние 3). Оба эти перехода вызывают перезагрузку регистров MBR1 и MBR2. Когда
конечный автомат переходит в состояния 0,1 или 2, начинается процесс обращения к памяти, чтобы
вызвать новое слово.
Рис. 4.19. Автомат с конечным числом состояний для реализации блока выборки команд
Микроархитектура с упреждающей выборкой команд из памяти: Mic-2
Блок выборки команд может сильно сократить длину пути средней команды. Во-первых, он
полностью устраняет основной цикл, поскольку в конце каждой команды просто стразу
осуществляется переход к следующей команде. Во-вторых, АЛУ не нужно увеличивать значение PC.
В-третьих, блок выборки команд сокращает длину пути всякий раз, когда вычисляется 16-битный
индекс или смещение, поскольку он объединяет 16-битное значение и сразу передает его в АЛУ в
виде 32-битного значения, избегая необходимости производить объединение в регистре Н. На рис.
4.20 показана микроархитектура Mic-2, которая представляет собой усовершенствованную версию
Mic-1, к которой добавлен блок выборки команд, изображенный на рис. 4.18.
Чтобы продемонстрировать, как работает Mic-2, рассмотрим команду IADD . Она берет второе
слово из стека и выполняет сложение, как и раньше, но только сейчас ей не нужно осуществлять
переход к Mainl после завершения операции, чтобы увеличить значение PC и перейти к следующей
микрокоманде. Когда блок выборки команд распознает, что в цикле iadd3 произошло обращение к
регистру MBR1, его внутренний сдвиговый регистр сдвигает все вправо и перезагружает MBR1 и
MBR2. Он также осуществляет переход в состояние, которое на 1 ниже текущего. Если новое
состояние — это состояние 2, блок выборки команд начинает вызов слова из памяти. Все это
происходит в аппаратном обеспечении. Микропрограмма ничего не должна делать. Именно поэтому
команду IAD D можно сократить с пяти до трех микрокоманд.
Для общей производительности компьютера играет роль сокращение наиболее часто
повторяющихся команд. Обычно это команды LOAD (загрузить из памяти), ADD (сложить), а также
некоторые другие. Чтобы вычислить, насколько улучшилась производительность, можно проверить
эффективность системы по эталонному тесту, но и без этого ясно, что здесь наблюдается огромный
выигрыш в скорости.
Рис. 4.20. Тракт данных для Mic-2
Конвейерная архитектура: Mic-3
Еще один вариант усовершенствования — ввести в машину больше параллелизма. В данный
момент микроархитектура Mic-2 выполняет большинство операций последовательно. Она помещает
значения регистров на шины, ждет, пока АЛУ и схема сдвига обработают их, а затем записывает
результаты обратно в регистры. Если не учитывать работу блока выборки команд, никакого
параллелизма здесь нет. Внедрение дополнительных средств параллельной обработки дает нам
боль- шие возможности.
Как мы уже говорили, длительность цикла определяется временем, необходимым для
прохождения сигнала через тракт данных. На рис. 4.2 показано распределение этой задержки между
различными компонентами во время каждого цикла.
В цикле тракта данных есть три основных компонента:
1. Время, которое требуется на передачу значений выбранных регистров в шины А и В.
2. Время, которое требуется на работу АЛУ и схемы сдвига.
3. Время, которое требуется на передачу полученных значений обратно в регистры и
сохранение этих значений.
На рис. 4.21 показана новая трехшинная архитектура с блоком выборки команд и тремя
дополнительными защелками (регистрами), каждая из которых расположена в середине каждой
шины. Эти регистры записываются в каждом цикле. Они делят тракт данных на отдельные части,
которые теперь могут функционировать независимо друг от друга. Мы будем называть такую
архитектуру конвейерной моделью или Mic-3.
Рис. 4.21. Тракт данных с тремя шинами в микроархитектуре Mic-3
Существует целых две причины введения дополнительных регистров:
1. Мы можем повысить тактовую частоту, поскольку максимальная задержка теперь стала
короче.
2. Во время каждого цикла мы можем использовать все части тракта данных.
После разбиения тракта данных на три части максимальная задержка прохождения сигнала
уменьшается, и в результате тактовая частота может повыситься. Предположим, что если разбить
цикл тракта данных на три примерно равных интервала, тактовая частота увеличится приблизительно
втрое.
Второй пункт связан с общей производительностью, а не со скоростью выполнения отдельной
команды. В микроархитектуре Mic-2 во время первой и третьей части каждого цикла АЛУ
простаивает. Если разделить тракт данных на три части, то появляется возможность использовать
АЛУ в каждом цикле, вследствие чего производительность машины увеличивается в три раза.
Конвейер с 7 стадиями: Mic-4
Следующая (и последняя) микроархитектура — Mic-4. Ее основные части проиллюстрированы
на рис. 4.23, но значительное количество деталей не показано, чтобы сделать схему более понятной.
Как и Mic-З, эта микроархитектура содержит блок выборки команд, который заранее вызывает слова
из памяти и сохраняет различные значения MBR.
Блок выборки команд передает входящий поток байтов в новый компонент — блок
декодирования. Блок декодирования передает индекс в ПЗУ микроопераций, который он находит в
своей таблице, следующему компоненту, блоку формирования очереди. Этот блок содержит
логические схемы и две внутренние таблицы: одна — для ПЗУ и одна — для ОЗУ. В ПЗУ находится
микропрограмма, причем каждая команда IJVM содержит набор последовательных элементов,
которые называются микрооперациями.
Рис. 4.23. Основные компоненты микроархитектуры Mic-4
Структура микрооперации сходна со структурой микрокоманды (см. рис. 4.4), только в данном
случае поля NEXT_ADDRESS и JAM отсутствуют и требуется новое поле для определения входа на
шину А. Имеется также два новых бита: бит завершения (Final bit) и бит перехода (Goto bit). Бит
завершения устанавливается на последней микрооперации каждой последовательности (чтобы
обозначить эту операцию). Бит перехода нужен для указания на микрооперации, которые являются
условными микропереходами.
Блок формирования очереди работает следующим образом. Он получает от блока
декодирования индекс микрооперации ПЗУ. Затем он отыскивает микрооперацию и копирует ее во
внутреннюю очередь. Затем он копирует следующую микрооперацию в ту же очередь, а также
следующую за этой микрооперацией. Так продолжается до тех пор, пока не появится микрооперация
с битом завершения. Тогда блок копирует эту последнюю микрооперацию и останавливается. Если
блоку не встретилась микрооперация с битом перехода и у него осталось достаточно свободного
пространства, он посылает сигнал подтверждения приема блоку декодирования. Когда блок
декодирования воспринимает сигнал подтверждения, он посылает блоку формирования очереди
следующую команду IJVM.
Таким образом, последовательность команд IJVM в памяти в конечном итоге превращается в
последовательность микроопераций в очереди. Эти микрооперации передаются в регистры MIR,
которые посылают сигналы тракту данных.
Микроархитектура Mic-4 является конвейеризированной структурой с семью стадиями и более
сложным аппаратным обеспечением. Данный конвейер изображен на рис. 4.24. Цифры в кружочках
соответствуют компонентам рис. 4.23.
Рис. 4.24. Конвейер Mic-4
Download