Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Boroda_2

.doc
Скачиваний:
7
Добавлен:
20.03.2015
Размер:
1.67 Mб
Скачать

Таблица 4.8. Микропрограмма для Mic-2

Микрокоманда

Операции

Комментарий

пор1

goto (MBR)

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

iaddl

MAR = SP = SP - 1; rd

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

iadd2

H = TOS

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

Микрокоманда

Операции

Комментарий

iload2

MAR = SP = SP + 1

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

iload3

TOS = MDR; wr; goto (MBR1)

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

istorel

MAR = LV + MBR1U

Установка регистра MAR на значение LV + индекс

istore2

MDR = TOS; wr

Копирование значения TOS для сохранения в памяти

istore3

MAR = SP = SP - 1; rd

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

istore4

Машина ждет окончания процесса чтения

istore5

TOS = MDR; goto (MBR1)

Обновление TOS

widel

goto (MBR1 ИЛИ 0x100)

Следующий адрес — 0x100 ИЛИ код операции

wide_iload1

MAR = LV + MBR2U; rd; goto iload2

То же, что iloadl, но с использованием 2-байтного индекса

wide_istore1

MAR = LV + MBR2U; goto istore2

То же, что istorel, но с использованием 2-байтного индекса

Idc_w1

MAR = CPP + MBR2U; rd; goto iload2

То же, что wide_i!oad1, но индексирование осуществляется из регистра СРР

iincl

MAR = LV + MBR1U; rd

Установка регистра MAR на значение LV + индекс; чтение этого значения

iinc2

H = MBR1

Присваивание регистру Н константы

iinc3

MDR = MDR + H; wr; goto (MBR1)

Увеличение на константу и обновление

gotol

H = PC - 1

Копирование значения PC в регистр Н

goto2

PC = H + MBR2

Прибавление смещения и обновление PC

goto3

Машина ждет, пока блок выборки команд вызовет новый код операции

goto4

goto (MBR1)

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

ifltl

MAR = SP = SP - 1; rd

Чтение второго сверху слова в стеке

iflt2

OPC = TOS

Временное сохранение TOS в ОРС

iflt3

TOS = MDR

Запись новой вершины стека в TOS

iflt4

N = OPC; if(N) goto T; else goto F

Переход по биту N

ifeql

MAR = SP = SP - 1; rd

Чтение второго сверху слова в стеке

ifeq2

OPC = TOS

Временное сохранение TOS в ОРС

Микрокоманда

Операции

Комментарий

iadd3

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

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

isubl

MAR = SP = SP - 1; rd

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

isub2

H = TOS

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

isub3

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

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

iandl

MAR = SP = SP - 1; rd

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

iand2

H = TOS

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

iand3

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

Логическое умножение вызванного значения TOS - 1 и TOS (операция И)

iorl

MAR = SP = SP - 1; rd

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

ior2

H = TOS

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

ior3

MDR = TOS = MDR ИЛИ H; wr; goto (MBR1)

Логическое сложение вызванного значения TOS - 1 и TOS (операция ИЛИ)

dupl

MAR = SP = SP + 1

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

dup2

MDR = TOS; wr; goto (MBR1)

Запись нового слова в стек

pop1

MAR = SP = SP - 1; rd

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

P°P2

Программа ждет, пока закончится процесс чтения

рорЗ

TOS = MDR; goto (MBR1)

Копирование нового слова в регистр TOS

swapl

MAR = SP - 1; rd

Чтение второго слова из стека; установка регистра MAR на значение SP

swap2

MAR = SP

Подготовка к записи нового второго слова стека

swap3

H = MDR; wr

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

swap4

MDR = TOS

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

swap5

MAR = SP - 1; wr

Запись прежнего значения TOS на второе место в стеке

swap6

TOS = H; goto (MBR1)

Обновление TOS

bipush 1

SP = MAR = SP + 1

Установка регистра MAR для записи в новую вершину стека

bipush2

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

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

iloadi

MAR = LV + MBR1U; rd

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


Микрокоманда

Операции

Комментарий

if_icmpeq2

MAR = SP = SP - 1

Установка регистра MAR на чтение новой вершины стека

if_icmpeq3

H = MDR; rd

Копирование второго слова из стека в регистр Н

if_icmpeq4

OPC = TOS

Временное сохранение TOS в ОРС

if_icmpeq5

