Э. Таненбаум - Архитектура компьютера (1127755), страница 78
Текст из файла (страница 78)
Усовершенствованная мицзопрограмма для выполнения команды РОР Разработка уровня микроархитектуры 31 1 Мы видим, что в микрокоманде 11оаб1 значение ЕУ копируется в регистр Н. Это нужно только для того, чтобы сложить Н с МВЮ.1 в микрокоманде 11оаб2. В разработке с двумя шинами нет возможности складывать два произвольных регистра, поэтому один из них сначала нужно скопировать в регистр Н. В 3-шинной архитектуре мы можем сэкономить один цикл, как показано в табл. 4.7. Мы добавили основной цикл к команде 11.0А0, но при этом длина пути не увеличилась и не уменыцилась.
Однако дополнительная шина сокращает общее время выполнения команды с шести циклов до пяти. Теперь мы знаем вторую возможность сокращения длины пути: Переход от 2-шинной н 3-шинной архитектуре. Таблица 4.7. Микропрограмма для выполнения команды 1! ОАО в 3-шинной архитектуре Комментарий Микрокоманде Операции МАЙ = адрес локальной переменной, которую нужно поместить в стек МАИ = МВИЦ+ ЬУ; гб 11ова! МАП = 8Р = Вр и 1 Регистр ВР указывает нв новую вершину стека; подготовка к записи 1!ова2 Увеличение РС нв 1; вызов следующего кода операции; запись вершины стека РС = РС ж 1; 1е1сй; иг 11овсз ТО8 = МОЯ Обновление ТОВ 11овб4 воааб РС = РС+ 1; 1е1ся; до1о(МВН) Регистр МВИ уже содержит код операции; вызов индексного байта Блок выборки команд Обе описанные возможности вполне привлекательны, но чтобы достичь существенного продвижения, требуется нечто более радикальное. Давайте вернемся чуть-чуть назад и рассмотрим обычные составляющие любой команды: поля вызова и декодирования.
Отметим, что в каждой команде могут происходить следующие операции: + значение РС пропускается через АЛУ и увеличивается на 1; + РС используется для вызова следующего байта в потоке команд; + операнды считываются из памяти; + операнды записываются в память; + АЛУ выполняет вычисление, и результаты сохраняются в памяти. Если команда содержит дополнительные поля (для операндов), каждое поле должно вызываться явно, по одному байту за раз. Поле можно использовать только после того, как эти байты будут объединены. При вызове и компоновке поля АЛУ должно для кажлого байта увеличивать РС на единицу, а затем объединять получившийся индекс или смещение.
Когда, помимо выполнения основной работы команды, приходится вызывать и объединять поля этой команды, АЛУ используется практически в каждом цикле. Чтобы объединить основной цикл с какой-нибудь микрокомандой, нужно освободить АЛУ от некоторых задач подобного рода. Для этого можно ввести второе 312 Глава 4. Уровень микроархитектуры АЛУ, хотя полнофункциональное АЛУ в большинстве случаев для этого не потребуется.
Отметим, что АЛУ часто применяется для копирования значения из одного регистра в другой. Эти циклы можно убрать, если ввести дополнительные тракты данных, которые не проходят через АЛУ. Полезно будет, например, создать тракт от ТОБ к М1Ж или от МОК к ТОК, поскольку верхнее слово стека часто копируется из одного регистра в другой. В микроархитектуре М1с-1 с АЛУ можно снять большую часть нагрузки, если создать независимый блок для вызова и обработки команд. Этот блок, который называется блоком выборки команд (1пзггасг1оп РегсЬ Пшц 1Н)), может независимо от АЛУ увеличивать значение РС на 1 и вызывать байты из потока байтов до того, как они понадобятся.
Блок 1Р П содержит схему инкремента, которая по строению гораздо проще, чем полный сумматор. Разовьем эту идею. Блок выборки команд может также объединять 8-разрядные и 16-разрядные операнды, чтобы они могли использоваться сразу, как только потребуются. Это можно осуществить по крайней мере двумя способами; + Блок 1Н5 может интерпретировать каждый код операции, определять, сколько дополнительных полей нужно вызвать, и собирать их в регистр, который будет использоваться основным операционным блоком.
+ Блок 1РП может постоянно предоставлять следующие 8- нли 16-разрядные фрагменты данных независимо от того, имеет это смысл или нет. Тогда основной операционный блок может запрашивать любые данные, которые ему требуются. Рисунок 4.18 иллюстрирует второй способ реализации 1РП. Вместо одного 8-разрядного регистра МВК здесь есть два регистра МВК: 8-разрядный МВК1 и 16-разрядный МВК2.
Блок 1Н) следит за самым последним байтом или байтами, которые поступили в основной операционный блок. Кроме того, он передает следующий байт в регистр МВК, как и в архитектуре М)с-1, только в данном случае он автоматически определяет, когда значение регистра считано, вызывает следующий байт и сразу загружает его в регистр МВК1. Как и в микроархитектуре М1с-1, он имеет два интерфейса с шиной В: МВК1 и МВК10. Первый получает знаковое расширение до 32 битов, второй дополнен нулями.
Регистр МВК2 функционирует точно так же, но содержит следующие 2 байта. Он имеет два интерфейса с шиной В: МВК2 и МВК20, первый из которых расширен по знаку, а второй дополнен до 32 бит нулями. Блок выборки команд отвечает за вызов байтов. Для этого он использует стандартный 4-байтный порт памяти, вызывая полные 4-байтные слова заранее и загружая следующие байты в сдвиговый регистр, который выдает их по одному или по два за раз в том порядке, в котором они вызываются из памяти.
Задача сдвигового регистра — сохранить последовательность поступающих байтов для загрузки в регистры МВК1 и МВК2. МВК1 всегда содержит самый старший байт сдвнгового регистра, а МВК2— 2 старших байта (старшим является левый байт), которые формируют 16-разрядное целое число (см. рис. 4.14, б). Два байта в регистре МВК2 могут быть получены из различных слов памяти, поскольку 1)Ъ'М-команды никак не связаны с границами слов. Разработка уровня микроархитектуры 313 мввг Шина В Запись в регистр РС Рис. 4.18. Блок выборки команд в микроархитекгуре М~с-1 Всякий раз, когда считывается регистр МВВ1, значение сдвигового регистра сдвигается вправо на 1 байт. Всякий раз, когда считывается регистр МВВ2, значение сдвигового регистра сдвигается вправо на 2 байта.
Затем в регистры МВВ1 и МВВ2 загружаются самый старший байт и пара самых старших байтов соответственно. Если к этому моменту в сдвиговом регистре остается достаточно места для целого слова, блок выборки команд начинает цикл обращения к памяти, чтобы считать следующее слово. Мы предполагаем, что когда считывается любой из регистров МВВ, он заполняется к началу следующего цикла, поэтому новое значение можно считывать уже в последующих циклах. Блок выборки команд может быть смоделирован в виде конечного автомата (Е1пйе 81а1е МасЬ1пе, ЕЯМ), как показано на рис. 4.19. Любой конечный автомат характеризуется состояниями (на рисунке это кружочки) и переходами (это дуги от одного состояния к другому). Каждое состояние — это одна из возможных ситуаций, в которой может находиться конечный автомат, Данный конечный автомат имеет семь состояний, которые соответствуют семи состояниям сдвигового регистра, показанного на рис. 4.18.
Эти семь состояний соответствуют количеству байтов, которые находятся в данный момент в регистре (от Ю до 6 включительно). Вызов слова из памяти означает считывание слова из памяти и помещение 4 байт в сдвиговый регистр. Переход МВВ1 происходит, когда выполняется чтение регистра МВВ1, а переход МВК2 — когда выполняется чтение регистра МВВ2. Каждая дуга отражает возможное событие. В нашем конечном автомате возможны три различных события. Первое — чтение одного байта из регистра МВК1. Оно активизирует сдвиговый регистр, самый правый байт в нем исчезает, и осуществляется переход в другое состояние (меньшее на 1).
Второе событие — чтение 31 4 Глава 4. Уровень микроархитектуры 2 байт из регистра МВК2. При этом осуществляется переход в состояние, меньшее на 2 (например, из состояния 2 в состояние О или из состояния 5 в состояние 3). Оба этих перехода вызывают перезагрузку регистров МВК1 и МВК2. Когда конечный автомат переходит в состояния О, 1 или 2, инициируется обращение к памяти, чтобы вызвать новое слово (предполагается, что память уже не занята считыванием предыдущего слова).
При поступлении слова номер состояния увеличивается на 4. Вызов слова из памяти МВй2 Рис. 4.19. Конечный автомат для реализации блока выборки команд Чтобы функционировать правильно, схема выборки команд должна блокироваться в том случае, если от нее требуют произвести какие-то действия, которые она выполнить не может (например, передать значение в МВК2, когда в сдвиговом регистре находится только 1 байт, а память все еще занята вызовом нового слова). Кроме того, блок выборки команд не может выполнять несколько операций одновременно, поэтому вся поступающая информация должна передаваться последовательно.
Наконец, всякий раз, когда изменяется значение РС, блок выборки команд должен обновляться. Все эти детали усложняют работу блока. Однако многие устройства разрабатываются в виде конечных автоматов. Блок выборки команд имеет собственный регистр адреса ячейки памяти, называемый 1МАК и используемый для обращения к памяти, когда нужно вызвать новое слово.
У этого регистра есть специальная схема инкремента, поэтому основному АЛУ не требуется прибавлять 1 к значению РС для вызова следующего слова. Блок выборки команд должен контролировать шину С, чтобы каждый раз при загрузке регистра РС новое значение РС также копировалось в 1МАК. Поскольку новое значение в регистре РС может быть не на границе слова, блок выборки команд должен вызвать нужное слово и скорректировать значение сдвигового регистра соответствующим образом.