Насыщение и переполнение MAC
После каждой операции блок сложения/вычитания генерирует сигнал переполнения MV, который подключен к регистру состояния арифметики процессора ASTAT. Бит MV устанавливается в единицу, если результат сложения выходит за границы регистров MR1/MR2 — 32 бита, т.е. если все девять старших разрядов регистра MR одновременно не нули или не единицы.
Регистр MR имеет возможность насыщения в определенном положительном или отрицательном значении, если происходит переполнение. Насыщение зависит от состояния бита MV регистра состояний арифметики ASTAT и бита MSB регистра MR2. Операцию насыщения описывает табл. 15.3.
Таблица 15.3 Описание операции насыщения
Флаг MV |
Старший разряд MR2 |
Содержимое регистра MR после операции |
0 |
0 или 1 |
Без изменений |
1 |
0 |
00000000 0111111111111111 1111111111111111 (положительное) |
1 |
1 |
11111111 1000000000000000 0000000000000000 (отрицательное) |
Насыщение в MAC является скорее командой, чем режимом, как в ALU. Она используется при завершении последовательности умножений с накоплением, таким образом, чтобы промежуточные переполнения не привели сумматор к насыщению.
Переполнение больше старшего разряда MSB недопустимо. В обратном случае знаковый разряд будет потерян, и насыщение не будет правильным. Однако, чтобы достигнуть этого состояния, требуется 255 циклов переполнения.
Округление
В сумматоре MAC можно округлять 40-разрядный результат на границе между 15-м и 16-м разрядами. Округление относится к системе команд процессора. Округленный результат направляется либо в регистр MR, либо в регистр обратной связи MF. Когда для вывода используется MF, в него записывается 16-разрядный округленный результат. Аналогично, если для вывода выбран MR, то в MR1 записываются 16 разрядов округленного результата, а в регистр MR2 результат округления, таким образом, получается 24-разрядный округленный результат.
Сумматор производит процедуру округления без смещения. Стандартный метод смещенного округления состоит в записи единицы в 15-й разряд. Этот метод вызывает положительное смещение, так как срединное значение числа, когда MR=0x8000 округляется в сторону увеличения. Сумматор устраняет это смещение, принудительно устанавливая шестнадцатый разряд в ноль, когда значение регистра MR достигает середины. При этом четные значения MR1 округляются в сторону уменьшения, а нечетные в сторону увеличения. Таким образом достигается нулевое смещение при выборе множества равномерно распределенных значений. Для наглядности сказанного выше, в табл. 15.4 приведено два примера операций округления результата.
Таблица 15.4 Примеры операций округления результата
Операнды и операции |
Регистры |
MR2 |
MR1 |
MR0 |
Пример 1 |
Неокругленное значение, где 15-й разряд равен 1 |
xxxxxxxx |
xxxxxxxx 00100101 |
1xxxxxxxxxxxxxxx |
Прибавление 1 к 15-му разряду и учет переноса |
|
|
100000000 0000000 |
Округленное значение |
xxxxxxxx |
хххххххх 00100110 |
0xxxxxxxxxxxxxxx |
Пример 2 |
Неокругленное значение, где 15-й разряд равен 1, а разряды с 0-го по 14-й равны нулю |
xxxxxxxx |
хххххххх 00100110 |
100000000 0000000 |
Прибавление 1 к 15-му разряду и учет переноса |
|
|
100000000 0000000 |
Неокругленное значение, где бит 16 равен 1 |
xxxxxxxx |
хххххххх 00100111 |
00000000 00000000 |
Установка 16-го разряда в ноль и получение округленного значения |
xxxxxxxx |
хххххххх 00100110 |
00000000 00000000 |
x — произвольное значение (0 или 1).
В первом примере число не является срединным и производится его стандартное округление.
Во втором примере число имеет срединное значение, поэтому его 16-й разряд устанавливается в ноль. Алгоритм округления применяется для каждой операции округления, но становится очевидным лишь при таком наборе младших бит, который показан в примере 2.
Смещенное округление
В процессорах ADSP-2181 возможен режим смещенного округления. Этот режим выбирается путем установки 12-го бита (BIARND) регистра управления SPORT0. Если BIARND=0, то используется операция несмещенного округления, если BIARND=1, то смещенного. Примеры таких операций приведены в табл. 15.5.
Таблица 15.5 Примеры операций округления
Значение регистра MR до округления |
Результат округления со смещением |
Результат округления без смещения |
00-0000-8000 |
00-0001-8000 |
00-0000-8000 |
00-0001-8000 |
00-0002-8000 |
00-0002-8000 |
00-0000-8001 |
00-0001-8001 |
00-0001-8001 |
00-0001-8001 |
00-0002-8001 |
00-0002-8001 |
00-0000-7FFF |
00-0000-7FFF |
00-0000-7FFF |
00-0001-7FFF |
00-0001-7FFF |
00-0001-7FFF |
Этот режим действует только в том случае, когда значение регистра MR0 больше 0x8000. Во всех других случаях работают обычные операции округления. Этот режим позволяет более эффективно реализовывать алгоритмы, использующие смещенное округление, например подпрограммы речевого сжатия GSM.
Читать дальше