TOS = MDR

Помещение новой вершины стека в TOS

if_icmpeq6

Z = H - OPC; if(Z) goto T; else goto F

Если два верхних слова равны, осуществляется переход к Т; если они не равны, осуществляется переход к F

T

H = PC - 1; goto goto2

То же, что gotol

F

H = MBR2

Игнорирование байтов, находящихся в регистре MBR2

F2

goto (MBR1)

invoke_virtual1

MAR = CPP + MBR2U; rd

Помещение адреса указателя процедуры в регистр MAR

invoke_virtual2

OPC = PC

Сохранение значения PC в регистре ОРС

invoke_virtual3

PC = MDR

Установка PC на первый байт кода процедуры

invoke_virtual4

TOS = SP - MBR2U

TOS = адрес OBJREF - 1

invoke_virtual5

TOS = MAR = H = TOS + 1

TOS = адрес OBJREF

invoke_virtual6

MDR = SP + MBR2U + 1; wr

Перезапись OBJREF со связующим указателем

invoke_virtual7

MAR = SP = MDR

Установка регистров SP и MAR на адрес ячейки, в которой содержится старое значение PC

invoke_virtual8

MDR = OPC; wr

Подготовка к сохранению старого значения PC

invoke_virtual9

MAR = SP = SP + 1

Увеличение SP на 1; теперь SP указывает на ячейку, в которой хранится старое значение LV

invoke_virtual10

MDR = LV; wr

Сохранение старого значения LV

invoke_virtual11

LV = TOS; goto (MBR1)

Установка значения LV на нулевой параметр

ireturnl

MAR = SP = LV; rd

Переустановка регистров SP и MAR для чтения связующего указателя

ireturn2

Процесс считывания связующего указателя

ireturn3

LV = MAR = MDR; rd

Установка регистров LV и MAR на связующий указатель; чтение старого значения PC

ireturn4

MAR = LV + 1

Установка регистра MAR на старое значение LV; чтение старого значения LV

ireturn5

PC = MDR; rd

Восстановление PC

ireturn6

MAR = SP

ireturn7

LV = MDR

Восстановление LV

ireturn8

MDR = TOS; wr; goto (MBR1)

Сохранение результата в исходной вершине стека

В микроархитектуре Mic-2 некоторые команды усовершенствованы в боль­шей степени, чем другие. Команда LDC W сокращается с 9 до 3 микрокоманд, и, следовательно, время выполнения команды уменьшается втрое. Несколько по-дру- гому дело обстоит с командой SWAP: изначально там было 8 микрокоманд, а стало 6. Для общей производительности компьютера играет роль сокращение наиболее часто повторяющихся команд, а это команды ILOAD (было 6, стало 3), IADD (было 4, стало 3) и IF ICMPEQ (было 13, стало 10 для случая, когда слова равны; было 10, стало 8 для случая, когда слова не равны). Чтобы вычислить, насколько выросла производительность, можно проверить эффективность системы по эталонному тесту, но и без этого ясно, что имеет место значительный выигрыш в быстродей­ствии.

Конвейерная конструкция — микроархитектура Mic-3

Очевидно, что Mic-2 — это усовершенствованная микроархитектура Mic-1. Она работает быстрее и требует меньше управляющей памяти, хотя стоимость блока выборки команд несомненно превышает сумму, выигранную за счет сокращения объема управляющей памяти. Таким образом, машина Mic-2 работает значитель­но быстрее при некотором увеличении стоимости. Давайте посмотрим, можно ли еще больше повысить скорость.

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

Еще один вариант усовершенствования — увеличить степень параллелизма. На данный момент микроархитектура Mic-2 выполняет большинство операций последовательно. Она помещает значения регистров на шины, ждет, пока АЛУ и схема сдвига их обработают, а затем записывает результаты обратно в регист­ры. Если не учитывать работу блока выборки команд, никакого параллелизма здесь нет. Внедрение дополнительных механизмов параллельной обработки су­лит значительные преимущества.

Как уже отмечалось, длительность цикла определяется временем, необходи­мым для прохождения сигнала через тракт данных. На рис. 4.2 показано распре­деление этой задержки между различными компонентами во время каждого цик­ла. Цикл тракта данных объединяет три основные составляющие:

  1. Время, которое требуется на передачу значений выбранных регистров на ши­ны А и В.

  2. Время, которое требуется на работу АЛУ и схемы сдвига.

  3. Время, которое требуется на передачу полученных значений обратно в реги­стры и сохранение этих значений.

