Материал: Tannenbaum

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
background image

2 7 8 Глава 4. Микроархитектурный уровень

Кроме того, он передает следующий байт в регистр MBR, как и в архитектуре Mic-1,

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

в микроархитектуре Mic-1, он имеет два интерфейса с шиной В: MBR1 и MBR1U.
Первый получает знаковое расширение до 32 битов, второй дополнен нулями.

Регистр MBR2 функционирует точно так же, но содержит следующие 2 байта.

Он имеет два интерфейса с шиной В: MBR2 и MBR2U, первый из которых расши-

рен по знаку, а второй дополнен до 32 битов нулями.

Блок выборки команд отвечает за вызов байтов. Для этого он использует стан-

дартный 4-байтный порт памяти, вызывая полные 4-байтные слова заранее и за-

гружая следующие байты в сдвиговый регистр, который выдает их по одному или
по два за раз в том порядке, в котором они вызываются из памяти. Задача сдвиго-
вого регистра — сохранить последовательность поступающих байтов для загрузки
в регистры MBR1 и MBR2.

MBR1 всегда содержит самый старший байт сдвигового регистра, a MBR2 —

2 старших байта (старший байт — левый байт), которые формируют 16-битное це-

лое число (см. рис. 4.14,

 б).

 Два байта в регистре MBR2 могут быть из различных

слов памяти, поскольку команды IJVM никак не связаны с границами слов.

Всякий раз, когда считывается регистр MBR1, значение сдвигового регистра

сдвигается вправо на 1 байт. Всякий раз, когда считывается регистр MBR2, значе-
ние сдвигового регистра сдвигается вправо на 2 байта. Затем в регистры MBR1 и

MBR2 загружается самый старший байт и пара самых старших байтов соответ-

ственно. Если в данный момент в сдвиговом регистре осталось достаточно места

для целого слова, блок выборки команд начинает цикл обращения к памяти, чтобы

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

чение можно считывать уже в последующих циклах.

Блок выборки команд может быть смоделирован в виде

 автомата с конечным

числом состояний

 (или

 конечного автомата),

 как показано на рис. 4.19. Во всех

конечных автоматах есть

 состояния

 (на рисунке это кружочки) и

 переходы

 (это

дуги от одного состояния к другому). Каждое состояние — это одна из возможных

ситуаций, в которой может находиться конечный автомат. Данный конечный ав-

томат имеет семь состояний, которые соответствуют семи состояниям сдвигового

регистра, показанного на рис. 4.18. Семь состояний соответствуют количеству бай-

тов, которые находятся в данный момент в регистре (от 0 до 6 включительно).

Каждая дуга репрезентирует событие, которое может произойти. В нашем ко-

нечном автомате возможны три различных события. Первое событие — чтение
одного байта из регистра MBR1. Оно активизирует сдвиговый регистр, самый пра-
вый байт в нем убирается, и осуществляется переход в другое состояние (меньшее
на 1). Второе событие — чтение двух байтов из регистра MBR2. При этом осуще-
ствляется переход в состояние, меньшее на 2 (например, из состояния 2 в состоя-
ние 0 или из состояния 5 в состояние 3). Оба эти перехода вызывают перезагруз-
ку регистров MBR1 и MBR2. Когда конечный автомат переходит в состояния 0,1
или 2, начинается процесс обращения к памяти, чтобы вызвать новое слово (предпо-

background image

Разработка микроархитектурного уровня

279

лагается, что память уже не занята считыванием слова). При поступлении слова

номер состояния увеличивается на 4.

Чтобы функционировать правильно, схема выборки команд должна блокиро-

ваться в том случае, если от нее требуют произвести какие-то действия, которые
она выполнить не может (например, передать значение в MBR2, когда в сдвиговом
регистре находится только 1 байт, а память все еще занята вызовом нового слова).

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

устройства аппаратного обеспечения конструируются в виде конечных автоматов.

Вызов слова из памяти

Вызов слова

из памяти

Вызов слова

из памяти

MBR2

MBR2

MBR2

MBR2

События

