Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВМСС-всё(ЭКЗАМЕН).docx
Скачиваний:
42
Добавлен:
09.12.2018
Размер:
8.84 Mб
Скачать

5.4. Архитектура операционных устройств.

Все операционные устройства в процессорах семейства 16-битные устройства с фиксированной точкой. Почти все операции подразумевают представление знаковых чисел в форме «дополнения до двух». Остальные же используют беззнаковые числа или просто строки битов. Специальная поддержка имеется для организации многословных вычислений и блочной плавающей арифметики. Некоторые нюансы работы с форматами будут пояснены в разделах описания архитектур операционных устройств.

Формат «дополнения до двух» это обычный дополнительный код в формате дроби 1.15. В нём левый бит числа обозначает его знак, а 15 оставшихся бит представляют числа от -1 до почти +1 (почти из-за несимметричности представления знаковых чисел).

Иллюстрация:

Принятое Формат 1.15 Десятичное

шестнадцатиричное значение

обозначение

0х0001 0.000000000000001 0.000031

0х7FFF 0.111111111111111 0.999969

0хFFFF 1.111111111111111 -0.000031

0х8000 1.000000000000000 -1.000000

5.4.1. Арифметико-логическое устройство.

По набору операций ALU в процессорах семейства абсолютно стандартно. Единственным дополнением следует считать включение в состав устройства специальной логической схемы для организации многоциклового деления.

Структурная схема ALU показана на рис.5.6.

ALU имеет три группы 16-битных регистров, доступных для программиста: X, Y – регистры операндов и R – регистр результата. ALU использует входной сигнал переноса (CI), который соответствует биту переноса в регистре признаков результата («арифметического состояния» - ASTAT). ALU генерирует шесть признаков результата («статусных сигналов»):

- AZ – нулевой результат;

- AN – отрицательный результат;

- AC – перенос;

- AV – переполнение разрядной сетки;

- AS – знак результата;

- AQ – состояние частного.

Установка признаков происходит в конце командного цикла в регистре ASTAT.

Входной порт X операционной схемы может принимать данные из двух источников: из регистров AX или шины результата (R). Шина результатов соединяет выходные регистры всех операционных устройств, позволяя им быть непосредственными источниками операндов инструкций. Блок регистров AX состоит из 2-х регистров: AX0 и AX1. Эти регистры читаемы и могут быть записаны через шину DMD. Выход блока регистров AX таков, что один из них может обеспечивать подачу операнда для схемы ALU, в то время как другой может использоваться для записи в память через шину DMD.

Входной порт Y операционной схемы может принимать данные из двух источников: из набора регистров AY или из регистра обратной связи AF. Блок регистров AY состоит из 2-х регистров: AY0 и AY1. Эти регистры читаемы и могут быть записаны через шину DMD. Выход блока регистров AY таков, что один из них может обеспечивать подачу операнда для схемы ALU, в то время как другой может использоваться для записи в память через шину DMD.

Результат работы операционной схемы ALU поступает либо в регистр обратной связи AF – внутренний регистр ALU, который затем можно использовать результат непосредственно как операнд Y, либо в регистр результата AR. Регистр результата AR может записываться через шину DMD или через шину результатов R. Он также непосредственно загружаем через шину DMD.

Набор команд позволяет осуществлять чтение регистров ALU через шину PMD, но при этом нужно использовать устройство обмена между шинами DMD/PMD.

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

Внимание! ALU содержит два полных набора операционных регистров AX0, AX1, AY0, AY1, AR и AF, что показано на рис.5.6. как «тень». В каждый момент времени работы процессора доступен лишь один набор. Другой набор регистров может быть сделан активным для очень быстрого переключения контекстов, например при обработке прерывания. Это означает, что новая задача, такая как обработка прерывания, может быть выполнена без запоминания текущего состояния регистров. Выбор «первичного» или «вторичного» набора регистров определяется младшим битом в регистре состояния (режима работы и статуса) процессора MSTAT. Если в этом бите 0, то используется «первичный» набор регистров, а если 1, то «вторичный».

Список функций ALU:

R = X + Y;

R = X + Y + CI - сложение с переносом;

R = X – Y

R = X – Y – CI – 1 - вычитание с заёмом;

R = Y – X;

R = Y – X – CI – 1;

R = – X;

R = – Y;

R = Y + 1;

R = Y – 1;

R = X;

R = Y;

R = 0 - обнуление (очистка) результата;

R = ABS (X) - результат равен абсолютному значению X;

R = X AND Y - поразрядное логическое И;

R = X OR Y - поразрядное логическое ИЛИ;

R = X XOR Y - поразрядное логическое «исключающее ИЛИ» (сумма по модулю 2);

R = NOT X - поразрядная инверсия X;

R = NOT Y - поразрядная инверсия Y.

Список инструкций стандартизован с подавляющим большинством простых микропрограммируемых процессоров и RISC-процессоров.

Особые режимы.

Регистр AR имеет режим работы, при котором он после операции автоматически устанавливается в максимальное положительное или максимальное отрицательное значение (режим «насыщения»). Этот режим задается установкой бита 3 регистра MSTAT. При включении режима значение, получаемое в AR, зависит от комбинации значений флагов AC и AV, сгенерированных ALU в текущем цикле:

Переполнение (AV) Перенос (AC) Содержимое AR

0 0 по операции ALU

0 1 по операции ALU

1 0 0111111111111111

1 1 1000000000000000

(Внимание! Забегаем вперёд! Реализация режима «насыщения» существенно отличается от аналогичного режима MAC, где режим устанавливается в самой команде.) Регистр AF не подчиняется режиму «насыщения».

Режим «защёлки» переполнения ALU, устанавливаемый битом 2 регистра MSTAT, приводит к тому, что флаг переполнения AV сохраняет установленное по переполнению значение, несмотря на то, что следующие команды могли не генерировать переполнение. Флаг AV может быть очищен только прямой записью 0 через шину DMD.

Функция деления (не операция, а по сути дела подпрограмма!) реализуется дополнительной сдвиговой схемой, не показанной на рис.5.6. Деление обеспечивается реализацией двух «примитивов деления», которые поддерживают алгоритм деления без восстановления остатка. Деление может быть знаковым или беззнаковым, но делимое и делитель должны иметь один тип.

Стандартное деление (с одинарной точностью) предполагает 32-битное делимое и 16-битный делитель и выполняется за 16 командных циклов. Также могут быть вычислены частные меньшей и большей разрядности при некоторых коррекциях алгоритма. Делитель может располагаться в AX0, AX1 или в регистре R любого операционного устройства. Старшая часть знакового делимого может располагаться в AY1 или в AF. Старшая часть беззнакового делимого должна располагаться только в AF. Младшая часть делимого должна располагаться только в AY0. По завершении операции частное находится в AY0.

Логические схемы «примитивов деления» DIVS и DIVQ показаны на рис.5.7. Первая из них выполняется только один раз (один цикл) и только в начале деления знаковых чисел. Вторая (DIVQ) выполняется 15 раз после первой или 16 раз при выполнении знакового или беззнакового деления соответственно. Поскольку при беззнаковом делении операция DIVS не используется, то вначале флаг AQ (признак знака частичного остатка) должен быть принудительно сброшен в 0.

Проанализируйте работу приведённых схем в соответствии с алгоритмом деления без восстановления остатка самостоятельно!

Схемы корректно формируют в случае необходимости признак переполнения AV.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]