На рис. 4.21 показана новая 3-шинная архитектура с блоком выборки команд и тремя дополнительными защелками (регистрами), каждая из которых распо­ложена в середине каждой шины. Эти регистры записываются в каждом цикле. Они делят тракт данных на отдельные части, которые могут функционировать независимо друг от друга. Мы будем называть такую архитектуру конвейерной моделью, или Mic-3.

Зачем нужны целых три дополнительных регистра? Ведь теперь для прохож­дения сигнала через тракт данных требуется 3 цикла: один для загрузки регист­ров А и В, второй для запуска АЛУ и схемы сдвига, а также загрузки регистра С, третий для сохранения значения регистра-защелки С обратно в нужных регист­рах. Мы что, ненормальные? (Подсказка: нет.) Существует целых две причины введения дополнительных регистров:

  1. Мы можем повысить тактовую частоту, поскольку максимальная задержка те­перь стала меньше.

  2. Во время каждого цикла мы можем использовать все части тракта данных. После разбиения тракта данных на три части максимальная задержка прохо­ждения сигнала уменьшается, в результате тактовая частота может повышаться. Будем считать, что, если разбить цикл тракта данных на три примерно равных интервала, тактовая частота увеличится втрое. (На самом деле это не так, по­скольку мы добавили в тракт данных еще два регистра, но в первом приближе­нии это допустимо.)

Поскольку мы предполагаем, что все операции чтения из памяти и записи в память выполняются с использованием кэш-памяти первого уровня и эта кэш-память построена из того же материала, что и регистры, мы можем сделать вывод, что операция с памятью занимает один цикл. На практике, однако, этого не так легко достичь.

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

А теперь посмотрим, как работает тракт данных Mic-З. Однако сначала нужно как-то назвать защелки. Проще всего назвать защелки А, В и С и считать их ре­гистрами, подразумевая ограничения тракта данных. В табл. 4.9 приведен фраг­мент программы для микроархитектуры Mic-2 (реализация команды SWAP).

Микрокоманда

Операции

Комментарий

swapl

MAR = SP - 1; rd

Чтение второго слова из стека; установка MAR на SP

swap2

MAR = SP

Подготовка к записи нового второго слова

swap3

H = MDR; wr

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

swap4

MDR = TOS

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

swap5

MAR = SP - 1; wr

Запись старого значения TOS на второе место в стеке

swap6

TOS = H; goto (MBR1)

Обновление TOS

Давайте перепишем эту последовательность для Mic-З. Следует помнить, что теперь тракт данных работает три цикла: один служит для загрузки регистров А и В, второй — для выполнения операции и загрузки регистра С, третий — для за­писи результатов в регистры. Каждый из этих циклов мы назовем микрошагом.

Реализация команды SWAP для Mic-З показана в табл. 4.10. В цикле 1 мы начи­наем микрокоманду swapl, копируя значение SP в регистр В. Не имеет никакого значения, что происходит в регистре А, поскольку, чтобы отнять 1 из В, ENA (сигнал разрешения А) блокируется (см. табл. 4.1). Для простоты мы не показы­ваем присваивания, которые не используются. В цикле 2 мы производим опера­цию вычитания. В цикле 3 результат сохраняется в регистре MAR, и после этого, в конце третьего цикла, начинается процесс чтения. Поскольку чтение из памяти занимает один цикл, закончится он только в конце четвертого цикла. Это показа­но присваиванием значения регистру MDR в цикле 4. Значение из MDR можно считывать не раньше пятого цикла.

Swapl

Swap2

Swap3

Swap4

Swap5

Swap6

Цикл

MAR = SP - 1; rd

MAR = SP

H = MDR; wr

MDR = TOS

MAR = SP - 1; wr

TOS = H; goto (MBR1)

1

В = SP

2

0

и

го

1

В = SP

3

MAR = С; rd

С = В

4

MDR = Mem

MAR = С

5

В = MDR

6

С = В

B = TOS

7

H = С; wr

C = B

В = SP

8

Mem = MDR

MDR = С

0

II

го

1

В = H

9

MAR = C; wr

C=B

10

Mem = MDR

TOS = C

11

goto (MBR1)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]