Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Архитектура компьютера. Э. Таненбаум..doc
Скачиваний:
109
Добавлен:
20.06.2014
Размер:
7.54 Mб
Скачать

Глава 4

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

Над цифровым логическим уровнем находится микроархитектурный уровень. Его задача — интерпретация команд уровня 2 (уровня архитектуры команд), как пока­зано на рис. 1.2. Строение микроархитектурного уровня зависит от того, каков уровень архитектуры команд, а также от стоимости и предназначения компьютера. В настоящее время уровень архитектуры команд часто содержит простые коман­ды, которые выполняются за один цикл (таковы, в частности, системы RISC). В других системах (например, в системах Pentium II) на этом уровне имеются более сложные команды; выполнение одной такой команды занимает несколько циклов. Чтобы выполнить команду, нужно найти операнды в памяти, считать их и запи­сать полученные результаты обратно в память. Управление уровнем команд со сложными командами отличается от управления уровнем команд с простыми ко­мандами, так как в первом случае выполнение одной команды требует определен­ной последовательности операций.

Пример микроархитектуры

В идеале мы должны были сначала описать общие принципы разработки микро­архитектурного уровня. К сожалению, таких общих принципов не существует. Каждая разработка индивидуальна. По этой причине мы просто подробно рассмот­рим конкретный пример. В качестве примера мы выбрали подмножество вирту­альной машины Java, как мы и обещали в главе 1. Это подмножество содержит только команды с целыми числами, поэтому мы назвали ее IJVM (Integer JVM; integer — целое число). Полную структуру JVM мы рассмотрим в главе 5.

Начнем с описания микроархитектуры, на основе которой мы воплотим IJVM. Система IJVM содержит несколько довольно сложных команд. Подобные архи­тектуры часто реализуются с помощью микропрограммирования, как уже было сказано в главе 1. Хотя структура IJVM несложная, она послужит отправной точкой в описании основных принципов управления командами и последовательности их выполнения.

Наша микроархитектура содержит микропрограмму (в ПЗУ), которая должна вызывать, декодировать и выполнять команды IJVM. Мы не можем использовать

для этой микропрограммы интерпретатор JVM, разработанный компанией Sun,

поскольку нам нужна крошечная микропрограмма, которая запускает отдельные вентили аппаратного обеспечения. Интерпретатор JVM компании Sun был напи­сан на языке С, чтобы обеспечить мобильность программного обеспечения. Этот интерпретатор не может управлять аппаратным обеспечением на таком детализи­рованном уровне, который нам нужен. Поскольку реальное аппаратное обеспече­ние состоит только из компонентов, описанных в главе 3, то теоретически после изучения этой главы читатель сможет пойти в магазин, купить огромное количе­ство транзисторов и сконструировать машину IJVM. Тому, кто успешно выполнит эту задачу, будет предоставлен дополнительный кредит (а также полное психиат­рическое обследование).

Разработку данной микроархитектуры удобно считать проблемой программиро­вания, при этом каждая команда уровня архитектуры команд — функция, вызывае­мая основной программой. В данном случае основная программа довольно проста. Она представляет собой бесконечный цикл. Сначала программа определяет, какую функцию нужно выполнить, затем вызывает эту функцию, а затем начинает все снова.

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

Команды IJVM очень короткие. Каждая команда состоит из нескольких полей, обычно одного или двух, каждое из которых выполняет определенную функцию. Первое поле является кодом операции. Этот код определяет тип команды и сообща­ет, что это, например, команда сложения или команда ветвления, или еще какая-ни­будь команда. Многие команды содержат дополнительное поле, которое определяет тип операнда. Например, команды, которые имеют доступ к локальным перемен­ным, должны иметь специальное поле, чтобы определить, какая это переменная.

Такая модель выполнения команды:, называемая иногда циклом выборка-ис­полнение, полезна для теории, а также может служить основой воплощения уров­ня архитектуры команд со сложными командами (например, IJVM). Ниже мы опи­шем, как работает эта модель, что собой представляет микроархитектура и как ею управляют микрокоманды!, каждая из которых занимает тракт данных на один цикл. Полный список команд формирует микропрограмму, которая будет рассмотрена

