Реклама:

Тракт данных - это часть центрального процессора, состоящая из АЛУ (арифметико-логического устройства), его входов и выходов. Тракт данных нашей микроархитектуры показан на рис. 4.1. Хотя этот тракт данных и был оптимизирован для интерпретации ЦУМ-программ, он схож с трактами данных большинства компьютеров. Тракт содержит ряд 32-разрядных регистров, которым мы приписали символические названия (например, РС, 8Р, МЭИ,). Хотя некоторые из этих названий нам знакомы, важно понимать, что эти регистры доступны только на уровне микроархитектуры (для микропрограммы). Им даны такие названия, поскольку они обычно содержат значения, соответствующие переменным с аналогичными названиями на уровне архитектуры команд. Содержание большинства регистров передается на шину В. Выходной сигнал АЛУ управляет схемой сдвига и далее шиной С. Значение с шины С может записываться в один или несколько регистров одновременно. Шину А мы введем позже, а пока представим, что ее нет.

Тракт данных

Рис. 4.1. Тракт данных для микроархитектуры, рассматриваемой в этой главе

Данное АЛУ идентично тому, которое изображено на рис. 3.18 и 3.19. Его функционирование зависит от линий управления. На рис. 4.1 перечеркнутая стрелочка с цифрой 6 сверху указывает на наличие шести линий управления АЛУ. Из них F0 и Ft служат для задания операции, ENA и ENB - для разрешения входных сигналов А и В соответственно, INVA - для инверсии левого входа и INC - для переноса бита в младший разряд, что эквивалентно прибавлению единицы к результату. Однако не все 64 комбинации значений на линиях управления могут быть полезными.

Некоторые комбинации показаны в табл. 4.1. Не все из этих функций нужны для машины IJVM, но многие из них могут пригодиться для полнофункциональной машины (JVM). В большинстве случаев существует несколько возможностей для достижения одного и того же результата. В данной таблице знак плюс (+) означает арифметический плюс, а знак минус (-) - арифметический минус, поэтому -А означает дополнение А.

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

Порядковый номер

Fo

Fi

ENA

ENB

INVA

INC

Функция

А

В

Ä

 

В

А + В

А + В + 1

 

А+ 1

В + 1

В - А

В - 1

 

 

АИВ

А ИЛИ В

-1

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

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

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

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

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

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

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

Тракт данных

Рис. 4.2. Временная диаграмма цикла тракта данных

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

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

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

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

3. Действуют АЛУ и схемы сдвига (Ау).

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

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

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

Функционирование памяти

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

Тракт данных

Рис. 4.3. Распределение битов регистра MAR в адресной шине

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

Другой способ превращения 8-разрядного регистра MBR в 32-разрядное слово - считать его значением со знаком от -128 до +127 включительно и использовать это значение для порождения 32-разрядного слова с тем же самым численным значением. Это преобразование делается путем дублирования знакового (самого левого) бита регистра MBR в верхние 24 битовые позиции шины В. Такой процесс называется расширением по знаку, или знаковым расширением. Если выбран данный параметр, то либо все старшие 24 бита примут значение О, либо все они примут значение 1 в зависимости от того, каков самый левый бит регистра MBR: 0 или 1.

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

Пример микроархитектуры || Оглавление || Микрокоманды