Реклама:

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

Чтобы продемонстрировать, как работает Mic-2, рассмотрим команду IADD. Она берет второе слово из стека и выполняет сложение как и раньше, но только сейчас ей не нужно осуществлять переход к Mai ni после завершения операции, чтобы увеличить значение PC и перейти к следующей микрокоманде. Когда блок выборки команд распознает, что в цикле iadd3 произошло обращение к регистру MBR1, его внутренний сдвиговый регистр сдвигает все вправо и перезагружает MBR1 и MBR2. Он также осуществляет переход в состояние, которое на 1 меньше текущего. Если новое состояние - это состояние 2, блок выборки команд начинает вызов слова из памяти. Все это реализуется аппаратно. Микропрограмма ничего не должна делать. Именно поэтому команду IADD можно сократить с пяти до трех микрокоманд.

Упреждающая выборка команд из памяти - микроархитектура Mic-2

Рис. 4.20. Тракт данных для Мю-2 Таблица 4.8. Микропрограмма для Мю-2

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

Операции

goto (MBR)

Комментарий

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

іасЮІ

MAR = SP = SP - 1; rd

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

   

стека

іас!сІ2

H = TOS

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

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

Операции

Комментарий

iadd3

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

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

isuM

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)

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

popl

MAR = SP = SP - 1; rd

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

pop2

 

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

рорЗ

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

bipushl

SP = MAR = SP + 1

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

bipush2

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

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

iloadl

MAR = LV + MBR1U; rd

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

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

Таблица 4.8 (продолжение)

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

Операции

Комментарий

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

 

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

istoreö

TOS = MDR; goto (MBR1)

Обновление TOS

widel

goto (MBR1 ИЛИ 0x100)

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

wide_iload1

MAR = LV + MBR2U; rd; goto iload2

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

wide_istore1

MAR = LV + MBR2U; goto istore2

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

Idc_w1

MAR = CPP + MBR2U; rd; goto iload2

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

und

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; eise goto F

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

ifeql

MAR = SP = SP - 1; rd

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

ifeq2

OPC = TOS

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

ifeq3

TOS = MDR

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

ifeq4

Z = OPC; if(Z) goto T; eise goto F

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

if_icmpeq1

MAR = SP = SP - 1; rd

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

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

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

Если два верхних слова равны, осуществляется переход к T; если они не равны, осуществляется переход к 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 = T05; 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 некоторые команды усовершенствованы в большей степени, чем другие. Команда LDCW сокращается с 9 до 3 микрокоманд, и, следовательно, время выполнения команды уменьшается втрое. Несколько по-другому дело обстоит с командой SWAP: изначально там было 8 микрокоманд, а стало 6. Для общей производительности компьютера играет роль сокращение наиболее часто повторяющихся команд, а это команды IL0AD (было 6, стало 3), IADD (было 4, стало 3) и IFICMPEQ (было 13, стало 10 для случая, когда слова равны; было 10, стало 8 для случая, когда слова не равны). Чтобы вычислить, насколько выросла производительность, можно проверить эффективность системы по эталонному тесту, но и без этого ясно, что имеет место значительный выигрыш в быстродействии.

Сокращение длины пути || Оглавление || Конвейерная конструкция - микроархитектура Mic-З