Если результат до округления находится точно посередине между двумя числами определенного формата (отличающимися младшим битом), то округленный результат - это число, которое имеет нулевой младший бит. Статистически округление вверх случается так же часто, как и округление вниз, поэтому нет большого смещения в выборке. Из-за того что максимальное число с плавающей точкой на один младший бит меньше, чем число, представляющее бесконечность, результат, который находится посередине между максимальным числом с плавающей точкой и бесконечностью, округляется в этом режиме до бесконечности. Режим округления для всех операций ALU и операций с плавающей точкой умножителя определяется битом TRUNC в регистре MODEL Если бит TRUNC установлен, то выбран режим округления к нулю. Иначе используется режим округления к ближайшему. Для операций умножителя с фиксированной точкой над дробными данными поддерживаются те же самые два режима округления, но реально умножитель выполняет только операцию округления к ближайшему. Из-за того что умножитель имеет локальный регистр результата операций с фиксированной точкой, округление к нулю выполняется неявно путем считывания только старших битов результата и отбрасывания младших.
ALU выполняет арифметические операции над данными с фиксированной и плавающей точкой и логические операции над данными с фиксированной точкой. Команды ALU с фиксированной точкой оперируют над 32-разрядными операндами с фиксированной точкой и выдают 32-разрядный результат с фиксированной точкой. Команды ALU с плавающей точкой оперируют над 32-или 40-разрядными операндами с плавающей точкой и выдают 32 - или 40-разрядные результаты с плавающей точкой.
Команды ALU:
с плавающей точкой: сложение, вычитание, сложение/вычитание, усреднение;
с фиксированной точкой: сложение, вычитание, сложение/вычитание, усреднение;
манипуляция с данными с плавающей точкой: двоичный логарифм, масштабирование, мантисса;
с фиксированной точкой: сложение с переносом, вычитание с заемом, инкремент, декремент;
логические AND, OR, XOR, NOT;
функции: модуль, сброс, минимум, максимум, усечение, сравнение;
преобразования формата;
примитивы деления - и деления на корень квадратный г-.
Операция двойного сложения/вычитания и параллельные операции ALU и умножителя описаны ниже в разделе "Многофункциональные вычисления".
На вход ALU поступают один или два входных операнда, называемые X и Y, которые могут быть содержимым любого регистра в регистровом файле. Обычно возвращается один результат; при операции сложение/вычитание - два результата, после сравнения никакие результаты не возвращаются, а обновляются только флаги. Результаты операций ALU могут возвращаться в любой регистр регистрового файла. Входные операнды пересылаются из регистрового файла в ALU в течение первой половины цикла. Результаты передаются в регистровый файл в течение второй половины цикла. Т.о., ALU может считывать и записывать один и тот же регистр регистрового файла за один цикл.
При операциях ALU с фиксированной точкой операнды X и Y обрабатываются как 32-разрядные с фиксированной точкой. Передаются 32 старших бита из регистра в регистровом файле. Результат операции с фиксированной точкой - всегда 32-разрядное значение с фиксированной точкой. Некоторые операции с плавающей точкой (LOGB, MANT и FIX) также могут возвращать результаты с фиксированной точкой. Результаты с фиксированной точкой помещаются в 32 старших бита регистра в регистровом файле, а восемь младших бит обнуляются. Формат операндов и результатов с фиксированной точкой зависит от операции. В большинстве арифметических операций нет необходимости различать целые и дробные форматы. Входные операнды с фиксированной точкой в операциях, таких как масштабирование числа с плавающей точкой, обрабатываются как целые. В определенных состояниях, таких как переполнение, арифметические операнды и результаты с фиксированной точкой обрабатываются как числа в дополнительном коде.
Режим работы ALU определяется тремя битами в регистре MODEL Бит насыщения ALU влияет на операции ALU, которые возвращают результаты с фиксированной точкой; бит режима округления и бит границы округления влияют на операции с плавающей точкой в ALU и умножителе.
Бит M0DE1 Имя Функция
13 ALUSAT1= разрешено насыщение ALU (полномасштабная
величина с фиксированной точкой)
О=запрещено насыщение ALU
TRUNC 1=усечение; О=округление к ближайшему
RND 321=округление до 32 бит; О=округление до 40 бит
В режиме насыщения при положительном переполнении в операциях с фиксированной точкой возвращается максимальное положительное число с фиксированной точкой (0x7FFF FFFF), при отрицательном переполнении возвращается максимальное отрицательное число (0x8000 0000). Если бит ALUSAT установлен, то результаты с фиксированной точкой при переполнении насыщаются. Если бит ALUSAT обнулен, то результаты с фиксированной точкой при переполнении не насыщаются, 32 старших бита результата возвращаются без изменений. Флаг переполнения ALU отражает результат ALU до насыщения.
ALU поддерживает два режима округления стандарта IEEE. Если бит TRUNC установлен, то ALU округляет результат к нулю (усечение). Если бит TRUNC обнулен, то ALU округляет к ближайшему.
В ADSP-2106x результаты операций ALU с плавающей точкой могут быть 32 - и 40-разрядными данными с плавающей точкой. Если бит RND32 установлен, то перед выполнением операции ALU (за исключением операции RND) восемь младших разрядов каждого входного операнда обнуляются, результат с плавающей точкой выводится в 32-разрядном формате стандарта IEEE. Восемь младших разрядов результата обнуляются. Если бит RND32 обнулен, то ALU получает 40-разрядные операнды неизменными и выводит 40-разрядные результаты операции с плавающей точкой и все 40 разрядов записываются в определенный регистр регистрового файла.
При преобразовании чисел из формата с фиксированной точкой в формат с плавающей точкой граница округления всегда 40 бит, независимо от состояния бита RND32.
ALU обновляет семь флагов состояния в регистре ASTAT в конце каждой операции. Состояния этих флагов отражают результат самой последней операции ALU. В конце каждой операции сравнения ALU обновляет биты накопления сравнений в ASTAT. Также ALU обновляет четыре "залипших" флага состояния в регистре STKY. После установки "залипший" флаг остается в этом состоянии, пока явно не будет обнулен.
ъ | Имя |
0 | AZ |
1 | AV |
2 | AN |
3 | АС |
4 | AS |
5 | AI |
10 | AF |
31-24 | САС |
Бит STKY | Имя |
0 | AUS |
1 | AVS |
2 | AOS |
5 | AIS |
Описание:
Нулевой результат или потеря значащих разрядов в операции с плавающей точкой Переполнение ALU Отрицательный результат ALU Перенос для результата с фиксированной точкой Знак операнда X (операции ABS, MANT) Неправильная операция ALU с плавающей точкой Последняя операция ALU была операцией с плавающей точкой С АС С Регистр накопления сравнений (Compare Accumulation register) (результат 8 последних операций сравнения)
Описание:
Потеря значащих разрядов в операции с плавающей точкой Переполнение результата операции ALU с плавающей точкой Переполнение результата операции ALU с фиксированной точкой Неправильная операция ALU с плавающей точкой
Флаг обновляется в конце того цикла, в котором генерируется состояние, и доступен в следующем цикле. Если программа осуществляет прямую запись в регистры ASTAT или STKY в том же цикле, в котором ALU выполняет операцию, то явная запись имеет преимущество.
Нулевой флаг определен для всех операций ALU с фиксированной и плавающей точкой. AZ устанавливается, когда результат операции ALU равняется нулю. Установка AZ также сигнализирует о потере значащих разрядов результата с плавающей точкой (см. ниже). В противном случае он сброшен.
Потеря значащих разрядов определена для всех операций ALU, которые возвращают результат с плавающей точкой, а также для операции преобразования форматов. AUS и AZ устанавливаются, когда результат операции ALU меньше, чем минимальное число формата представления результата.
Отрицательный флаг ALU определен для всех операций ALU. Он устанавливается, когда результат операции ALU отрицательный. Иначе он сброшен.
Переполнение определено для всех операций ALU с плавающей и с фиксированной точкой. Для результатов с фиксированной точкой AV и AOS устанавливаются, когда результат операции "исключающее ИЛИ" (XOR) двух старших разрядов результата равен 1, иначе AV сброшен. Для результатов с плавающей точкой AV и AVS устанавливаются, когда результат после округления переполнен (несмещенный порядок >127), иначе AV сброшен.
Флаг переноса определен для всех операций ALU с фиксированной точкой. Для арифметических операций с фиксированной точкой АС устанавливается, если произошел перенос за старший разряд результата, иначе он сброшен. АС сброшен для операций PASS, MIN, MAX, COMP, ASP, CLIP и логических операций. ALU считывает флаг АС в операциях с фиксированной точкой: сложение с переносом и вычитание с переносом.
Знаковый флаг определен только для операции ABS с фиксированной и с плавающей точкой и операции MANT. AS устанавливается, если входной операнд отрицательный. Иначе он сброшен. ALU обнуляет бит AS для всех операций, кроме ABS и MANT; в отличие от процессоров семейства ADSP-2100, которые обновляют флаг AS только при операции ABS.