Федеральное Агентство образования Российской Федерации
Пензенский государственный университет
Кафедра "Информационная безопасность систем и технологий"
РЕФЕРАТ
по теме:
"Операции над данными в СП с плавающей точкой "
Дисциплина: ЦиМПТ
Группа:
Выполнил: .
Руководитель работы:
Пенза 2006
Содержание
1. Обзор
2. Операции с плавающей точкой стандарта IEEE
2.1 Формат с плавающей точкой повышенной точности
2.2 Формат коротких слов с плавающей точкой
2.3 Исключения при выполнении операций с плавающей точкой
3. Операции с фиксированной точкой
4. Округление
5. Арифметико-логическое устройство (ALU)
5.1 Работа ALU
5.2 Режимы работы ALU
5.2.1 Режим насыщения
5.2.2 Режимы округления данных с плавающей точкой
5.2.3 Границы округления данных с плавающей точкой
5.3 Флаги состояния ALU
5.3.1 Нулевой флаг ALU (AZ)
5.3.2 Флаги потери значащих разрядов (AZ, AUS)
5.3.3 Отрицательный флаг ALU (AN)
5.3.4 Флаги переполнения ALU (AV, AOS, AVS)
5.3.5 Флаг переноса операции АШ с фиксированной точкой (АС)
5.3.6 Знаковый флаг ALU (AS)
5.3.7 Флаги ошибки ALL) (Al, AIS)
5.3.8 Флаг операции с плавающей точкой ALU (AF)
5.3.9 Накопление сравнений
6. Умножитель
6.1 Работа умножителя
6.2 Результаты с фиксированной точкой
6.2.1 Регистры MR
6.3 Операции с фиксированной точкой
6.3.1 Обнуление регистра MR
6.3.2 Округление содержимого регистра MR
6.3.3 Насыщение регистра MR при переполнении
1.6.4 Режимы работы с плавающей точкой
6.4.1 Режимы округления данных с плавающей точкой
6.4.2 Граница округления данных с плавающей точкой
6.5 Флаги состояния умножителя
6.5.1 Флаги потери значащих разрядов (MU, MUS)
6.5.2 Отрицательный флаг умножителя (MN)
6.5.3 Флаг переполнения умножителя (MV)
6.5.4 Флаг ошибки умножителя (Ml)
7. Устройство сдвига
7.1 Работа устройства сдвига
7.2 Флаги состояния устройства сдвига
7.3.1 Нулевой флаг устройства сдвига (SZ)
7.3.2 Флаг переполнения устройства сдвига (SV)
7.3.3 Знаковый флаг устройства сдвига (SS)
7.4 Резюме команд устройства сдвига
8. Многофункциональные вычисления
9. Регистровый файл
9.1 Дополнительные регистры
Вычислительные устройства (ВУ) процессора ADSP-2106x используются для операций, осуществляемых при реализации алгоритмов цифровой обработки сигналов. Процессор ADSP-2106x содержит три ВУ: арифметико-логическое устройство (ALU), умножитель и устройство сдвига. Процессор поддерживает операции с фиксированной и плавающей точкой. Каждое ВУ выполняет команды за один цикл.
ALU выполняет стандартный набор арифметических и логических операций в обоих форматах: с фиксированной и плавающей точкой. Умножитель выполняет умножения с фиксированной и плавающей точкой, а также операции умножение/сложение и умножение/вычитание с фиксированной точкой. Устройство сдвига выполняет логические и арифметические сдвиги, манипуляцию битами, операции внесения и извлечения поля над 32-разрядными операндами и определение порядка.
В У имеют параллельную архитектуру, как показано на рис.2.1 Выход любого ВУ может быть входом любого ВУ в следующем цикле. ВУ получают и выводят данные через 10-портовый регистровый файл, который состоит из 16 первичных и 16 дополнительных регистров. Регистровый файл доступен для шины данных памяти программы и шины данных памяти данных, по которым передаются данные между ВУ и внешней памятью или другими частями процессора.
Один и тот же регистр в регистровом файле начинается с префикса F (в исходном коде ассемблера), когда он используется в вычислениях с плавающей точкой. И начинается с префикса R, когда используется в вычислениях с фиксированной точкой. Например, следующие команды используют одни и те же регистры:
FO=F1 * F2; умножение с плаваюгцей точкой
RO=R1 * R2; умножение с фиксированной точкой
Префиксы F и R не влияют на передачу 32-разрядных (или 40-разрядных) данных; они только определяют, как ALU, умножитель или устройство сдвига обрабатывают данные. F и R могут быть прописными и строчными; в ассемблере не учитывается регистр клавиатуры.
В этой главе рассматриваются следующие темы:
форматы данных и округление;
архитектура и функции ALU;
архитектура и функции умножителя;
архитектура и функции устройства сдвига;
многофункциональные вычисления;
регистровый файл и передача данных.
Умножитель и ALU поддерживают формат чисел с плавающей точкой одиночной точности, определенный стандартом IEEE 754/854. Этот стандарт описан в приложении С Форматы представления чисел. ADSP-2106x соответствует стандарту IEEE 754/854 для операций с плавающей точкой одиночной точности, за исключением:
ADSP-2106x не обеспечивает неточные флаги;
при вводе NAN (Not-a-Number - "не число") генерируется исключение и возвращается NAN (1 во всех разрядах);
ненормализованные операнды обнуляются, когда попадают в вычислительное устройство, и исключение потери значащих разрядов не генерируется. Если результат арифметической операции не нормализован или произошла потеря значащих разрядов, то он обнуляется и генерируется исключение потери значащих разрядов;
поддерживаются режимы округления к ближайшему и округления по направлению к нулю; округление к ±°о не поддерживается.
Кроме того, в ADSP-2106x поддерживается режим повышенной точности с плавающей точкой для 40-разрядных операндов, которые имеют восемь дополнительных младших разрядов мантиссы. Режим не соответствует стандартам 754/854, но результаты в этом формате более точные, чем в формате одиночной точности стандарта IEEE.
В ADSP-2106x данные с плавающей точкой могут быть как 32-, так и 40-разрядными. Формат с плавающей точкой повышенной точности (8 бит порядок и 32 бита мантисса) устанавливаются при записи 0 в бит RND32 в регистре MODEL Если этот бит установлен (1), то используется обычная точность стандарта IEEE (8 бит порядок и 24 бита мантисса). В этом случае в ВУ перед выполнением операции обнуляются восемь младших разрядов входного операнда. Мантисса результата округляется до 23 бит (не включая скрытый бит), а 8 младших разрядов 40-разрядного результата обнуляются, таким образом, формируется 32-разрядное число, которое эквивалентно представлению результата по стандарту IEEE.
ADSP-2106x поддерживает тип 16-разрядных данных с плавающей точкой и обеспечивает команды преобразования для него. Формат короткого слова с плавающей точкой имеет 11-разрядную мантиссу и 4-разрядный порядок, плюс знаковый бит.16-разрядное число размещается в 16 младших битах 32-разрядного поля. Две команды устройства сдвига, FPACK и FUNPACK, выполняют преобразования (упаковку и распаковку) между 32 - и 16-разрядными словами с плавающей точкой. Команда FPACK преобразует 32-разрядное число с плавающей точкой стандарта IEEE в 16-разрядное число. FUNPACK преобразует 16-разрядные числа назад в 32-разрядные. Каждая из этих команд выполняется за один цикл. Формат коротких слов с плавающей точкой поддерживает постепенную потерю значащих разрядов. Когда упаковывается число, которое могло бы потерять значащие разряды, порядок обнуляется, а мантисса (включая "скрытую" 1) сдвигается вправо на соответствующую величину. Упакованный результат является ненормализованным и может быть распакован в нормальное число с плавающей точкой стандарта IEEE.
Умножитель и ALU информируют об исключении при выполнении операций с плавающей точкой. Они обновляют флаги переполнения, потери значащих разрядов, неправильной операции в регистрах арифметического состояния (ASTAT) и "залипшие" флаги состояния (STKY). Кроме этого, при потере значащих разрядов, переполнении или неправильной операции эти устройства генерируют маскируемое прерывание. Т.о., существует три способа обработки исключительных ситуаций при операциях с плавающей точкой:
Прерывания. Исключительная ситуация обрабатывается сразу же в программе обработки прерывания. Если необходимо обрабатывать исключения по мере их возникновения, то можно использовать этот метод.
Регистр ASTAT. Флаги исключительных ситуаций в регистре ASTAT, соответствующие определенным арифметическим операциям, проверяются после того, как операция выполнена. Этот метод можно использовать для контроля выполнения определенной операции с плавающей точкой.
Регистр STKY. Флаги исключительных ситуаций в регистре STKY проверяются после завершения последовательности операций. Если какой - либо флаг установлен, то это означает, что какие-то из результатов неправильны. Этот метод можно использовать, если обработка исключительной ситуации не критична ко времени.
Разрядность числа с фиксированной точкой всегда равна 32; в поле 40-разрядных данных оно занимает 32 старших бита. Форматы представления этих чисел могут быть дробные или целые, беззнаковые или знаковые. Каждое ВУ имеет свои собственные ограничения на то, как эти форматы совмещаются в данной операции. ВУ считывают 32-разрядные операнды из 40-разрядных регистров, игнорируя 8 младших разрядов, и записывают 32-разрядные результаты, обнуляя 8 младших разрядов.
В процессоре ADSP-2106x поддерживается два режима округления: округление к нулю и округление к ближайшему. Режимы округления соответствуют стандарту IEEE 754, как определено ниже:
Округление к нулю. Если результат до округления точно не представить в определенном формате, то он округляется до числа, которое ближе к нулю. Это эквивалентно усечению.
Округление к ближайшему. Если результат до округления точно не представим в определенном формате, то он будет округлен до числа, которое ближе к нему.
Если результат до округления находится точно посередине между двумя числами определенного формата (отличающимися младшим битом), то округленный результат - это число, которое имеет нулевой младший бит. Статистически округление вверх случается так же часто, как и округление вниз, поэтому нет большого смещения в выборке. Из-за того что максимальное число с плавающей точкой на один младший бит меньше, чем число, представляющее бесконечность, результат, который находится посередине между максимальным числом с плавающей точкой и бесконечностью, округляется в этом режиме до бесконечности. Режим округления для всех операций 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.
Флаги ошибки ALU определены для всех операций ALU с плавающей точкой. AI и AIS устанавливаются, когда: входной операнд NAN ("не число"); складываются бесконечности с противоположными знаками; вычитаются бесконечности одного знака; не установлен режим насыщения, а результат преобразования из формата с плавающей точкой в формат с фиксированной точкой переполнен, или производится операция преобразования над бесконечностью.
Иначе AI сброшен.
AF определен для всех операций ALU с фиксированной и с плавающей точкой. Он устанавливается, если последняя операция ALU была с плавающей точкой, иначе он сброшен.
Биты 31-24 в регистре ASTAT хранят флаги результатов до восьми операций сравнения ALU. Эти биты формируют регистр со сдвигом вправо. После выполнения операции сравнения восемь бит сдвигаются в направлении младшего разряда (бит 24 теряется). Затем в старший бит (31) записывается результат операции сравнения. Если операнд X больше операнда Y, то бит 31 устанавливается, иначе он обнуляется.
Умножитель выполняет операции умножения с фиксированной или с плавающей точкой и умножение/накопление с фиксированной точкой. Умножение/накопление может быть выполнено и с накопленным сложением, и с накопленным вычитанием. Умножение/накопление с плавающей точкой может быть выполнено посредством параллельных операций ALU и умножителя. Для этого используются многофункциональные команды (см. далее раздел "Многофункциональные вычисления" в этой главе). При операциях с плавающей точкой умножитель оперирует 32 - или 40-разрядными операндами и результатами формата с плавающей точкой. При операциях с фиксированной точкой умножитель оперирует 32-разрядными данными с фиксированной точкой и выдает 80-разрядные результаты. Входные данные обрабатываются как целые или дробные, беззнаковые или в дополнительном коде.
Команды умножителя: умножение с плавающей точкой; умножение с фиксированной точкой; умножение/накопление со сложением для данных с фиксированной точкой (необязательное округление); умножение/накопление с вычитанием для данных с фиксированной точкой (необязательное округление); округление результата; насыщение результата; обнуление результата.
На вход умножителя поступают один или два входных операнда, называемые X и Y, которые могут быть содержимыми любого регистра в регистровом файле. При операциях с фиксированной точкой результаты могут накапливаться в любом из двух локальных регистров результата умножителя (MR) или записываться назад в регистровый файл. Результаты, сохраненные в регистрах MR, могут округляться или насыщаться в отдельных операциях. При операциях с плавающей точкой возвращается результат с плавающей точкой, который всегда записывается назад в регистровый файл.
Входные операнды передаются в течение первой половины цикла. Результаты передаются в течение второй половины цикла. Т.о., умножитель может считывать и записывать один и тот же регистр регистрового файла за один цикл.
При операциях умножителя с фиксированной точкой входные данные считываются из 32 - старших битов регистра регистрового файла. Операнды с фиксированной точкой могут обрабатываться в целом или дробном форматах. Формат результата соответствует формату входных данных. Каждый операнд с фиксированной точкой может обрабатываться как беззнаковый, так и знаковый (в дополнительном коде). Если оба входных операнда дробные и знаковые, то умножитель автоматически сдвигает результат влево на один бит, чтобы удалить избыточный знаковый бит. Тип входных данных определяется внутри команды умножителя.
Операции с фиксированной точкой возвращают 80-разрядные результаты в регистр MR. Положение результата в 80-разрядном поле зависит от его формата: результат дробный или целый (см. рис.2.2). Если результат посылается прямо в регистровый файл, то пересылаются те 32 разряда, которые соответствуют формату входных данных: т.е. разряды 63-32 для дробного результата или разряды 31-0 - для целого. Восемь младших бит 40-разрядного регистра регистрового файла заполняются нулями. Перед передачей дробного результата в регистровый файл он может быть округлен к ближайшему (см. далее). Если округление не определено, то ненужные разряды 31-0 отбрасываются, что соответствует усечению дробного результата (округление к нулю).
Результат может пересылаться в один из двух 80-разрядных регистров результатов (MR). Регистры MR имеют одинаковый формат - каждый делится на регистры MR2,MR1,MRO, содержимое которых может отдельно считываться или записываться в регистровый файл. Когда данные считываются из MR2, они дополняются по знаку до 32 бит (см. рис.2.3). Когда данные считываются из MR2, MR1, MR0 в регистровый файл, восемь младших бит 40-разрядного регистра регистрового файла заполняются нулями. При записи данных в MR2, MR1, MR0 из регистра регистрового файла считываются 32 старших бита, а восемь младших игнорируются. Данные, записанные в MR1, дополняются по знаку в MR2, т.е. старшие биты MR1 повторяются в 16 разрядах MR2. Однако записанные в MR0 данные не дополняются по знаку.
Два регистра MR обозначаются как MRF (основной) и MRB (дополнительный). Основной относится к тем регистрам, которые обычно активируются битом SRCU в регистре MODEL Когда используется только один регистр MR, бит SRCU активирует либо один, либо другой регистр для быстрого контекстного переключения. Однако, в отличие от других регистров, которые имеют дополнительный набор, регистры MRF и MRB могут использоваться в одно и то же время. Все команды накопления (с фиксированной точкой) могут определять любой регистр результата для накопления независимо от состояния бита SRCU.Т.о., вместо использования регистров MR как основного и дополнительного их можно использовать как два параллельных накопителя. Эта особенность облегчает работу с комплексными числами.
Пересылка данных между регистрами MR и регистровым файлом рассматривается как операция вычислительного устройства, т.к она задействуют умножитель. Т.о., хотя синтаксис команды передачи такой же, как и для любой другой команды передачи данных в регистровый файл или из него, передача данных в MR размещается в команде, в том месте, где обычно располагается вычисление. Например, процессор может выполнять умножение/ накопление параллельно со считыванием данных из памяти:MRF=MRF-R5*R0, R6=DM (II, М2); или может выполнять пересылку данных в MR вместо вычисления: R5=MR1F, R6=DM (I1,M2).
Помимо умножения к операциям с фиксированной точкой относятся накопление, округление и насыщение. Существуют три операции с содержимым регистра MR: обнуление (Clear), округление (Round) и насыщение (Saturate).
Операция обнуления обнуляет заданный регистр MR. Обнуление выполняется в начале операции умножение/накопление для удаления результатов, оставшихся от предыдущей операции.
Округление результата с фиксированной точкой происходит или как часть операций умножение и умножение/накопление, или как явная операция регистра MR. Операция округления применяется только к дробным результатам (целые результаты не округляются), 80-разрядное число в MR округляется к ближайшему за счет бита 32, т.е. границы MR1-MR0. Округленный результат из MR1 может быть отправлен в регистровый файл или в тот же самый регистр MR. Для округления дробного результата к нулю (усечение) вы пересылаете неокругленный результат из MR1, отбрасывая 32 младших бита (MR0).
Операция насыщения устанавливает максимальное значение в MR, если содержимое MR переполнено. Переполнение происходит, когда значение в MR больше максимального значения данного формата (беззнаковый или в дополнительном коде, целый или дробный). Ниже приведены шесть возможных максимальных чисел, представленных в шестнадцатиричном формате:
MR2MR1MR0
Максимальное дробное число в дополнительном коде
00007FFF FFFFFFFF FFFF Положительное
FFFF8000 00000000 0000 Отрицательное
Максимальное целое число в дополнительном коде
00000000 00007FFF FFFF Положительное
FFFFFFFF FFFF8000 0000 Отрицательное
Максимальное беззнаковое дробное число
0000FFFF FFFF FFFF FFFF
Максимальное беззнаковое целое число
00000000 0000FFFF FFFF
Результат насыщения MR можно поместить или в регистровый файл, или назад в тот же самый регистр MR.
Умножитель управляется двумя битами состояния режима в регистре MODE1: биты режима округления и границы округления. Кроме того, эти биты влияют на операции ALU.
Бит |
MODE1 |
Имя |
15 |
TRUNC |
16 |
RND32 |
Функция
1=усечение; 0=округление к ближайшему
1=округление до 32 бит; 0=округление до 40 бит
Умножитель поддерживает два режима округления стандарта IEEE для операций с плавающей точкой. Если бит TRUNC установлен, то умножитель округляет результат с плавающей точкой к нулю (усечение). Если бит TRUNC обнулен, то умножитель округляет результат к ближайшему.
В ADSP-2106x входные данные и результаты умножителя с плавающей точкой могут быть 32 - и 40-разрядными. Если бит RND32 установлен, то восемь младших бит каждого входного операнда обнуляются перед умножением. Результаты с плавающей точкой выводятся в 32-разрядном формате стандарта IEEE с нулями в 8 младших разрядах 40-разрядного регистра регистрового файла. Мантисса результата округляется до 23 бит (не включая скрытый бит). Если бит RND32 равен нулю, то умножитель получает 40-разрядные числа из регистрового файла и выводит результаты в 40-разрядном формате стандарта IEEE повышенной точности, с мантиссой, округленной до 31 бита (не включая скрытый бит).
В конце каждой операции умножитель обновляет четыре флага состояния в регистре ASTAT. Состояния этих флагов отражают результат самой последней операции умножителя. Умножитель также обновляет четыре "залипших" флага состояния в регистре STKY. После обновления "залипший" флаг остается в этом состоянии, пока явно не будет обнулен.
Бит ASTAT |
Имя |
6 |
MN |
7 |
MV |
8 |
ми |
9 |
Ml |
Бит STKY |
Имя |
6 |
MOS |
7 |
MVS |
8 |
MUS |
9 |
MIS |
Описание:
Результат операции умножителя отрицательный
Переполнение умножителя
Потеря значащих разрядов
Неправильная операция умножителя с плавающей точкой
Описание
Переполнение результата умножителя с фиксированной
точкой
Переполнение результата умножителя с плавающей точкой
Потеря значащих разрядов
Неправильная операция умножителя с плавающей точкой
Обновление флага происходит в конце цикла, в котором генерируется состояние, а в следующем цикле он становится доступным. Если программа осуществляет прямую запись в регистры ASTAT или STKY в том же цикле, в котором умножитель выполняет операцию, то явная запись имеет преимущество.
Потеря значащих разрядов определена для всех операций умножителя с фиксированной и плавающей точкой. Флаги устанавливаются, если результат операции умножителя меньше, чем минимальное число, представимое в этом формате. Иначе он сброшен.
Для результатов с плавающей точкой MU и MUS устанавливаются, если результат после округления потерял значащие разряды (несмещенный порядок <-126). Ненормализованные операнды всегда обрабатываются как нули, поэтому они никогда не приводят к потере значащих разрядов.
Для результатов с фиксированной точкой установка MU и MUS зависит от формата данных и происходит при следующих условиях:
Дополнительный код:
Дробное: выше 48 бит все нули или все единицы, ниже 32 бит не все нули
Целое: невозможно
Беззнаковый:
Дробное: выше 48 бит все нули, ниже 32 бит не все нули
Целое: невозможно
При помещении результата с фиксированной точкой в регистр MR потерявшая значащие разряды часть результата доступна в MR0 (только для дробного результата).
Отрицательный флаг определен для всех операций умножителя. MN устанавливается, если результат операции умножителя отрицательный. Иначе сброшен.
Переполнение определено для всех операций умножителя с фиксированной и плавающей точкой. Для результатов с плавающей точкой MV и MVS устанавливаются, если результат после округления переполнен (несмещенный порядок > 127).
Для результатов с фиксированной точкой установка MV и MOS зависит от формата данных и происходит при следующих условиях:
Дополнительный код:
Дробное: выше 17 бит MR не все нули или все единицы
Целое: выше 49 бит MR не все нули или все единицы
Беззнаковый:
Дробное: выше 16 бит MR не все нули
Целое: выше 48 бит MR не все нули
При помещении результата с фиксированной точкой в регистр MR переполненная часть результата доступна в MR1 и MR2 (для целого результата) или только в MR2 (для дробного результата).
Флаг ошибки определен для умножения с плавающей точкой. Ml устанавливается, если:
входной операнд NAN;
входные операнды бесконечность или ноль (замечание: ненормализованные операнды обрабатываются как нули).
Иначе Ml сброшен.
* установлен или сброшен, в зависимости от результатов выполнения команды
** может быть установлен (но не сброшен), в зависимости от результатов выполнения команды - не изменяется
Rn,Rx,Ry = R15-R0; регистры регистрового файла; обрабатываются как операнды с фиксированной точкой
Fn,Fx,Fy = F15-F0; регистры регистрового файла; обрабатываются как операнды с плавающей точкой
MRxF = MR2F, MR1F, MR0F; основные накопители результата операции умножителя
MRxB = MR2B, MR1B, MR0B; дополнительные накопители результата операции умножителя
Устройство сдвига работает с 32-разрядными операндами с фиксированной точкой. Операции устройства сдвига:
сдвиги и циклические сдвиги из крайнего левого положения в крайнее правое;
операции с битами: установка, обнуление, переключение и проверка;
операции с полем бит: извлечение и внесение;
поддержка ADSP-2100-совместимых операций преобразования форматов фиксированная/плавающая точка (нахождение порядка, числа начальных единиц или нулей).
Устройство сдвига обрабатывает от одного до трех входных операндов: X определяет операнд, над которым производится операция; Y определяют величину сдвига, длину поля или положение битов; Z определяет операнд, который обновляется после операции над ним (например, Rn=Rn OR LSHIFT Rx BY Ry). Устройство сдвига возвращает один результат в регистровый файл.
Входные операнды берутся из 32 старших бит регистра регистрового файла (биты 39-8, как показано на рис.2.4) или из непосредственного значения в команде. Операнды передаются в течение первой половины цикла. Результаты сохраняются в 32 старших битах регистра (8 младших разрядов обнуляются) в течение второй половины цикла. Т.о., устройство сдвига может считывать и записывать один и тот же регистр регистрового файла за один цикл.
Некоторые операции устройства сдвига выводят 8-разрядные или 6-разрядные результаты. Эти результаты размещаются либо в поле shf8, либо в поле bit6 (см. рис.2.5) и дополняются по знаку до 32 бит.Т.о., устройство сдвига всегда возвращает 32-разрядный результат.
В конце операции устройство сдвига возвращает три флага состояния. Все эти флаги появляются в регистре ASTAT. Флаг SZ устанавливается, если результат равен нулю, флаг SV указывает на переполнение, флаг SS указывает, что входной операнд знаковый в операции определения порядка.
Бит ASTAT Имя Описание
11SV переполнение результата устройства сдвига или биты
слева от старшего бита
SZ нулевой результат устройства сдвига
SS знак входного операнда устройства сдвига
(только при определении порядка)
Обновление флага происходит в конце цикла, в котором генерируется состояние, а в следующем цикле он становится доступным. Если программа осуществляет прямую запись в регистры ASTAT в том же цикле, в котором устройство сдвига выполняет операцию, то явная запись имеет преимущество.
На нулевой флаг влияют все операции устройства сдвига. Он устанавливается, если:
результат операции устройства сдвига равен нулю;
команда проверки бит определяет бит вне 32-разрядного поля с фиксированной точкой.
Иначе SZ сброшен.
На SV влияют все операции устройства сдвига. Он устанавливается, если:
значащие разряды сдвинуты влево от 32-разрядного поля с фиксированной точкой;
обнаружен, установлен или очищен бит вне 32-разрядного поля с фиксированной точкой;
извлечено поле, которое частично или целиком находилось слева от 32-разрядного поля с фиксированной точкой;
операции LEFTZ или LEFTO возвращают результат больше 32.
Иначе SV сброшен.
На флаг SS влияют все операции устройства сдвига. Для обеих операций извлечения порядка флаг устанавливается, если входной операнд с фиксированной точкой отрицательный, и очищается, если положительный. Для всех других операций SS обнуляется.
Команда |
Флаги |
SZ |
SV |
SS |
с Rn=LSHIFT Rx BY Ry |
* |
* |
0 |
с Rn=LSHIFT Rx BY <data8> |
* |
* |
0 |
с Rn=Rn OR LSHIFT Rx BY Ry |
* |
* |
0 |
с Rn=Rn OR LSHIFT Rx BY <data8> |
* |
* |
0 |
с Rn= ASHIFT Rx BY Ry |
* |
* |
0 |
с Rn= ASHIFT Rx BY <data8> |
* |
* |
0 |
с Rn=Rn OR ASHIFT Rx BY Ry |
* |
* |
0 |
с Rn=Rn OR ASHIFT Rx BY <data8> |
* |
* |
0 |
Rn=ROT Rx BY Ry |
* |
0 |
0 |
Rn=ROT Rx BY <data8> |
* |
0 |
0 |
Rn=BCLR Rx BY Ry |
* |
* |
0 |
Rn=BCLR Rx BY <data8> |
* |
* |
0 |
Rn=BSET Rx BY Ry |
* |
* |
0 |
Rn=BSET Rx BY <data8> |
* |
* |
0 |
Rn=BTGL Rx BY Ry |
* |
* |
0 |
Rn=BTGL Rx BY <data8> |
* |
* |
0 |
BTST Rx BY Ry |
* |
* |
0 |
BTST Rx BY <data8> |
* |
* |
0 |
Rn=FDEP Rx BY Ry |
* |
* |
0 |
Rn=FDEP Rx BY <bit6>: <len6> |
* |
* |
0 |
Rn=Rn OR FDEP Rx BY Ry |
* |
* |
0 |
Rn=Rn OR FDEP Rx BY <bit6>: <len6> |
* |
* |
0 |
Rn=FDEP Rx BY Ry (SE) |
* |
* |
0 |
Rn=FDEP Rx BY <bit6>: <len6> (SE) |
* |
* |
0 |
Rn=Rn OR FDEP Rx BY Ry (SE) |
* |
* |
0 |
Rn=Rn OR FDEP Rx BY <bit6>: <len6> (SE) |
* |
* |
0 |
Rn=FEXT Rx BY Ry |
* |
* |
0 |
Rn=FEXT Rx BY <bit6>: <len6> |
* |
* |
0 |
Rn=FEXT Rx BY Ry (SE) |
* |
* |
0 |
Rn=FEXT Rx BY <bit6>: <len6 (SE) |
* |
* |
0 |
с Rn=EXPRx (EX) |
* |
0 |
* |
с Rn=EXP Rx |
* |
0 |
* |
Rn=LEFTZ Rx |
* |
* |
0 |
Rn=LEFTO Rx |
* |
* |
0 |
Rn=FPACK Fx |
0 |
* |
0 |
Fn=FUNPACK Rx |
0 |
0 |
0 |
*= зависит от данных |
Rn, Rx, Ry = любой регистр регистрового файла; используемое поле бит зависит от команды |
Fn, Fx = любой регистр регистрового файла; слове |
| с плавающей |
точкой |
Наряду с операциями, выполняемыми каждым вычислительным устройством отдельно, в ADSP-2106x поддерживаются многофункциональные вычисления, когда реализуются параллельные операции ALU и умножителя или двойные функции в ALU. Многофункциональные и однофункциональные вычисления выполняются аналогично. Обновление флагов происходит так же, за исключением того, что в двойной операции ALU сложение/вычитание флаги устанавливаются на основании операции "ИЛИ" между флагами от каждой операции.
При использовании ALU и умножителя для многофункциональных вычислений каждый из четырех входных операндов ограничен своим набором из четырех регистров регистрового файла (см. ниже рис.2.9). Например, операнд X в ALU может быть только R8, R9, R10 или R11. Во всех других операциях входной операнд может быть любым регистром регистрового файла.
Двойное сложение/вычитание
Ra=Rx+Ry, Rs=Rx-RyFa=Fx+Fy, Fs=Fx-Fy
Умножение/накопление и сложение, вычитание или усреднение с фиксированной точкой
Ra = RH-8 + R15-12 Ra = Rll-8-R15-12 Ra = (Rll-8 + R15-12) /2
Rm = R3-0 * R7-4 (SSFR) MRF = MRF + R3-0 * R7-4 (SSF) Rm = MRF + R3-0 * R7-4 (SSFR) MRF = MRF - R3-0 * R7-4 (SSF) Rm = MRF - R3-0 * R7-4 (SSFR)
Умножение и операция ALU с плавающей точкой
Fm = F3-0 * F7-4,Fa = FH-8 + F15-12
Fa = Fll-8-F15-12
Fa = FLOAT Rll-8 by R15-12
Ra = FIX Fl 1 - 8 by R15-12
Fa = (Fll-8 + F15-12) /2
Fa = ABSFH-8
Fa = MAX (Fll-8, F15-12)
Fa = MIN (FH-8, F15-12)
Умножение и двойное сложение/вычитание
Rm = R3-0 * R7-4 (SSFR), Fm = F3-0 * F7-4,Ra = Rll-8 + R15-12, Fa = FH-8 + F15-12,Rs = Rll-8-R15-12 Fs = FH-8-F15-12
Rm, Ra, Rs, Rx, Ry - любой регистр регистрового файла; операнд с фиксированной точкой Fm, Fa, Fs, Fx, Fy - любой регистр регистрового файла; операнд с плавающей точкой
SSFR - операнд Х знаковый, операнд Y знаковый, дробные входные данные, результат округлен к ближайшему
SSF - операнд X знаковый, операнд Y знаковый, дробные входные данные
Регистровый файл обеспечивает интерфейс между внутренними шинами данных процессора и вычислительными устройствами. Он также служит для хранения операндов и локальных результатов. Регистровый файл состоит из 16 первичных и 16 дополнительных (вторичных) регистров. Все регистры - 40-разрядные.32-разрядные данные из вычислительного устройства всегда выравниваются влево; при считывании регистра 8 младших разрядов игнорируются, при записи - заполняются нулями.
Обмен данными между памятью программы или памятью данных с регистровым файлом происходит по шине данных памяти программы (РМ) и по шине данных памяти данных (DM) соответственно. Одно обращение по шине данных РМ и по шине данных DM может происходить за один цикл. Между регистровым файлом и 40-разрядной шиной данных DM всегда передается 40-разрядное слово. Регистровый файл передает данные по 48-разрядной шине данных РМ в 40 старших разрядах, заполняя нулями младшие.
Если один и тот же регистр регистрового файла определен как источник операнда и как место помещения результата или выборки данных из памяти, то считывание происходит в первую половину цикла, а запись - во вторую. Т.о., старые данные используются как операнды перед тем, как регистр обновляется новыми данными результата. Если осуществляется несколько записей в один тот же регистр регистрового файла одновременно, то запись происходит в соответствие с приоритетом операций. Реально запишутся данные операции с наивысшим приоритетом. Приоритет операций определяется источником записываемых данных. Ниже перечислены устройства в порядке уменьшения приоритета:
память данных или универсальный регистр;
память программы;
ALU;
умножитель;
устройство сдвига.
Один и тот же регистр в регистровом файле начинается с префикса F (в исходном коде ассемблера), когда он используется в вычислениях с плавающей точкой. И начинается с префикса R, когда используется в вычислениях с фиксированной точкой. Например, следующие команды используют одни и те же регистры:
FO=F1 * F2; умножение с плавающей точкой R0=R1 * R2; умножение с фиксированной точкой
Префиксы F и R не влияют на передачу 32-разрядных (или 40-разрядных) данных; они только определяют, как ALU, умножитель, или устройство сдвига обрабатывают данные. F и R могут быть прописными и строчными; в ассемблере не учитывается регистр клавиатуры.
Для облегчения быстрого контекстного переключения в регистровом файле имеется дополнительный набор регистров. Каждая половина регистрового файла: младшая - R0-R7 - и старшая - R8-R15 - может независимо подключать свой дополнительный набор. Активный набор определяется двумя битами в регистре MODEL Бит M0DE1 Имя
Описание:
7SRRFH дополнительный набор регистрового файла выбран для R15-R8 (F15-F8) 10SRRFL дополнительный набор регистрового файла выбран для R7-R0 (F7-F0). Замечание: после установки бита в регистре MODE1 дополнительный набор регистров становится доступным через один цикл. Например: BIT SET MODE1 SRRFL; /* активизация дополнительных регистров */ NOP; /* ожидание, пока активизируются */ /* дополнительные регистры */ R0=7.
|