MBR1: Чтение регистра MBR1
MBR2: Чтение регистра MBR2

Вызов слова из памяти: это событие означает считывание слова из памяти

и помещение 4 байтов в сдвиговый регистр

Рис. 4.19. Автомат с конечным числом состояний для реализации блока выборки команд

Блок выборки команд имеет свой собственный регистр адреса ячейки памяти

(IMAR), который используется для обращения к памяти, когда нужно вызвать
новое слово. У этого регистра есть специальный инкрементор, поэтому основному

АЛУ не требуется прибавлять 1 к значению PC для вызова следующего слова. Блок

выборки команд должен контролировать шину С, чтобы каждый раз при загрузке
регистра PC новое значение PC также копировалось в IMAR. Поскольку новое
значение в регистре PC может быть и не на границе слова, блок выборки команд
должен вызвать нужное слово и скорректировать значение сдвигового регистра

соответствующим образом.

Основной операционный блок записывает значение в PC только в том случае,

если необходимо изменить характер последовательности байтов. Это происходит
в команде перехода, в команде INVOKEVIRTUAL и команде IRETURN.

Поскольку микропрограмма больше не увеличивает PC явным образом при

вызове кода операции, блок выборки команд должен обновлять PC сам. Как это
происходит? Блок выборки команд способен распознать, что байт из потока ко-
манд получен, то есть, что значения регистров MBR1 и MBR2 (или их вариантов

background image

2 8 0 Глава 4. Микроархитектурный уровень

без знака) уже считаны. С регистром PC связан отдельный инкрементор, который
увеличивает значение на 1 или на 2 в зависимости от того, сколько байтов получе-

но. Таким образом, регистр PC всегда содержит адрес первого еще не полученного

байта. В начале каждой команды в регистре MBR находится адрес кода операции
этой команды.

Отметим, что существует два разных инкрементора, которые выполняют раз-

ные функции. Регистр PC считает

 байты

 и увеличивает значение на 1 или на 2.

Регистр Ш AR считает

 слова

 и увеличивает значение только на 1 (для 4 новых бай-

тов). Как и MAR, регистр IMAR соединен с адресной шиной, при этом бит 0 реги-
стра IMAR связан с адресной линией 2 и т. д. (перекос шины), чтобы осуществ-

лять переход от адреса слова к адресу байта.

Мы скоро увидим, что если нет необходимости увеличивать значение PC в ос-

новном цикле, это приводит к большому выигрышу, поскольку обычно в микроко-
манде, в которой происходит увеличение PC, кроме этого больше ничего не проис-
ходит. Если эту команду устранить, длина пути сократится. Однако для увеличения
скорости работы машины требуется больше аппаратного обеспечения. Таким об-

разом, мы пришли к третьему способу сокращения длины пути:

команды из памяти должны вызываться специализированным функциональным

блоком.

Микроархитектура с упреждающей выборкой

команд из памяти: Mic-2

Блок выборки команд может сильно сократить длину пути средней команды.
Во-первых, он полностью устраняет основной цикл, поскольку в конце каждой

команды просто стразу осуществляется переход к следующей команде. Во-вторых,
АЛУ не нужно увеличивать значение PC. В-третьих, блок выборки команд сокра-

щает длину пути всякий раз, когда вычисляется 16-битный индекс или смещение,

поскольку он объединяет 16-битное значение и сразу передает его в АЛУ в виде
32-битного значения, избегая необходимости производить объединение в регист-
ре Н. На рис. 4.20 показана микроархитектура Mic-2, которая представляет собой
усовершенствованную версию Mic-1, к которой добавлен блок выборки команд,

изображенный на рис. 4.18. Микропрограмма для усовершенствованной машины
приведена в табл. 4.9.

Чтобы продемонстрировать, как работает Mic-2, рассмотрим команду IADD. Она

берет второе слово из стека и выполняет сложение, как и раньше, но только сейчас

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

команд распознает, что в цикле iadd3 произошло обращение к регистру MBR1, его

внутренний сдвиговый регистр сдвигает все вправо и перезагружает MBR1 и MBR2.

