Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++ — страница 29 из 43

ичные от знакового разряда MR1, необходимо загружать MR2 после загрузки MR1. Загрузка регистра MR0 не влияет на регистры MR0 и MR1.

Насыщение и переполнение MAC

После каждой операции блок сложения/вычитания генерирует сигнал переполнения MV, который подключен к регистру состояния арифметики процессора ASTAT. Бит MV устанавливается в единицу, если результат сложения выходит за границы регистров MR1/MR2 — 32 бита, т.е. если все девять старших разрядов регистра MR одновременно не нули или не единицы.

Регистр MR имеет возможность насыщения в определенном положительном или отрицательном значении, если происходит переполнение. Насыщение зависит от состояния бита MV регистра состояний арифметики ASTAT и бита MSB регистра MR2. Операцию насыщения описывает табл. 15.3.


Таблица 15.3 Описание операции насыщения

Флаг MVСтарший разряд MR2Содержимое регистра MR после операции
00 или 1Без изменений
1000000000 0111111111111111 1111111111111111 (положительное)
1111111111 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 Примеры операций округления результата

Операнды и операцииРегистры
MR2MR1MR0
Пример 1
Неокругленное значение, где 15-й разряд равен 1xxxxxxxxxxxxxxxx 001001011xxxxxxxxxxxxxxx
Прибавление 1 к 15-му разряду и учет переноса100000000 0000000
Округленное значениеxxxxxxxxхххххххх 001001100xxxxxxxxxxxxxxx
Пример 2
Неокругленное значение, где 15-й разряд равен 1, а разряды с 0-го по 14-й равны нулюxxxxxxxxхххххххх 00100110100000000 0000000
Прибавление 1 к 15-му разряду и учет переноса100000000 0000000
Неокругленное значение, где бит 16 равен 1xxxxxxxxхххххххх 0010011100000000 00000000
Установка 16-го разряда в ноль и получение округленного значенияxxxxxxxxхххххххх 0010011000000000 00000000

x — произвольное значение (0 или 1).


В первом примере число не является срединным и производится его стандартное округление.

Во втором примере число имеет срединное значение, поэтому его 16-й разряд устанавливается в ноль. Алгоритм округления применяется для каждой операции округления, но становится очевидным лишь при таком наборе младших бит, который показан в примере 2.

Смещенное округление

В процессорах ADSP-2181 возможен режим смещенного округления. Этот режим выбирается путем установки 12-го бита (BIARND) регистра управления SPORT0. Если BIARND=0, то используется операция несмещенного округления, если BIARND=1, то смещенного. Примеры таких операций приведены в табл. 15.5.


Таблица 15.5 Примеры операций округления

Значение регистра MR до округленияРезультат округления со смещениемРезультат округления без смещения
00-0000-800000-0001-800000-0000-8000
00-0001-800000-0002-800000-0002-8000
00-0000-800100-0001-800100-0001-8001
00-0001-800100-0002-800100-0002-8001
00-0000-7FFF00-0000-7FFF00-0000-7FFF
00-0001-7FFF00-0001-7FFF00-0001-7FFF

Этот режим действует только в том случае, когда значение регистра MR0 больше 0x8000. Во всех других случаях работают обычные операции округления. Этот режим позволяет более эффективно реализовывать алгоритмы, использующие смещенное округление, например подпрограммы речевого сжатия GSM.

Полный список команд

Ниже приводится полный список команд устройства умножителя-накопителя MAC, также в соответствии с принятыми ранее условными сокращениями. Назначение команд приводится в тексте описания этих команд и комментариях для некоторых из команд.

Команды умножения:

[IF cond] |MR| = xop * |yop| |(SS) |;

          |MF|         |xop| |(SU) |

                             |(US) |

                             |(UU) |

                             |(RND)|

Здесь присутствуют новые символы, которые имеют следующее назначение:

S — входной операнд xop или yop знаковый;

U — входной операнд xop или yop беззнаковый;

RND — выходное значение округляется.

Например, команда:

MR=MX0*MY0(SU);

означает, что в регистр MR будет занесен результат умножения знакового значения из регистра MX0 на беззнаковое значение из регистра MY0.

Команда:

MR=SR1 *MY0(RND);

означает, что в регистр MR будет занесен результат умножения значения из регистра SR1 на значение из регистра MY0 и результат вычисления будет округлен.

Команды умножения с накоплением:

[IF cond] |MR| = MR + xop * |yop| |(SS) |;

          |MF|              |xop| |(SU) |

                                  |(US) |

                                  |(UU) |

                                  |(RND)|

Пример:

MR=MR+MX0*MY0 (SS);

Здесь в регистр MR будет занесен результат сложения предыдущего значения регистра MR с результатом умножения знакового значения из регистра MX0 на знаковое значение из регистра MY0.

Команды умножения с вычитанием:

[IF cond] |MR| = MR - xop * |yop| |(SS) |;

          |MF|              |xop| |(SU) |

                                  |(US) |

                                  |(UU) |

                                  |(RND)|

Команды пересылки MR:

[IF cond] |MR| = MR |(RND)|;

          |MF|

Фактически эти команды осуществляют пересылку содержимого регистра MR в регистр MR или в регистр MF с округлением значения.

Команды очистки:

[IF cond] |MR| = 0;

          |MF|

Команда условного насыщения регистра MR:

IF MV SAT MR;

Здесь MV — код условия переполнения умножителя.

Для всех команд MAC разрешено использовать следующие операнды:

xop: MX0, МХ1, AR, MR0, MR1, MR2, SR0, SR1;

yop: MY0, MY1, MF;

Коды условия IF соответствуют кодам, приведенным ранее в табличном виде.

Примеры записи команд:

MR=MR+MX0*MY0(SS); /* Присвоить регистру MR значение суммы регистров MR и

 произведения MX0 на MY0, где оба операнда произведения знаковые*/

MF=AR*MY0(RND) /* Присвоить регистру MF значение произведения регистра AR на

 MY0, с округлением результата*/

MF=AR*MY0(RND), MY1=DM(I3,M3); /* Мультипроцессорная команда вычисления

 произведения и одновременной пересылки данных из памяти в регистр*/

MF=MR(RND); /* Осуществить пересылку содержимого регистра MR в регистр MF с

 округлением значения */

IF EQ MR=0; /* Очистить регистр MR, если предыдущий результат равен нулю */

Глава 16. Устройство сдвига

В этой главе говорится об устройстве сдвига сигнального процессора и выполняемых с его помощью командах.