|
Тема 4.2. Пример микроархитектуры: управление микрокомандамиВ результате изучения данной темы Вы будете:
Для примера будет рассмотрена несложная микроархитектура, которая послужит отправной точкой в описании основных принципов управления командами и последовательности их выполнения. Тракт данных Тракт данных – это часть центрального процессора, состоящая из АЛУ и его входов и выходов (Рис. 4.6). Тракт данных нашей микроархитектуры схож с трактами данных большинства компьютеров. Он содержит ряд 32-разрядных регистров, которым приписаны символические названия (например, PC, SP, MDR). Содержание большинства регистров передается на шину В. Выходной сигнал АЛУ запускает схему сдвига, а затем шину С. Значение из шины С может записываться в один или несколько регистров одновременно. Рис. 4.6. Тракт данных микроархитектуры, рассматриваемой в качестве примера АЛУ содержит два входа для данных: левый вход (А) и правый вход (В). С левым входом связан регистр временного хранения Н. С правым входом связана шина В, в которую могут поступать значения из одного из девяти источников, что показано с помощью девяти серых стрелок, примыкающих к шине. В регистр Н может поступать функция АЛУ, которая проходит через правый вход (из шины В) к выходу АЛУ. Одна из таких функций – сложение входных сигналов АЛУ, при этом сигнал ENA отрицается, и левый вход получает значение 0. Если к значению шины В прибавить 0, это значение не изменится. Затем результат проходит через схему сдвига (также без изменений) и сохраняется в регистре Н. Данное АЛУ идентично тому, которое изображено на Рис. 3.12 и Рис. 3.13. Его функционирование зависит от линий управления. На Рис. 4.6 перечеркнутая стрелочка с цифрой 6 слева от АЛУ указывает на наличие шести линий управления. Из них F0 и F1 служат для определения операции, ENA и ENB –для разрешения входных сигналов А и В соответственно, INVA – для инверсии левого входа и INC – для прибавления единицы к результату. Некоторые комбинации показаны в Таблица 4.3. В данной таблице знак «+» означает арифметический плюс, а знак «-» – арифметический минус, поэтому -А означает дополнение А.
Таблица 4.3. Некоторые комбинации сигналов АЛУ и соответствующие им функции Существуют еще две линии управления, которые используются независимо от других. Они служат для управления выходом АЛУ. Линия SSL8 (Shift Left Logical – логический сдвиг влево) сдвигает число влево на один байт, заполняя 8 самых младших двоичных разрядов нулями; линия SRA1 (Shift Right Arithmetic – арифметический сдвиг вправо) сдвигает число вправо на 1 бит, оставляя самый старший двоичный разряд без изменений. Можно считать и записать один и тот же регистр за один цикл. Для этого, например, нужно поместить значение SP на шину В, закрыть левый вход АЛУ, установить сигнал INC и сохранить полученный результат в регистре SP, увеличив, таким образом, его значение на 1 (см. восьмую строку Таблица 4.3). Если один и тот же регистр может считываться и записываться за один цикл, то как при этом предотвратить появление ненужных данных? Дело в том, что процессы чтения и записи проходят в разных частях цикла. Когда в качестве правого входа АЛУ выбирается один из регистров, его значение помещается на шину В в начале цикла и хранится там, на протяжении всего цикла. Затем АЛУ выполняет свою работу и производит результат, который через схему сдвига поступает на шину С. Незадолго до конца цикла, когда значения выходных сигналов АЛУ и схемы сдвига стабилизировались, содержание шины С передается в один или несколько регистров. Одним из этих регистров вполне может быть тот, от которого поступил сигнал на шину В. Точная синхронизация тракта данных делает возможным считывание и запись одного и того же регистра за один цикл. Синхронизация тракта данных Как происходит синхронизация этих действий, показано на Рис. 4.7. Рис. 4.7. Временная диаграмма цикла тракта данных Цикл тракта данных разбивается на подциклы. В начале каждого цикла генерируется короткий импульс. Он может выдаваться тактовым генератором. На заднем фронте импульса устанавливаются биты, которые будут запускать все вентили. Этот подцикл занимает определенный отрезок времени . Затем выбирается регистр, и его значение передается на шину В, на это требуется время . Затем АЛУ и схема сдвига начинают оперировать поступившими к ним данными. После промежутка выходные сигналы АЛУ и схемы сдвига стабилизируются. В течение следующего отрезка результаты проходят по шине С к регистрам, куда они загружаются на нарастающем фронте следующего импульса. Загрузка должна запускаться фронтом сигнала и осуществляться мгновенно, так что даже в случае изменений каких-либо входных регистров изменения в шине С будут происходить только после полной загрузки регистров. На нарастающем фронте импульса регистр, запускающий шину В, приостанавливает свою работу и ждет следующего цикла. На Рис. 4.7 для примера рассмотрены регистры МРС и MIR, а также память. Никаких внешних сигналов, указывающих на начало и конец подцикла и сообщающих АЛУ, когда нужно начинать работу и когда нужно передавать результаты на шину С, нет. В действительности АЛУ и схема сдвига работают постоянно. Однако их входные сигналы недействительны в течение периода . Точно так же их выходные сигналы недействительны в течение периода . Единственными внешними сигналами, управляющими трактом данных, являются задний фронт синхронизирующего сигнала, с которого начинается цикл тракта данных, и нарастающий фронт синхронизирующего сигнала, который загружает регистры из шины С. Границы подциклов определяются только временем прохождения сигнала, поэтому разработчики тракта данных должны все очень четко рассчитать. Работа памяти Рассматриваемая микроархитектура может взаимодействовать с памятью двумя способами: через порт с пословной адресацией (32-битный) и через порт с байтовой адресацией (8-битный). Порт с пословной адресацией управляется двумя регистрами:MAR(Memory Address Register – регистр адреса ячейки памяти) и MDR (Memory Data Register – информационный регистр памяти), которые показаны на Рис. 4.6. Порт с байтовой адресацией управляется регистром PC, который записывает 1 байт в 8 младших разрядов регистраMBR (Memory Buffer Register – буферный регистр памяти).Этот порт может считывать данные из памяти, но не может их записывать в память. Каждый из этих регистров, а также все остальные регистры, запускаются одним изсигналов управления. Белая стрелка под регистром указывает на сигнал управления, который разрешает передавать выходной сигнал регистра на шину В. Регистр MAR не связан с шиной В, поэтому у него нет сигнала разрешения. У регистра Н этого сигнала тоже нет, так как этот регистр является единственным возможным левым входом АЛУ и поэтому всегда разрешен. Черная стрелка под регистром указывает на сигнал управления, который записывает (то есть загружает) регистр из шины С. Поскольку регистр MBR не может загружаться из шины С, у него нет сигнала записи (но зато есть два сигнала разрешения, о которых речь пойдет ниже). Чтобы инициировать процесс считывания из памяти или записи в память, нужно загрузить соответствующие регистры памяти, а затем передать памяти сигнал чтения или записи (он не показан на Рис. 4.6). Регистр 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 и т. д. (Рис. 4.8). Рис. 4.8. Распределение битов регистра MAR в адресной шине Как уже было сказано выше, данные, считанные из памяти через 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.6) установлен. Прямоугольник, обозначенный на рисунке пунктиром, показывает способность 8-битного регистра MBR действовать в качестве источника 32-битных слов для шины В. Микрокоманды Для управления трактом данных, изображенным на Рис. 4.6, нам нужно 29 сигналов. Их можно разделить на пять функциональных групп:
Значения этих 29 сигналов управления определяют операции для одного цикла тракта данных. Цикл состоит из передачи значений регистров на шину В, прохождения этих сигналов через АЛУ и схему сдвига, передачи полученных результатов на шину С и записи их в нужный регистр (регистры). Кроме того, если установлен сигнал считывания данных, то в конце цикла после загрузки регистра MAR начинается работа памяти. Данные из памяти помещаются в MBR или MDR в конце следующего цикла, а использоваться эти данные могут в цикле, который идет после него. Другими словами, если считывание из памяти через любой из портов начинается в конце цикла k, то полученные данные еще не могут использоваться в цикле k+1 (только в цикле k+2 и позже). Выходной сигнал шины С можно записывать сразу в несколько регистров, однако нежелательно передавать значения более одного регистра на шину В. Чтобы сократить количество битов, необходимых для запуска шины B, используется декодер для порождения 16 сигналов управления, 7 из которых не нужны. Таким образом управлять трактом данных можно с помощью 9+4+8+2+1=24 сигналов, следовательно, для этого требуется 24 бита. Однако эти 24 бита управляют трактом данных только в течение одного цикла. Задача управления – определить, что нужно делать в следующем цикле. Чтобы включить это в разработку контроллера, используем формат для описания операций, которые нужно выполнить, используя 24 бита управления и две дополнительных группы сигналов: NEXT_ADDRESS (следующий адрес) и JAM. На Рис. 4.9 изображен один из возможных форматов. Рис. 4.9. Формат микрокоманды Формат микрокоманды, содержащий 36 сигналов, разделен на следующие 6 групп:
Управление микрокомандами Давайте рассмотрим, каким образом решается, какой именно сигнал управления и на каком цикле должен запускаться. Для этого предназначен контроллер последовательности, который отвечает за последовательность операций, необходимых для выполнения одной команды. Контроллер последовательности в каждом цикле должен выдавать следующую информацию:
Рис. 4.10 представляет собой подробную диаграмму полной микроархитектуры. Самой большой и самой важной частью блока управления является управляющая память. Удобно рассматривать ее как память, в которой хранится полная микропрограмма, хотя иногда она реализуется в виде набора логических вентилей. Важно не путать ее с основной памятью, доступ к которой осуществляется через регистры MBR и MDR. Функционально управляющая память представляет собой память, которая содержит микрокоманды вместо обычных команд. В нашем примере она содержит 512 слов, каждое из которых состоит из одной 32-битной микрокоманды с форматом, изображенным на Рис. 4.9. Рис. 4.10. Диаграмма микроархитектуры, рассматриваемой в качестве примера Управляющая память отличается от основной памяти тем, что команды, хранящиеся в основной памяти, выполняются в порядке адресов (за исключением ветвлений), а микрокоманды – нет. Микропрограммы должны обладать большей гибкостью (поскольку последовательности микрокоманд обычно короткие), поэтому каждая микрокоманда сама указывает на следующую микрокоманду. Поскольку управляющая память функционально представляет собой ПЗУ, ей нужен собственный адресный регистр и собственный регистр данных. Для нее не требуются сигналы чтения и записи, поскольку здесь постоянно происходит процесс считывания. Адресным регистром управляющей памяти является МРС (MicroProgram Counter – микропрограммный счетчик). Регистр данных – MIR (MicroInstruction Register – регистр микрокоманд). Он содержит текущую микрокоманду, биты которой запускают сигналы управления, влияющие на работу тракта данных (Рис. 4.9).
В начале каждого цикла (задний фронт синхронизирующего сигнала на Рис. 4.7) в регистр MIR загружается слово из управляющей памяти, которая на рисунке отмечена буквами МРС. Загрузка регистра MIR занимает период , то есть первый подцикл (см. Рис. 4.7). Когда микрокоманда попадает в MIR, в тракт данных поступают различные сигналы. Значение определенного регистра помещается на шину В, а АЛУ узнает, какую операцию нужно выполнять. Все это происходит во время второго подцикла. После периода входные сигналы АЛУ стабилизируются. После периода стабилизируются сигналы АЛУ N и Z и выходной сигнал схемы сдвига. Затем значения N и Z сохраняются в двух 1-битных триггерах. Эти биты, как и все регистры, которые загружаются из шины С и из памяти, сохраняются на нарастающем фронте синхронизирующего сигнала, ближе к концу цикла тракта данных. Выходной сигнал АЛУ не сохраняется, а просто передается в схему сдвига. Работа АЛУ и схемы сдвига происходит во время подцикла 3. После следующего интервала, , выходной сигнал схемы сдвига, пройдя через шину С, достигает регистров. Регистры загружаются в конце цикла на нарастающем фронте синхронизирующего сигнала (см. Рис. 4.7). Во время подцикла 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.10 схема, которая выполняет это вычисление, называется «старший бит». Она вычисляет булеву функцию, которая предназначена для определения адреса следующей микрокоманды:
F = ((JAMZ И Z) ИЛИ (JAMN И N)) ИЛИ NEXT_ADDRESS[8]
Таким образом, регистр МРС может принять только одно из возможных значений:
Других значений не существует. Если старший бит значения NEXT_ADDRESS уже равен 1, нет смысла использовать JAMN или JAMZ.
Отметим, что если все биты JAM равны 0, то адрес следующей команды – просто 9-битный номер в поле NEXT_ADDRESS. Если JAMN или JAMZ равны 1, то существует два потенциально возможных адреса следующей микрокоманды: NEXT_ADDRESS и NEXT_ADDRESS, соединенный операцией ИЛИ с 100h (предполагается, что NEXT_ADDRESS ≤ FFh). Это проиллюстрировано Рис. 4.11. Текущая микрокоманда с адресом 75h содержит поле NEXT_ADDRESS=92h, причем бит JAMZ установлен на 1. Следовательно, следующий адрес микрокоманды зависит от значения бита Z, сохраненного при предыдущей операции АЛУ. Если бит Z равен 0, то следующая микрокоманда имеет адрес 92h. Если бит Z равен 1, то следующая микрокоманда имеет адрес 192h. Рис. 4.11. Микрокоманда с битом JAMZ, равным 1, указывает на две потенциальные последующие микрокоманды Если установлен третий бит в поле JAM – JMPC, то 8 битов регистра MBR поразрядно связываются операцией ИЛИ с 8 младшими битами поля NEXT_ADDRESS из текущей микрокоманды. Результат отправляется в регистр МРС. На Рис. 4.10 значком «ИЛИ» обозначена схема, которая выполняет операцию ИЛИ над MBR и NEXT_ADDRESS, если бит JMPC равен 1, и просто отправляет NEXT_ADDRESS в регистр МРС, если бит JMPC равен 0. Если JMPC равен 1, то младшие 8 битов поля NEXT_ADDRESS равны 0. Старший бит может быть 0 или 1, поэтому значение поля NEXT_ADDRESS обычно 000h или 100h. Возможность выполнять операцию ИЛИ над MBR и NEXT_ADDRESS и сохранять результат в регистре МРС позволяет реализовывать межуровневые переходы. Отметим, что по битам, находящимся в регистре MBR, можно определить любой адрес из 256 возможных. Регистр MBR содержит код операции, поэтому использование JMPC приведет к единственно возможному выбору следующей микрокоманды. Этот метод позволяет осуществлять быстрый переход у функции, соответствующей вызванному коду операции. Подведем итоги
Вопросы для самоконтроля 1. Что такое тракт данных? 2. Расскажите, как происходит синхронизация сигналов тракта данных. 3. Объясните своими словами принципы построения форматов микрокоманд. 4. Индивидуальные задания 1. В приведенной микроархитектуре (Рис. 4.10) требуется 1 нс на установку регистра MIR, 1 нс – на передачу значения регистра на шину В, 3 нс – на запуск АЛУ и схемы сдвига и 1 нс – на передачу результатов обратно в регистры. Длительность синхронизирующего импульса составляет 2 нс. Может ли такая машина работать с частотой 100 МГц? А 150 МГц? _______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 2. На Рис. 4.10 регистр шины В закодирован в 4-битном поле, а шина С представлена в виде битового отображения. Почему? _______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 3. На Рис. 4.10 есть блок «Старший бит». Нарисуйте его схему.
4. Когда в микрокоманде установлено поле JMPC, регистр MBR соединяется операцией ИЛИ с полем NEXT_ADDRESS, чтобы получить адрес следующей микрокоманды. Существуют ли такие обстоятельства, при которых имеет смысл использовать JMPC, если NEXT_ADDRESS - 1FFh? _______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право... Система охраняемых территорий в США Изучение особо охраняемых природных территорий(ООПТ) США представляет особый интерес по многим причинам... Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все... Что делать, если нет взаимности? А теперь спустимся с небес на землю. Приземлились? Продолжаем разговор... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|