ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.12.2021
Просмотров: 6735
Скачиваний: 8
238 Глава 4. Микроархитектурный уровень
Значения этих 29 сигналов управления определяют операции для одного цик-
ла тракта данных. Цикл состоит из передачи значений регистров на шину В, про-
хождения этих сигналов через АЛУ и схему сдвига, передачи полученных резуль-
татов на шину С и записи их в нужный регистр (регистры). Кроме того, если
установлен сигнал считывания данных, то в конце цикла после загрузки регистра
MAR начинается работа памяти. Данные из памяти помещаются в MBR или MDR
в конце
следующего
цикла, а использоваться эти данные могут в цикле, который
идет
после
него. Другими словами, если считывание из памяти через любой из пор-
тов начинается в конце цикла к, то полученные данные еще не могут использо-
ваться в цикле к+1
(ТОЛЬКО В
цикле к+2 и позже).
Этот процесс объясняется на рис. 4.2. Сигналы управления памятью выдаются
только после загрузки регистров MAR и PC, которая происходит на нарастающем
фронте синхронизирующего сигнала незадолго до конца цикла 1. Мы предполо-
жим, что память помещает результаты на шину памяти в течение одного цикла,
поэтому регистры MBR и (или) MDR могут загружаться на следующем нарастаю-
щем фронте вместе с другими регистрами.
Другими словами, мы загружаем регистр MAR в конце цикла тракта данных и
запускаем память сразу после этого. Следовательно, мы не можем ожидать, что
результаты считывания будут в регистре MDR в начале следующего цикла, осо-
бенно если длительность импульса небольшая. Этого времени будет недостаточ-
но. Поэтому между началом считывания из памяти и использованием этого ре-
зультата должен помещаться один цикл. Однако во время этого цикла может
выполняться не только передача слова из памяти, но и другие операции.
Предположение о том, что работа памяти занимает один цикл, эквивалентно
предположению, что количество успешных обращений в кэш-память составляет
100%. Подобное предположение никогда не может быть истинным, но мы не будем
здесь рассказывать о циклах памяти переменной длины, поскольку это не входит
в задачи данной книги.
Так как регистры MBR и MDR загружаются на нарастающем фронте син-
хронизирующего сигнала вместе с другими регистрами, они могут считывать во
время циклов, в течение которых осуществляется передача нового слова из памя-
ти. Они возвращают старые значения, поскольку прошло еще недостаточно време-
ни для того, чтобы поменять их на новые. Здесь нет никакой двусмысленности: до
тех пор пока новые значения не загрузятся в регистры MBR и MDR на нарастаю-
щем фронте сигнала, предыдущие значения находятся там и могут использовать-
ся. Отметим, что считывания могут проходить одно за другим, то есть в двух по-
следовательных циклах (поскольку сам процесс считывания занимает только один
цикл). Кроме того, обе памяти могут действовать в одно и то же время. Однако
попытка чтения и записи одного и того же байта одновременно приводит к не-
определенным результатам.
Выходной сигнал шины С можно записывать сразу в несколько регистров, од-
нако нежелательно передавать значения более одного регистра на шину В. Немного
расширив схемотехнику, мы можем сократить количество битов, необходимых для
выбора одного из возможных источников для запуска шины В. Существует только
Пример микроархитектуры
239
9 входных регистров, которые могут запустить шину В (регистры MBR со знаком
и без знака учитываются отдельно) Следовательно, мы можем закодировать ин-
формацию для шины В в 4 бита и использовать декодер для порождения 16 сигна-
лов управления, 7 из которых не нужны. У разработчиков коммерческих моделей,
возможно, было бы большое желание избавиться от одного из регистров, чтобы
обойтись 3 битами. Однако мы как ученые предпочитаем иметь один лишний бит,
но при этом получить более ясную и простую разработку.
Биты 9 3 8 9 3 4
NEXT_ADDRESS
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
Е
Т
С
н
Шина В
Addr
JAM
ALU
Mem
Регистры
0-MDR
1 =PC
2 = MBR
3 = MBRU
4 = SP
шины В
5 = LV
6 = CPP
7 = TOS
8 = OPC
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. Подобные пересечения на диаграм-
мах часто соответствуют пересечениям проводов на микросхемах. Они сильно за-
трудняют разработку и их лучше сводить к минимуму.
2 4 0 Глава 4. Микроархитектурный уровень
Управление микрокомандами: Mic-1
До сих пор мы рассказывали о том, как происходит управление трактом данных,
но мы еще не касались того, каким образом решается, какой именно сигнал управ-
ления и на каком цикле должен запускаться. Для этого существует
контроллер
последовательности,
который отвечает за последовательность операций, необхо-
димых для выполнения одной команды.
Контроллер последовательности в каждом цикле должен выдавать следующую
информацию:
1. Состояние каждого сигнала управления в системе.
2. Адрес микрокоманды, которая будет выполняться следующей.
Рисунок 4.5 представляет собой подробную диаграмму полной микроархитек-
туры нашей машины, которую мы назовем
Mic-1.
На первый взгляд она может
показаться внушительной, но тем не менее ее нужно подробно изучить. Если вы
разберетесь во всех прямоугольниках и линиях, изображенных на этом рисунке,
вам легче будет понять структуру микроархитектурного уровня. Диаграмма со-
стоит из двух частей: тракта данных (слева), который мы уже подробно обсудили,
и блока управления (справа), который мы рассмотрим сейчас.
Самой большой и самой важной частью блока управления является
управляю-
щая память.
Удобно рассматривать ее как память, в которой хранится полная мик-
ропрограмма, хотя иногда она реализуется в виде набора логических вентилей. Мы
будем называть ее управляющей памятью, чтобы не путать с основной памятью,
доступ к которой осуществляется через регистры MBR и MDR. Функционально
управляющая память представляет собой память, которая содержит микрокоман-
ды вместо обычных команд. В нашем примере она содержит 512 слов, каждое из
которых состоит из одной 32-битной микрокоманды с форматом, изображенным
на рис. 4.4. В действительности не все эти слова нужны, но по ряду причин нам
требуются адреса для 512 отдельных слов.
Управляющая память отличается от основной памяти тем, что команды, храня-
щиеся в основной памяти, выполняются в порядке адресов (за исключением ветвле-
ний), а микрокоманды — нет. Увеличение счетчика команд в листинге 2.1 означа-
ет, что команда, которая будет выполняться после текущей, — это команда, которая
идет вслед за текущей в памяти. Микропрограммы должны обладать большей гиб-
костью (поскольку последовательности микрокоманд обычно короткие), поэтому
они не обладают этим свойством. Вместо этого каждая микрокоманда сама указы-
вает на следующую микрокоманду.
Поскольку управляющая память функционально представляет собой ПЗУ, ей
нужен собственный адресный регистр и собственный регистр данных. Ей не требу-
ются сигналы чтения и записи, поскольку здесь постоянно происходит процесс счи-
тывания. Мы назовем адресный регистр управляющей памяти
МРС (Microprogram
Counter — микропрограммный счетчик).
Название не очень подходящее, по-
скольку микропрограммы не упорядочены явным образом и понятие счетчика тут
неуместно, но мы не можем пойти против традиций. Регистр данных мы назовем
MIR (Microinstruction Register — регистр микрокоманд).
Он содержит текущую
микрокоманду, биты которой запускают сигналы управления, влияющие на рабо-
ту тракта данных.
Пример микроархитектуры
241
Сигналы управления памятью (rd, wr, fetch)
Декодер с 4 входами
и 9 выходами
тип
Управляющая память
объемом 512x36 битов
для хранения
микропрограмм
Addr | J | АЛУ I С |М|В
Сигналы
управления
1-битный триггер
Схема сдвигай
Разрешающий
сигнал
на шину В
t
Запись
сигнала
с шины С
в регистр
Рис.
4.5. Полная диаграмма микроархитектуры Mic-1
Регистр MIR, изображенный на рис 4 5, содержит те же шесть групп сигналов,
которые показаны на рис 4.4. Группы Addr и J (то же, что JAM) контролируют
выбор следующей микрокоманды Мы обсудим их чуть позже Группа ALU содер-
жит 8 битов, которые выбирают функцию АЛУ и запускают схему сдвига Биты С
загружают отдельные регистры из шины С Сигналы М управляют работой памяти
Наконец, последние 4 бита запускают декодер, который определяет, значение
какого регистра будет передано на шину В В данном случае мы выбрали декодер,
который содержит 4 входа и 16 выходов, хотя имеется всего 9 разных регистров
В более проработанной модели мог бы использоваться декодер, имеющий 4 входа
и 9 выходов Мы используем стандартную схему, чтобы не разрабатывать свою
собственную Использовать стандартную схему гораздо проще, и кроме того, вы
сможете избежать ошибок Ваша собственная микросхема займет меньше места,
2 4 2 Глава 4. Микроархитектурный уровень
но на ее разработку потребуется довольно длительное время, к тому же вы можете
построить ее неправильно.
Схема, изображенная на рис. 4.5, работает следующим образом. В начале каж-
дого цикла (задний фронт синхронизирующего сигнала на рис. 4.2) в регистр MIR
загружается слово из управляющей памяти, которая на рисунке отмечена буква-
ми МРС. Загрузка регистра MIR занимает период Да;, то есть первый подцикл
(см. рис. 4.2).
Когда микрокоманда попадает в MIR, в тракт данных поступают различные
сигналы. Значение определенного регистра помещается на шину В, а АЛУ узнает,
какую операцию нужно выполнять. Все это происходит во время второго подцикла.
После периода
Aw+Ax
входные сигналы АЛУ стабилизируются.
После периода Дг/ стабилизируются сигналы АЛУ N и Z и выходной сигнал
схемы сдвига. Затем значения N и Z сохраняются в двух 1-битных триггерах. Эти
биты, как и все регистры, которые загружаются из шины С и из памяти, сохраня-
ются на нарастающем фронте синхронизирующего сигнала, ближе к концу цикла
тракта данных. Выходной сигнал АЛУ не сохраняется, а просто передается в схе-
му сдвига. Работа АЛУ и схемы сдвига происходит во время подцикла 3.
После следующего интервала, Дг, выходной сигнал схемы сдвига, пройдя через
шину С, достигает регистров. Регистры загружаются в конце цикла на нарастаю-
щем фронте синхронизирующего сигнала (см. рис. 4.2). Во время подцикла 4 про-
исходит загрузка регистров и триггеров N и Z. Он завершается сразу после нарас-
тающего фронта, когда все значения сохранены, результаты предыдущих операций
памяти доступны и регистр МРС загружен. Этот процесс продолжается снова и сно-
ва, пока вы не устанете и не выключите компьютер.
Микропрограмме приходится не только управлять трактом данных, но и опре-
делять, какая микрокоманда должна быть выполнена следующей, поскольку они
не упорядочены в управляющей памяти. Вычисление адреса следующей микроко-
манды начинается после загрузки регистра MIR. Сначала в регистр МРС копиру-
ется 9-битное поле NEXT_ADDRESS (следующий адрес). Пока происходит копи-
рование, проверяется поле JAM Если оно содержит значение 000, то ничего больше
делать не нужно; когда копирование поля NEXT_ADDRESS завершится, регистр
МРС укажет на следующую микрокоманду.
Если один или несколько бит в поле JAM равны 1, то требуются еще некоторые
действия. Если бит JAMN равен 1, то триггер N соединяется через схему ИЛИ со
старшим битом регистра МРС. Если бит JAMZ равен 1, то триггер Z соединяется
через схему ИЛИ со старшим битом регистра МРС. Если оба бита равны 1, они оба
соединяются через схему ИЛИ с тем же битом А теперь объясним, зачем нужны
триггеры N и Z. Дело в том, что после нарастающего фронта сигнала (и вплоть до
заднего фронта) шина В больше не запускается, поэтому выходные сигналы АЛУ
уже не могут считаться правильными. Сохранение флагов состояния
АЛУ
в реги-
страх N и Z делает правильные значения стабильными и доступными для вычис-
ления регистра МРС, независимо от того, что происходит вокруг АЛУ.
На рис. 4.5 схема, которая выполняет это вычисление, называется «старший
бит». Она вычисляет следующую булеву функцию:
F = (0AMZ И
Z)
ИЛИ QAMN И N)) ИЛИ NEXT_ADDRESS[8]