Он также осуществляет переход в состояние, которое на 1 ниже текущего. Если

новое состояние — это состояние 2, блок выборки команд начинает вызов слова из
памяти. Все это происходит в аппаратном обеспечении. Микропрограмма ничего
не должна делать. Именно поэтому команду IADD можно сократить с пяти до трех
микрокоманд.

background image

Разработка микроархитектурного уровня

281

I Разрешающий сигнал

на шину В

t

Запись сигнала

с шины С в регистр

Регистры

управления

памятью

Шика В

—ыСхема сдвига

  м

Рис. 4.20.

 Тракт данных для Мю-2

Таблица 4.9.

 Микропрограмма для Mic-2

Микрокоманда Операции

Комментарий

пор1

iadd2

goto (MBR) Переход к следующей команде

MAR=SP=SP-1; rd Чтение слова, идущего после верхнего слова стека
H=TOS H = вершина стека

продолжение &

background image

282

Глава 4. Микроархитектурный уровень

Таблица 4.9

 {продолжение}

Микрокоманда Операции

Комментарий

iadd3

isubi
isub2

isub3

iandi

Iand2

iand3

ior1

ior2

ior3

dup1

dup2

pop1

pop2
рорЗ
swapi

swap2

swap3

swap4

swap5

swap6

bipush!

bipush2

iloadi

iload2

iload3

i store 1
istore2
istore3

istore4

istore5

MDR=TOS=MDR+H;

wr;goto(MBR1)

MAR=SP=SP-I;rd

H=TOS

MDR=TOS=MDR-H;

wr; goto(MBRI)

MAR=SP=SP-1;rd

H=TOS

MDR=TOS=MDRHH;

wr;goto{MBR1)

MAR=SP=SP-1;rd

H=TOS

MDR=TOS=MDRHnM
H;wr;goto(MBR1)

MAR=SP=SP+1

MDR=TOS; wr;

goto (MBR1)

MAR=SP=SP-1;rd

TOS=MDR;goto(MBR1)

MAR=SP-1;rd

MAR=SP
H-MDR; wr

MDR=TOS
MAR=SP-1;wr

TOS=H;goto(MBR1)

SP=MAR=SP+1

MDR=TOS=MBR1;

wr;goto(MBR1)

MAR=LV+MBR1U;rd

MAR=SP=SP+1

TOS=MDR;wr;
goto{MBR1)

MAR=LV+MBR1U
MDR=TOS;wr

MAR=SP=SP-1;rd

TOS=MDR:aoto(MBR1l

Суммирование двух верхних слов; запись суммы
в верхнюю позицию стека

Чтение слова, идущего после верхнего слова стека

Н = вершина стека

Вычитание TOS из вызванного значения TOS-1

Чтение слова, идущего после верхнего слова стека
Н = вершина стека

Логическое умножение вызванного значения TOS-1

и TOS (операция И)

Чтение слова, идущего после верхнего слова стека

Н = вершина стека

Логическое сложение вызванного значения TOS-1

и TOS (операция ИЛИ)

Увеличение SP на 1 и копирование результата
в регистр MAR
Запись нового слова в стек

Чтение слова, идущего после верхнего слова стека
Программа ждет, пока закончится процесс чтения
Копирование нового слова в регистр TOS
Чтение второго слова из стека; установка регистра
MAR на значение SP
Подготовка к записи нового второго слова стека

Сохранение нового значения TOS; запись второго

слова стека

Копирование прежнего значения TOS в регистр MDR

Запись прежнего значения TOS на второе место
в стеке
Обновление TOS
Установка регистра MAR для записи в новую

вершину стека

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

Перемещение значения LV с индексом в регистр

MAR; чтение операнда

Увеличение SP на 1; перемещение нового значения
SP в регистр MAR

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

Установка регистра MAR на значение LV+индекс
Копирование значения TOS для сохранения в памяти

Уменьшение SP на 1; чтение нового значения TOS

Машина ждет окончания процесса чтения
Обновление TOS

Источник: https://files.student-it.ru/previewfile/18474