очень подробно. Тракт данных

Тракт данных—это часть центрального процессора, состоящая из АЛ У (арифмети­ко-логического устройства) и его входов и выходов. Тракт данных нашей микроар­хитектуры показан на рис. 4.1. Хотя этот тракт данных и был оптимизирован для интерпретации программ IJVM, он схож с трактами данных большинства компью­теров. Он содержит ряд 32-разрядных регистров, которым мы приписали симво­лические названия (например, PC, SP, MDR). Хотя некоторые из этих названий

нам знакомы, важно понимать, что эти регистры доступны только на микроархи­тектурном уровне (для микропрограммы). Им даны такие названия, поскольку они обычно содержат значения, соответствующие переменным с аналогичными назва­ниями на уровне архитектуры команд Содержание большинства регистров пере­дается на шину В. Выходной сигнал АЛУ запускает схему сдвига, а затем шину С Значение из шины С может записываться в один или несколько регистров одно­временно Шину А мы введем позже, а пока представим, что ее нет

Г

<=

MAR

Регистры управления памятью

В основную память и иэ нее

ft

PC

:С>;_ MBR

SP =

t

t

LV (:

I

t

CPP

t

t

TOS

1

|

Г

OPC

f

f

H

Управление АЛУ

Схема сдвига И—**— Управление схемой сдвига

Шина С-

Сигналы управления

Т Разрешающий сигнал на шину В Т Запись сигнала с шины С в регистр

Шина В

Данное АЛУ идентично тому, которое изображено на рис. 3.18 и 3.19. Его функ­ционирование зависит от линий управления. На рис. 4.1 перечеркнутая стрелочка с цифрой 6 сверху указывает на наличие шести линий управления АЛУ. Из них F и р!служат для определения операции, EN А и ENB — для разрешения входных сигналов А и В соответственно, 1NVA — для инверсии левого входа и INC — для

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

линиях управления могут быть полезны.

Некоторые комбинации показаны в табл. 4.1. Не все из этих функций нужны

для IJVM, но многие из них могут пригодиться для полной JVM. В большинстве

случаев существует несколько возможностей для достижения одного и того же ре­зультата. В данной таблице знак «+» означает арифметический плюс, а знак «-» — арифметический минус, поэтому -А означает дополнение А.

Таблица 4.1. Некоторые комбинации сигналов АЛУ и соответствующие им функции

F,

ENA

ENB

INVA

INC

Функция

0

1

1

0

0

0

A

0

1

0

1

0

0

в

0

1

1

0

1

0

A

1

0

1

1

0

0

в

1

1

1

1

0

0

A+B

1

1

1

1

0

1

A+B+1

1

1

1

0

0

1

A+1

1

1

0

1

0

1

B+1

1

1

1

1

1

1

B-A

1

1

0

1

1

0

B-1

1

1

1

0

1

1

-A

0

0

1

1

0

0

АИВ

0

1

1

1

0

0

А ИЛИ В

0

1

0

0

0

0

0

0

1

0

0

0

1

1

0

1

0

0

1

0

-1

АЛУ, изображенное на рис. 4.1, содержит два входа для данных: левый вход (А) и правый вход (В). С левым входом связан регистр временного хранения Н. С пра­вым входом связана шина В, в которую могут поступать значения из одного из девяти источников, что показано с помощью девяти серых стрелок, примыкающих к шине. Существует и другая разработка АЛУ с двумя полноразрядными шинами, и мы рассмотрим ее чуть позже в этой главе.

В регистр Н может поступать функция АЛУ, которая проходит через правый вход (из шины В) к выходу АЛУ Одна из таких функций — сложение входных сигналов АЛУ, только при этом сигнал ENA отрицается, и левый вход получает значение 0. Если к значению шины В прибавить 0, это значение не изменится. Затем результат проходит через схему сдвига (также без изменений) и сохраняется в регистре Н.

Существует еще две линии управления, которые используются независимо от остальных. Они служат для управления выходом АЛУ. Линия SLL8 (Shift Left Logical — логический сдвиг влево) сдвигает число влево на 1 байт, заполняя 8 са­мых младших двоичных разрядов нулями; линия SRA1 (Shift Right Arithmetic — арифметический сдвиг вправо) число вправо на 1 бит, оставляя самый старший двоичный разряд без изменений.

Можно считать и записать один и тот же регистр за один цикл. Для этого, на­пример, нужно поместить значение SP на шину В, закрыть левый вход АЛУ, уста­новить сигнал INC и сохранить полученный результат в регистре SP, увеличив таким образом его значение на 1 (см. восьмую строку табл. 4.1). Если один и тот же регистр может считываться и записываться за один цикл, то как при этом предот­вратить появление ненужных данных? Дело в том, что процессы чтения и записи проходят в разных частях цикла. Когда в качестве правого входа АЛУ выбирается один из регистров, его значение помещается на шину В в начале цикла и хранится там на протяжении всего цикла. Затем АЛУ выполняет свою работу и производит результат, который через схему сдвига поступает на шину С. Незадолго до конца цикла, когда значения выходных сигналов АЛУ и схемы сдвига стабилизирова­лись, содержание шины С передается в один или несколько регистров. Одним из этих регистров вполне может быть тот, от которого поступил сигнал на шину В. Точная синхронизация тракта данных делает возможным считывание и запись одного и того же регистра за один цикл. Об этом речь пойдет ниже.

Синхронизация тракта данных

Как происходит синхронизация этих действий, показано на рис. 4.2. Здесь в нача­ле каждого цикла генерируется короткий импульс. Он может выдаваться задаю­щим генератором, как показано на рис. 3.20, в. На заднем фронте импульса уста­навливаются биты, которые будут запускать все вентили. Этот процесс занимает определенный отрезок времени Aw. Затем выбирается регистр, и его значение пе­редается на шину В. На это требуется время Дх. Затем АЛУ и схема сдвига начина­ют оперировать поступившими к ним данными. После промежутка Ду выходные сигналы АЛУ и схемы сдвига стабилизируются. В течение следующего отрезка Дг результаты проходят по шине С к регистрам, куда они загружаются на нарастаю­щем фронте следующего импульса. Загрузка должна запускаться фронтом сиг­нала и осуществляться мгновенно, так что даже в случае изменений каких-либо входных регистров изменения в шине С будут происходить только после полной загрузки регистров. На нарастающем фронте импульса регистр, запускающий шину В, приостанавливает свою работу и ждет следующего цикла. На рис. 4.2 упомяну­ты регистры МРС и MIR, а также память. Их предназначение мы обсудим чуть позже.

Важно осознавать, что хотя в тракте данных нет никаких запоминающих эле­ментов, для прохождения сигнала по нему требуется определенное время. Изме­нение значения на шине В вызывает изменения на шине С не сразу, а только через некоторое время (это объясняется задержками на каждом шаге). Следовательно, даже если один из входных регистров изменяется, новое значение будет сохранено

в регистре задолго до того, как старое (и уже неправильное) значение этого регис­тра, помещенное на шину В, сможет достичь АЛУ.

Для такой разработки требуется жесткая синхронизация и довольно длинный

цикл; должно быть известно минимальное время прохождения сигнала через АЛУ; регистры должны загружаться из шины С очень быстро. Если подойти к этому вопросу с особым вниманием и осторожностью, можно сделать так, чтобы тракт данных функционировал правильно.

Цикл тракта данных можно разбить на подциклы. Начало подцикла 1 запуска­ется задним фронтом синхронизирующего сигнала. Ниже показано, что происхо­дит во время каждого из подциклов. В скобках приводится длина подцикла.

  1. Устанавливаются сигналы управления (Aw).

  2. Значения регистров загружаются на шину В (Ах).

  3. Происходит работа АЛУ и схемы сдвига (Ду).

  4. Результаты проходят по шине С обратно к регистрам (Дг).

На нарастающем фронте следующего цикла результаты сохраняются в регистрах.

Никаких внешних сигналов, указывающих на начало и конец подцикла и сооб­щающих АЛУ, когда нужно начинать работу и когда нужно передавать результаты на шину С, нет. В действительности АЛУ и схема сдвига работают постоянно. Одна­ко их входные сигналы недействительны в течение периода Aw+Дх Точно так же их выиодные сигналы недействительны в течение периода Aw+ Дх+Ду. Единствен­ными внешними сигналами, управляющими трактом данных, являются задний фронт синхронизирующего сигнала, с которого начинается цикл тракта данных, и нарастающий фронт синхронизирующего сигнала, который загружает регистры из шины С. Границы подциклов определяются толоко временем прохождения сигна­ла, поэтому разработчики тракта данных должны все очень четко рассчитать.

Работа памяти

Наша машина может взаимодействовать с памятью двумя способами: через порт с пословной адресацией (32-битный) и через порт с байтовой адресацией (8-бит­ный). Порт с пословной адресацией управляется двумя регистрами; MAR (Memory Address Register—регистр адреса ячейки памяти) и MDR (Memory Data Register— информационный регистр памяти), которые показаны на рис. 4.1. Порт с байтовой адресацией управляется регистром PC, который записывает 1 байт в 8 младших разрядов регистра MBR (Memory Bufer 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.

Как уже было сказано выше, данные, считанные из памяти через 8-битный порт, сохраняются в 8-битном регистре MBR. Этот регистр может быть скопирован на шину В двумя способами: со знаком и без знака. Когда требуется значение без зна­ка, 32-битное слово, помещаемое на шину В, содержит значение MBR в младших 8 битах и нули в остальных 24 битах. Значения без знака нужны для индексирова­ния таблиц или для получения целого 16-битного числа из двух последователь­ных байтов (без знака) в потоке команд.

Другой способ превращения 8-битного регистра MBR в 32-битное слово — рас­сматривать его как значение со знаком между -128 и +127 и использовать это зна­чение для порождения 32-битного слова с тем же самым численным значением.

Это преобразование делается путем дублирования знакового бита (самого левого

бита) регистра MBR в верхние 24 битовые позиции шины В. Такой процесс назы­вается расширением по знаку или знаковым расширением Если выбран данный параметр, то либо все старшие 24 бита примут значение 0, либо все они примут значение 1, в зависимости от того, каков самый левый бит регистра MBR: 0 или 1.

В какое именно 32-битное значение (со знаком или без знака) превратится 8-битное значение регистра MBR, определяется тем, какой из двух сигналов управ­ления (две белые стрелки под регистром MBR на рис. 4.1) установлен. Прямо­угольник, обозначенный на рисунке пунктиром, показывает способность 8-битного

регистра MBR действовать в качестве источника 32-битных слов для шины В. Микрокоманды

Для управления трактом данных, изображенным на рис. 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 из которых не нужны. У разработчиков коммерческих моделей,

возможно, было бы большое желание избавиться от одного из регистров, чтобы

обойтись 3 битами. Однако мы как ученые предпочитаем иметь один лишний бит, но при этом получить более ясную и простую разработку.

Биты 9

3

8

9

3

4

NEXTADDRESS

J М Р С

J

А

М

N

J А М

Z

S L L

8

S R

А

1

Fo

Fi

Е

N

А

Е N

В

I

N

V

А

I

N

С

Н

О

с

т

О S

с

р р

L V

S

р

с

м

D

R

М А R

W

R I

Т

Е

R Е А D

F Е Т С н

Шина В

' V '

Addr

V

JAM

... у ALU

V

с

Mem

в

Регистры шины В

0-MDR

5 = LV

1 =PC

6 = CPP

2 = MBR

7 = TOS

3 = MBRU

8 = OPC

4 = SP

9-15-нет

Рис. 4.4. Формат микрокоманды для Мю-1

Теперь мы можем управлять трактом данных с помощью 9+4+8+2+1=24 сигна­лов, следовательно, нам требуется 24 бита. Однако эти 24 бита управляют трактом данных только в течение одного цикла. Задача управления — определить, что нуж­но делать в следующем цикле. Чтобы включить это в разработку контроллера, мы создадим формат для описания операций, которые нужно выполнить, используя

24 бита управления и два дополнительных поля поле NEXT_ADDRESS (следу­ющий адрес) и поле JAM. Содержание каждого из этих полей мы обсудим позже. На рис. 4.4 изображен один из возможных форматов. Он разделен на следующие

6 групп, содержащие 36 сигналов'

  • Addr — содержит адрес следующей потенциальной микрокоманды.

  • JAM — определяет, как выбирается следующая микрокоманда.

  • ALU — функции АЛУ и схемы сдвига.

  • С — выбирает, какие регистры записываются из шины С.

  • Mem — функции памяти.

4 В — выбирает источник для шины В (как он кодируется, было показано выше)

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

Управление микрокомандами: Mic-1

До сих пор мы рассказывали о том, как происходит управление трактом данных, но мы еще не касались того, каким образом решается, какой именно сигнал управ­ления и на каком цикле должен запускаться. Для этого существует контроллер последовательности, который отвечает за последовательность операций, необхо­димых для выполнения одной команды.

Контроллер последовательности в каждом цикле должен выдавать следующую информацию:

  1. Состояние каждого сигнала управления в системе.

  2. Адрес микрокоманды, которая будет выполняться следующей.

Рисунок 4.5 представляет собой подробную диаграмму полной микроархитек­туры нашей машины, которую мы назовем Mic-1. На первый взгляд она может

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

разберетесь во всех прямоугольниках и линиях, изображенных на этом рисунке, вам легче будет понять структуру микроархитектурного уровня. Диаграмма со­стоит из двух частей: тракта данных (слева), который мы уже подробно обсудили, и блока управления (справа), который мы рассмотрим сейчас.

Самой большой и самой важной частью блока управления является управляю­щая память. Удобно рассматривать ее как память, в которой хранится полная мик­ропрограмма, хотя иногда она реализуется в виде набора логических вентилей. Мы

будем называть ее управляющей памятью, чтобы не путать с основной памятью,

доступ к которой осуществляется через регистры MBR и MDR. Функционально управляющая память представляет собой память, которая содержит микрокоман­ды вместо обычных команд. В нашем примере она содержит 512 слов, каждое из

которых состоит из одной 32-битной микрокоманды с форматом, изображенным

на рис. 4.4. В действительности не все эти слова нужны, но по ряду причин нам требуются адреса для 512 отдельных слов.

Управляющая память отличается от основной памяти тем, что команды, храня­щиеся в основной памяти, выполняются в порядке адресов (за исключением ветвле­ний), а микрокоманды — нет. Увеличение счетчика команд в листинге 2.1 означа­ет, что команда, которая будет выполняться после текущей, — это команда, которая идет вслед за текущей в памяти. Микропрограммы должны обладать большей гиб­костью (поскольку последовательности микрокоманд обычно короткие), поэтому они не обладают этим свойством. Вместо этого каждая микрокоманда сама указы­вает на следующую микрокоманду.

Поскольку управляющая память функционально представляет собой ПЗУ, ей

нужен собственный адресный регистр и собственный регистр данных. Ей не требу­ются сигналы чтения и записи, поскольку здесь постоянно происходит процесс счи­тывания. Мы назовем адресный регистр управляющей памяти МРС (Microprogram Counter — микропрограммный счетчик). Название не очень подходящее, по­скольку микропрограммы не упорядочены явным образом и понятие счетчика тут неуместно, но мы не можем пойти против традиций. Регистр данных мы назовем MIR (Microinstruction Register — регистр микрокоманд). Он содержит текущую микрокоманду, биты которой запускают сигналы управления, влияющие на рабо­ту тракта данных.

Сигналы управления памятью (rd, wr, fetch)

<=

МАЯ

Декодер с 4 входами и 9 выходами

тип

МРС Ш 11111II

PC

^1

J

Управляющая память объемом 512x36 битов для хранения микропрограмм

LV

1 I

JMPC

MIR

CPP t=H

Addr |J| АЛУ I С |М|В

TOS \=d

OPC

1 E

JAMN/JAMZ

алу

Шина В N