|
Это поле флагов, которое устанавливается по результатам одной единственной команды COMP, которая получает на вход два операнда и сравнивает их, записывая результаты в биты. В итоге получаем поле из 8 битов, которое содержит результаты последних 8 операций COMP, обновляемое со старшего бита. Как пишут разработчики очень эффективно применяется в компьютерной графике при сравнении графических поверхностей на видимость (сравнении их координат).
16. Описание и функции АЛУ. Флаги состояния и режимы работы АЛУ. МАС. Функционирование МАС. Особенности выполнения операций округления и насыщения при работе с ФЗ-операндами. Флаги состояния МАС.
1) Описание и функции АЛУ
Типы операций:
● ФЗ/ПЗ-операции: сложение, вычитание, дуальное сложение/вычитание, среднее;
● ФЗ-операции: сложение с переносом, вычитание с заемом, декремент;
● ПЗ-операции: масштабирование, извлечение мантиссы;
● логические побитовые операции: AND, OR, XOR, NOT;
● функции: модуль числа, мин, макс, клиппирование, сравнение;
● форматные: преобразование ПЗ <-> ФЗ;
● приближенное вычисление обратного числа и квадратного корня.
Принцип функционирования АЛУ: АЛУ читает 1 или 2 входных операнда (регистры РФ) в начале такта. АЛУ записывает 1 или 2 результата в регистр(ы) РФ в конце такта, или просто модифицирует флаги. Один и тот же регистр РФ может выступать в качестве операнда и приемника результата для любой операции АЛУ.
Режимы работы АЛУ. Переключение режима работы АЛУ выполняется путем установки бита ALUSAT в регистре управления MODE1:
● ALUSAT=1 – «режим арифметики с насыщением»;
● ALUSAT=0 – «режим арифметики с циклическим переносом»
2) Флаги состояния и режимы работы АЛУ
Флаг | Определение | Когда устанавливается |
В регистре ASTAT | ||
AZ | Флаг нуля | Результат АЛУ=0, потеря значимости при ПЗ-операции, потеря значимости при преобразовании ПЗ<->ФЗ |
AV | Флаг переполнения | Для ФЗ-операций – по обычным правилам. Для ПЗ-операций – если e>127 |
AN | Флаг отрицательного результата | Для ФЗ и ПЗ операций |
AC | Флаг переноса | Для ФЗ-операций |
AS | Флаг знака входного операнда | Если входной операнд <0 (для операций ABS и MANT) |
AI | Флаг некорректной ПЗ-операции | Входной операнд = NAN Попытка вычесть бесконечности одного знака... |
AF | Флаг ПЗ-операции | Если последняя операция – ПЗ-операция |
CACC | Флаг аккумулирующих сравнений | Только для операции COMP с ФЗ/ПЗ-операндами |
Липкие флаги состояния, на которые влияет выполнение операций АЛУ
Флаг | Определение | Когда устанавливается |
В регистре STKY | ||
AUS | Липкий флаг потери значимости | Только для ПЗ-операций и преобразований ПЗ<->ФЗ |
AVS | Липкий флаг ПЗ-переполнения | Только для ПЗ-операций – если e>127 |
AOS | Липкий флаг ФЗ-переполнения | Только для ФЗ-операций |
AIS | Липкий флаг некорректной ПЗ-операции | Только для ПЗ-операций |
3) МАС. Функционирование МАС
Типы операций:
● ФЗ/ПЗ-операции: умножение, умножение с накоплением (сложением или вычитанием) и округлением результата (опц.);
● округление регистра результата;
● насыщение регистра результата;
● очистка регистра результата.
Принцип функционирования Умножителя. Умножитель читает 2 входных операнда (регистры РФ) в начале такта. Умножитель записывает 1 результат в регистр аккумулятора или в регистр РФ в конце такта и модифицирует флаги. Типы ФЗ-операндов и необходимость округления результата указываются в суффиксе команды. Тип результата соответствует типу входных операндов. Один и тот же регистр РФ может выступать в качестве операнда и приемника результата для любой операции Умножителя.
Особенности перемножения знаковых дробных ФЗ-чисел: Если оба ФЗ-операнда – знаковые дробные числа, то Умножитель автоматически сдвигает результата влево на 1 бит чтобы удалить избыточный знаковый бит.
4) Особенности выполнения операций округления и насыщения при работе с ФЗ-операндами
Округление результата с фиксированной точкой происходит или как часть операций умножение и умножение/накопление, или как явная операция регистра MR. Операция округления применяется только к дробным результатам (целые результаты не округляются), 80разрядное число в MR округляется к ближайшему за счет бита 32, т. е. границы MR1MR0. Округленный результат из MR1 может быть отправлен в регистровый файл или в тот же самый регистр MR. Для округления дробного результата к нулю (усечение) вы пересылаете неокругленный результат из MR1, отбрасывая 32 младших бита (MR0).
Операция насыщения устанавливает максимальное значение в MR, если содержимое MR переполнено. Переполнение происходит, когда значение в MR больше максимального значения данного формата (беззнаковый или в дополнительном коде, целый или дробный).
Результат насыщения MR можно поместить или в регистровый файл, или назад в тот же самый регистр MR.
5) Флаги состояния МАС.
Флаг | Определение | Когда устанавливается |
В регистре ASTAT | ||
MN | Флаг потери значимости | Для ФЗ-операций – если e<-126. Для ФЗ-операций с дробными числами: знаковые: MR2=MR1=0 (или 1), MR0<>0; беззнаковые: MR2=MR1=0, MR0<>0. |
MV | Флаг переполнения | Для ПЗ-операций – если e>127. Для ФЗ-операций – см. выше. |
MU | Флаг отрицательного результата | Для ФЗ и ПЗ операций |
MI | Флаг некорректной ПЗ-операции | Для ПЗ-операций если один из операндов=NAN или выполняется Infinity*Zero |
Липкие флаги состояния, на которые влияет выполнение операций Умножителя
Флаг | Определение | Когда устанавливается |
В регистре STKY | ||
MOS | Липкий флаг ФЗ-переполнения | Только для ФЗ-операций |
MVS | Липкий флаг ПЗ-переполнения | Только для ПЗ-операций |
MUS | Липкий флаг потери значимости | Для ФЗ- и ПЗ-операций |
MIS | Липкий флаг некорректной ПЗ-операции | Только для ПЗ-операций |
17. Сдвигатель. Функционирование сдвигателя. Выделение и депонирование битовых полей. Флаги состояния сдвигателя. Организация многофункциональных вычислений. Ограничения.
1) Типы операций (только с ФЗ-данными)
Сдвигатель выполняет:
● сдвиги;
● операции с битом (установка, сброс, инверсия, тестирование);
● операции над битовым полем (выделение и депонирование);
● поддержка преобразования ФЗ <-> ПЗ.
2) Функционирование
Сдвигатель читает от 1 до 3 входных операнда (регистры регистрового файла (РФ) или константы в инструкции) в начале такта: X – операнд, который обрабатывается, Y – операнд, специфицирующий абсолютные значения величины сдвига, длины битовых полей или позиции битов, Z – операнд, который обрабатывается или модифицируется.
Сдвигатель записывает 1 результат в регистр РФ в конце такта и модифицирует флаги. Один и тот же регистр РФ может выступать в качестве операнда и приемника результата для любой операции Сдвигателя.
Некоторые операции Сдвигателя генерируют 8- или 6-битный результат, которые помещается в младшие биты ФЗ-поля, а знаковые бит результата распространяется на «свободные» старшие разряды.
3) Выделение и депонирование битовых полей
a. Операция депонирования битового поля (по сути копирование куска бит длиной len6 и вставка его начиная с позиции bit6, из всего 40-битного регистра используются только 32 старших бита, поэтому если задать bit6 = 0, то выделенный кусок будет вставлен начиная с бита под номером 8)
Пример:
b. Операция выделения битового поля (копирование битов в количестве len6, начиная с позиции bit6, вставка их в начало указанного регистра)
4) Флаги состояния, на которые влияет выполнение операций Сдвигателя (только регистр ASTAT)
Флаг | Определение | Когда устанавливается |
SV | Флаг переполнения | когда значащие биты выдвигаются влево за границы ФЗ-поля; в операции с битом указан номер бита > 31; битовое поле частично или полностью выходит влево за границы ФЗ-поля |
SZ | Флаг нулевого результата | результат равен нулю; проверяемый бит равен 0; в операции с битом указан номер бита > 31 |
SS | Флаг отрицательного входного операнда | Для операций выделения экспоненты устанавливается в соответствии со знаком операнда. Для остальных операций сбрасывается в 0. |
5) Организация многофункциональных вычислений
Многофункциональное вычисление (инструкция) – выполнение в течение одного такта:
● одной операции АЛУ и одной операции Умножителя;
● двух операций АЛУ (только дуальное сложение/вычитание).
Инструкции АЛУ и Умножителя, разрешенные для одновременного выполнения, выбираются из ограниченного набора.
Наборы допустимых для распараллеливания операций различаются для ФЗ и ПЗ-операндов.
В режиме многофункциональной обработки ФЗ-данных Умножитель поддерживает только операции с дробными знаковыми числами(!).
Обновление флагов происходит так же, за исключением того, что в двойной операции ALU сложение/вычитание флаги устанавливаются на основании операции «ИЛИ» между флагами от каждой операции.
6) Ограничения при размещении операндов для многофункциональных вычислений
При использовании ALU и умножителя для многофункциональных вычислений каждый из четырех входных операндов ограничен своим набором из четырех регистров регистрового файла (см. ниже). Например, операнд Х в ALU может быть только R8, R9, R10 или R11.
18. Архитектура программного секвенсора. Стеки программного секвенсора и их назначение. Организация и принципы реализации ветвлений. Типы переходов (переходы, вызовы, возвраты, условные, безусловные и т.п.).
Функция секвенсора – выполнение инструкций в линейном порядке с инкрементом адреса выборки следующей команды.
Значение адреса следующей команды выбирается программным автоматом из нескольких возможных источников: регистра адреса выборки, регистра адреса декодирования и счетчика команд (PC), которые содержат, соответственно, адреса команд, которые в данный момент выбираются, декодируются и выполняются. Счетчик команд объединен со стеком счетчика команд, который используется для хранения адреса возврата и адреса вершины цикла. Контроллер прерываний выполняет все функции, связанные с обработкой прерывания: например, определяет, маскировано прерывание или нет, и генерирует соответствующий адрес вектора прерывания.
● Адрес выполняемой (Execute) инструкции – регистр PC.
● Адрес декодируемой (Decode) инструкции – регистр DADDR.
● Адрес выбираемой (Fetch) инструкции – регистр FADDR.
Стек адреса цикла и стек счетчика цикла обеспечивают поддержку вложенных циклов. В стеке состояния сохраняется содержимое регистров состояния при выполнении вложенных подпрограмм обработки прерываний.
Когда адрес выборки не является следующим адресом в линейной последовательности адресов, происходит переход. Процессор ADSP2106x поддерживает следующие типы ветвлений: переход, вызов и возврат. Для программного автомата единственное различие между переходом и вызовом заключается в том, что при выполнении команды вызова адрес возврата помещается в стек счетчика команд; т. о., он будет доступен, когда выполнится команда возврата. Переходы выполняются к новому месту в памяти программы, не предусматривая возврата.
Переходы, вызовы и возвраты могут быть условными и безусловными:
IF cond jump Proc2; jump Proc2;
При переходах и вызовах режим адресации может быть прямой, косвенный, относительный:
call Proc3;
IF cond call (M12, I14);
jump (PC, 0x0004);
Переходы, вызовы и возвраты могут быть обычные и задержанные:
call Proc4; rts (db);
Оба выполняются 3 такта, но обычный выполняет два nop, а задержанный две инструкции после него. Ограничение: в 2-х адресах за инструкцией задержанного перехода не могут находиться инструкции других переходов (вызовов, возвратов), команды работы со стеком Программного секвенсора (PC Stack), инструкции организации циклов (DO... UNTIL...), команда IDLE.
Переход может прерывать выполнение цикла.
jump Proc5 (LA);
19. Организация циклов. Ограничения при организации циклов. Циклы не по счетчику. Достоинства и недостатки аппаратной поддержки циклов.
Процессор SHARC ADSP имеет механизм аппаратной поддержки циклов. Использование специализированных стеков Программного секвенсора позволяет использовать аппаратную поддержку циклов до 6 уровней вложенности. Есть ограничения на использование команд переходов, вызовов и возвратов в конце тела цикла. Особого внимания требует организация коротких циклов с выходом по арифметическому условию.
Для организации циклов в ADSP-21000 используется команда DO … UNTIL. При выполнении этой команды программный секвенсор помещает адрес последней инструкции цикла и условие прерывания для выхода из цикла (обе компоненты определяются в инструкции DO…UNTIL) в стек адреса цикла, а адрес вершины цикла – в стек ПС. Проверка условия выхода из цикла проверяется за 3 такта до конца тела цикла, что позволяет избежать неверного выбора Fetch-адреса и дополнительных циклов для перезагрузки конвейера (для циклов длиной из 3-х и более инструкций).
Из-за конвейеризации процессор проверяет условие прерывания цикла (и если цикл основан на счетчике, декрементирует счетчик) перед концом цикла, чтобы следующая выборка либо возвращала к началу цикла, читая адрес с вершины стека ПС, либо переходила к инструкции, следующей за циклом, выталкивая при этом значения из стека цикла и стека ПС.
Инструкция безусловного перехода JUMP с параметром (LA) вызывает автоматическое прерывание цикла, если она находится в теле цикла (подобно команде break в языке C).
Стеки циклов
Стек адреса цикла разрядностью 32 бита имеет в глубину шесть уровней. Каждое слово в стеке адреса цикла содержит следующие поля:
Биты | Содержание |
0 – 23 | адрес окончания цикла (адрес последней инструкции цикла) |
24 – 28 | код завершения |
30 – 31 | тип цикла: ● 00 – по условию ● 01 – по счётчику (длина цикла – 1 инструкция) ● 10 – по счётчику (длина цикла – 2 инструкции) ● 11 – по счётчику (длина цикла больше 2-х инструкций) |
Регистр LADDR содержит вершину стека адреса цикла. Чтение и запись LADDR не изменяет содержимое стека. Когда стек адреса цикла пуст, LADDR содержит значение 0xFFFF FFFF.
Стек счётчика цикла имеет глубину 6 уровней 32-битных слов и работает синхронно со стеком адреса цикла. Это значит, что оба стека имеют одинаковое число занятых мест. Программный секвенсор оперирует с двумя отдельными счётчиками цикла:
● текущим счётчиком CURLCNTR, который отсчитывает итерации для цикла, выполняемого в текущий момент, и содержит значение вершины стека счётчика цикла;
● и просто счётчиком LCNTR, который содержит значение перед тем, как цикл начнёт выполняться.
Инструкция DO … UNTIL LCE (цикл по счётчику) проталкивает значение LCNTR в стек счетчика цикла, чтобы установить новые значения CURLCNTR. Предыдущее значение CURLCNTR сохраняется в стеке на одну позицию ниже. Если CURLCNTR = 0xFFFF FFFF, то стек цикла пуст.
Дата добавления: 2015-11-16; просмотров: 76 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Регистры флагов | | | Пример проблемного кода при организации цикла по арифметическому условию |