ВЫЧИСЛИТЕЛЬНЫЕ УСТРОЙСТВА

2.1 ОБЗОР

(Описываются архитектура и функции трех вычислительных устройств: арифметико-логического устройства (АЛУ), умножителя-накопителя и устройства циклического сдвига.)

Каждый процессор семейства ADSP-2100 является 16-разрядным процессором с фиксированной точкой. Большинство операций предполагает представление чисел в дополнительном коде, в остальных случаях предполагается работа с беззнаковыми числами или с простыми последовательностями двоичных символов. Предусмотрена поддержка арифметических операций над несколькими словами и операции с блочной плавающей точкой.

Знаковые числа в процессорах семейства ADSP-2100 всегда представлены в дополнительном коде. Двоично-десятичный формат, числа со знаком, обратный дополнительный код и коды с избытком n не используются.

2.1.1 Последовательности двоичных символов

Это самое простое двоичное представление; 16 бит здесь представлены как набор двоичных разрядов. Примерами вычислений с использованием этого формата являются логические операции: NOT, AND, OR, XOR. В этих операциях операнды используются как последовательности двоичных символов, а знаковый бит и положение двоичной точки не предусмотрены.

2.1.2 Беззнаковый формат

Беззнаковые двоичные числа могут быть представлены как положительные числа, в два раза превышающие по модулю знаковые числа той же длины. Наименее значимые слова чисел с повышенной точностью считаются беззнаковыми числами.

2.1.3 Знаковые числа в дополнительном коде

Когда мы говорим о семействе ADSP-2100, "знаковый" относится к представлению в двоичном коде. Большинство операций процессоров семейства поддерживают или предполагают арифметические операции над числами, представленными в дополнительном коде. В семействе ADSP-2100 не используетcя двоично-десятичный формат, числа со знаком, обратный дополнительный код и коды с избытком n.

2.1.4 Представление дробных чисел в формате 1.15

Арифметические операции процессоров семейства ADSP-2100 оптимизированы для операций над числовыми значениями в дробном двоичном формате, обозначенном как 1.15 (один точка пятнадцать). В этом формате имеется один знаковый бит (самый старший бит) и пятнадцать бит, отведенных под дробную часть и представляющих значения от -1 до +1 минус один младший бит.

На рис. 2.1 показаны веса битов для чисел в формате 1.15. Ниже даются примеры чисел в формате 1.15 и их десятичные эквиваленты.

Число в формате 1.

15 Его десятичный эквивалент

0õ0001

0.000031

Ox7FFF

0.999969

OxFFFF

-0.000031

0õ8000

-1.000000

2.1.5 Арифметические операции АЛУ

Во всех операциях АЛУ, за исключением примитивов знакового деления (DIVS), операнды и результаты представляются как простые двоичные последовательности из 16 бит. Различные биты (разряды) состояния представляют результаты в знаковом формате: код переполнения (AV) и флаг отрицание (AN).

Логика бита переполнения (AV) базируется на арифметических операциях с представлением чисел в дополнительном коде. Он устанавливается в тех случаях, когда самый старший бит изменяется непредусмотренным знаками операндов и сущностью операции образом. Например, при сложении двух положительных чисел должен получиться положительный результат; изменение знакового бита означает переполнение, и устанавливается AV. Сложение отрицательного и положительного числа может иметь и отрицательный, и положительный результат, но не может привести к переполнению.

Логика бита переноса (АС) базируется на арифметических операциях с беззнаковыми числами. Он устанавливается в тех случаях, когда перенос генерируется битом 16 (самым старшим битом). Бит АС более полезен для младших бит слова при операции с несколькими словами.

2.2 АРИФМЕТИКО-ЛОГИЧЕСКОЕ УСТРОЙСТВО (АЛУ)

Арифметико-логическое устройство (АЛУ) обеспечивает выполнение стандартного набора арифметических и логических операций. К первым относятся сложение, вычитание, инвертирование (отрицание), инкремент, декремент и нахождение абсолютного значения. Эти операции дополнены двумя примитивами деления, при помощи которых операция деления может выполняться за несколько циклов. К логическим операциям относятся логическое И (AND), ИЛИ (OR), исключающее ИЛИ (XOR) и НЕ (NOT).

2.2.1 Блок-схема АЛУ

Блок-схема АЛУ представлена на рис. 2.2.

АЛУ разрядностью 16 бит имеет два 16-битовых порта ввода - Х и Y, и один порт вывода - R. АЛУ принимает сигнал переноса (CI), который является битом переноса из арифметического регистра состояния (ASTAT). В АЛУ генерируется 6 сигналов состояния: состояние-ноль (AZ), отрицания (AN), переноса (АС), переполнения (AV), ввода знака через порт Х (AS) и состояние частного (AQ). Все сигналы арифметического состояния фиксируются в арифметическом регистре состояний (ASTAT) в конце цикла.

Порт ввода Х АЛУ может принимать данные из двух источников: регистров АХ или шины результатов (Р-шина). Р-шина соединяет регистры вывода всех вычислительных устройств, позволяя использовать их как операнды ввода. Имеется два регистра АХ: АХО и АХ1. Считывание из этих регистров и запись в них может производиться с шины ДПД. В наборе команд предусматривается также считывание этих регистров на шину ДПП, но в данном случае нет прямого соединения; в этой операции используется устройство обмена данными между шинами ДПП и ДПД. Два выхода регистров АХ позволяют осуществлять ввод с | одного регистра в АЛУ, в то время как другой передает данные на шину ДПД. f

Порт ввода Y АЛУ также может принимать данные из двух источников:

регистров AY и регистра обратной связи АР АЛУ. Имеется два регистра AY: AYO и AY1. Считывание из этих регистров и запись в них производится с шины ДПД, запись может также производится из шины ДПП. В наборе команд предусматривается считывание из этих регистров на шину ДПП, но в данном случае нет прямого соединения; в этой операции используется устройство обмена данными между шинами ДПП и ДПД. Два выхода регистров AY могут обеспечить ввод данных в АЛУ одновременно с передачей данных на шину ДПД.

Выходные данные АЛУ загружаются либо в регистр обратной связи АЛУ (AF), либо в регистр результатов АЛУ (AR). Регистр AF является внутренним регистром АЛУ и позволяет использовать результат АЛУ прямо в качестве входного значения для порта Y АЛУ. Регистр AR может передавать данные как на шину ДПД, так и на шину результатов. Этот регистр может прямо загружаться с шины ДПД. В наборе команд предусматривается также считывание с AR на шину ДПП, но в данном случае нет прямого соединения; для этой операции используется устройство обмена данными между шинами ДПП и ДПД.

В любой из регистров, связанных с АЛУ, может производиться запись/ считывание в течении одного и того же цикла. Считывание с регистров производится в начале цикла, а запись в регистры - в конце цикла. Следовательно, при считывании из регистра считывается значение, загруженное в этот регистр в конце предшествовавшего цикла. Новое значение, записанное в регистр, не может быть считано до начала последующего цикла. Это позволяет регистрам ввода АЛУ обеспечивать АЛУ операндом в начале цикла и обновляться следующим операндом из памяти в конце того же цикла. Это также позволяет сохранять содержимое регистра результатов в памяти и обновлять этот регистр новым значением результата в течении одного и того же цикла.

Шина ДПП 24 -

Рис. 2.2 Блок-схема АЛУ

В АЛУ содержится двойной ряд регистров, которые показаны на рис. 2.2 за основными регистрами. В действительности имеется два набора регистров AR, AF, АХ и AY. В любой определенный момент времени доступным является только один ряд регистров. Дополнительный ряд регистров может быть активизирован для чрезвычайно быстрого контекстного переключения (например, во время подпрограммы обслуживания прерывания). В таком случае новая задача (т.е. обслуживание прерывания в примере) может быть выполнена без передачи текущих состояний в ЗУ.

Выбор основного или альтернативного ряда регистров управляется битом О в регистре состояния режима процессора (MSTAT). Если этот бит принимает значение 0, выбирается основной ряд; если он равен 1, выбирается теневой ряд регистров.

2.2.2 Стандартные функции

Список стандартных функций АЛУ

R=X+Y

Сложить операнды Х и Y

R = Х + Y +CI

Сложить операнды X и Y и бит переноса

R= Х- Y

Вычесть операнд Y из Х

R = Х - Y + CI - 1

Вычесть операнд Y из Х с "заемом" (единицы старшего

 

 

разряда при вычитании)

R=Y -X

Вычесть Х из операнда Y

R = Y - X +CI - 1

Вычесть Х из операнда Y с "заемом"

R=-X

Инвертирование операнда Х (в дополнительном коде)

R=-Y

Инвертирование операнда Y (в дополнительном коде)

R=Y+ 1

Инкрементирование операнда Y

R= Y - 1

Декрементирование операнда Y

R = PASS X

Пропустить операнд Х для сохранения результата

 

 

неизменным

R = PASS Y

Пропустить операнд Y для сохранения результата

 

 

неизменным

R = 0 (PASS 0)

Обнуление результата

R = ABS X

Найти абсолютное значение операнда Х

R =X AND Y

Логическое И над операндами Х и Y.

R = X OR Y

Операция логического ИЛИ над операндами Х и Y

R = X XOR Y

Операция исключающего ИЛИ над операндами Х и Y

R = NOT X

Операция логического НЕ над операндом Х (в дополни

 

 

тельном коде)

R = NOT Y

Операция логического НЕ над операндом Y (в дополни

 

 

тельном коде)

2.2.3 Регистры ввода/вывода АЛУ

Ниже показаны источники ввода данных в регистры ввода и вывода АЛУ.

Источники ввода данных Источники ввода данных Направление вывода дан-

в порт Х в порт Y ных через порт R

АХО, АХ1 AYO, AY1 AR

AR AF AF

MRO, MR1, MR2

SRO, SR1

MRO, MR1 и MR2 являются регистрами результатов умножителя/ накопителя; SRO и SR1 - регистры результатов устройства сдвига.

2.2.4 Возможность операций с повышенной точностью

Операции с многократно увеличенной точностью поддерживаются в АЛУ сигналом переноса и битом состояния переноса АЛУ (АС). Сигнал переноса является битом состояния АС, который был получен при выполнении предыдущей операции АЛУ. Операция "сложение с переносом" (+С) предназначена для сложения старших разрядов чисел с повышенной точностью. Операция "Вычитание с "заемом" (С - 1 - является "заемом") предназначена для вычитания старших разрядов чисел с многократно увеличенной точностью.

2.2.5 Режим насыщения АЛУ

В регистре AR имеется режим насыщения для операций в дополнительном коде, который автоматически устанавливает значение этого регистра максимально отрицательным или положительным, в тех случаях когда в АЛУ получается результат переполнения или потеря значащих разрядов. Этот режим работы АЛУ разрешается установкой бита 3 регистра состояния режима (MSTAT). В случае такого разрешения значение, загружаемое в регистр AR во время операции АЛУ, зависит от состояния переполнения и переноса, генерируемых АЛУ в этом цикле. В таблице на следующей странице представлена информация о загрузке AR при работе в режиме насыщения.

Режим насыщения в умножителе-накопителе, в отличие от операций в режиме насыщения АЛУ, действителен только для одной команды. Разрешение режима насыщения АЛУ, напротив, означает, что все последующие операции выполняются этим способом.

Òàáëèöà 2.2

Режим насыщения

Переполнение (AV)

Перенос (АС)

Содержимое AR

 

 

0

0

Выходные данные

 

 

 

 

 

 

Л TTV

r\J и

 

0

1

Выходные данные

 

 

 

 

 

 

л rrv

r\JU

 

1

0

0111111111111111

полномасштабная поло

 

 

 

 

 

жительная величина

1

1

1000000000000000

полномасштабная отри

 

 

 

 

 

нательная величина

В режиме насыщения АЛУ преобразования происходят только в регистре AR; если данные выводятся через регистр АР, происходит возврат по циклу, а насыщение результата отражается флагами состояний.

2.2.6 Режим фиксации переполнения АЛУ

Режим фиксации переполнения АЛУ разрешается установкой бита 2 в регистре состояния режима (MSTAT) и приводит к фиксированию бита AV, после того как он был установлен. При переполнении АЛУ в этом режиме бит AV устанавливается и сохраняется даже тогда, когда в последующих операциях АЛУ переполнение не генерируется. В этом режиме сброс AV возможен только при записи его нулем прямо с шины ДПД.

2.2.7 Деление

АЛУ поддерживает операцию деления. Эта функция достигается за счет добавления цепи сдвига, не показанной на блок-схеме рис. 2.2. Деление осуществляется с помощью двух специальных примитивов деления, которые используются для выполнения невосстанавливаемого условного алгоритма деления сложением-вычитанием. Деление может быть либо знаковым, либо беззнаковым; | однако, делимое и делитель должны быть при этом в одном и том же виде. В Приложении В детально описываются различные исключения из нормальной операции деления, описываемой в данном разделе.

Деление с одинарной точностью с 32-разрядным делимым (числителем) и 16-разрядным делителем (знаменателем), в результате которого получается 16-разрядное частное, выполняется в течении 16 циклов. При этом также могут быть подсчитаны частные с более высокой и низкой точностью. Делитель может храниться в регистрах АХО, АХ1 или любом из регистров R. Старшие разряды знакового делимого могут начинаться либо в AY1, либо АР. Старшие разряды беззнакового делимого должны находиться в АР. Младшие разряды делимого, независимо от его вида, должны находиться в регистре AYO. В конце операции деления частное будет находиться в AYO.

Первый из двух примитивов деления "деление-знак" (DIVS) выполняется в начале деления при делении знаковых чисел. В этой команде в ходе выполнения операции логического ИЛИ над знаковыми битами делимого и делителя вычисляется знаковый бит частного. Содержимое регистра AYO сдвигается на одну позицию, таким образом, что полученный знаковый бит становится самым младшим битом. Вычисленный знаковый бит также загружается в бит AQ арифметического регистра состояния. Самый старший бит регистра AYO сдвигается в положение самого младшего бита регистра АР, а старшие 15 бит АР загружаются младшими 15 битами R из АЛУ, которые не поступая на вход Y идут прямо на выход R. В результате достигается левый сдвиг пары регистров АР - AYO и перемещение знакового бита частного в положение самого младшего бита. Операция DIVS показана на рис. 2.3.

При делении беззнаковых чисел операция DIVS не используется. В данном случае бит AQ в арифметическом регистре состояния (ASTAT) должен быть установлен в 0 путем сброса, осуществляемого вручную. Бит AQ указывает, что для последующих операций предполагается положительное частное.

Вторым примитивом деления является команда "деление-частное" (DIVQ), которая генерирует один бит частного и выполняется повторно для вычисления остальных бит частного. Для беззнакового деления с одинарной точностью команда DIVQ выполняется 16 раз для получения 16-разрядного частного.

Для знакового деления с одинарной точностью эта команда выполняется 15 раз, после того как знаковый бит был вычислен в ходе операции DIVS. Команда DIVQ сдвигает содержимое регистра AYO на один бит влево, таким образом что новый бит частного может быть помещен в положение самого младшего бита. Состояние бита AQ, сгенерированного в ходе выполнения предыдущей операции, определяет операцию АЛУ по вычислению текущего остатка. Если AQ = 1, АЛУ прибавляет делитель к текущему остатку в АР. Если AQ=0, АЛУ вычитает делитель из текущего остатка в АР. Результат с выхода R загружается в АР, так же как и в предыдущей операции DIVS. Бит AQ вычисляется при помощи операции исключающего ИЛИ над самым старшим битом делимого и самым старшим битом выходного значения АЛУ, а бит частного получается в результате инвертирования этого значения. Бит частного загружается в самый младший бит регистра AYO, который также сдвигается влево на один бит.

Формат частного для любого вида представления чисел может быть определен- исходя из формата делимого и делителя. Пусть NL представляет число бит ва от двоичной точки, a NR - число бит справа от двоичной точки делимого;

представляет число бит слева от двоичной точки, a DR - справа от двоичной ки делителя, тогда частное имеет NL - DL + 1 бит слева от двоичной точки, и - DR -1 бит справа от двоичной точки.

Чтобы гарантировать достоверность частного могут потребоваться некотрого-действия над форматами. Например, если оба операнда являются знаковыми и ностью дробными (делимое в формате 1.31, а делитель в формате 1.15), 'льтат будет полностью дробным (в формате 1.15), следовательно, делимое кно быть меньше делителя для получения достоверного результата.

Для деления двух целых чисел (делимое в формате 32.0, а делитель в мате 16.0) и получения целого частного (в формате 16.0) следует сдвинуть [мое на один бит влево (в формат 31.1) перед делением.

Делимое ВВВВВ.ВВВВВВВВВВВВВВВВВВВВВВВВВВВ

NL бит NR бит

Делитель ВВ.ВВВВВВВВВВВВВВ

DL бит DR бит Частное ВВВВ.ВВВВВВВВВВВВ

(NL - DL + 1) бит (NR - DR -1 ) бит

Рис. 2.5 Формат частного

Переполнение происходит, когда результат не может быть представлен в формате, вычисленном для частного согласно приведенной выше схеме, или когда делитель равен нулю или меньше делимого по абсолютному значению.

2.2.8 Состояния АЛУ

Ниже описываются биты состояния АЛУ в регистре ASTAT. Полная информация о регистре ASTAT, мнемонике специальных битов и их позициях дается в главе "Управление программой".

Флаг

t/f и а llMJt

Описание

AZ

Ноль

Логическое ИЛИ-НЕ всех бит в регистре результатов

 

 

 

 

АЛУ. Истинно, если выходное значение АЛУ равно

 

 

 

нулю.

AN

Отрицание

Знаковый бит результата АЛУ. Истинно, если выходное

 

 

 

 

значение АЛУ отрицательно.

AV

Переполнение

Исключающее ИЛИ выходных значений переноса двух

 

 

 

 

самых старших слагаемых. Истинно, если АЛУ пере

 

 

 

полнено.

АС

Перенос

Выходное значение переноса от самого старшего сла

 

 

 

гаемого.

AS

Знак

Знаковый бит порта ввода Х АЛУ. Имеет значение

 

 

 

 

только для команды ABS.

AQ

Частное

Бит частного генерируется только командами DIVS и

2.3 УМНОЖИТЕЛЬ-НАКОПИТЕЛЬ (УМНОЖИТЕЛЬ)

Умножитель обеспечивает высокую скорость умножения, умножение с накопленным сложением и вычитанием, функции насыщения и сброса в ноль. Функция обратной связи позволяет использовать часть выходных значений сумматора в качестве одного из сомножителей в следующем цикле.

2.3.1 Блок-схема умножителя-накопителя

Блок-схема умножителя-накопителя приведена на рис. 2.6. В умножителе имеется два входных порта Х и Y разрядностью 16 бит и порт вывода результата Р разрядностью 32 бита. Результат разрядностью 32 бита передается в 40-разрядный сумматор/вычитатель, который прибавляет или вычитает новый результат из содержимого регистра умножителя MR или передает новый результат прямо в MR. Регистр MR имеет разрядность 40 бит. В данном руководстве весь регистр обозначен как MR. В действительности он состоит из трех регистров меньших размеров: MRO и MR1, которые имеют разрядность 16 бит, и MR2 разрядностью 8 бит.

Сумматор/вычитатель имеет разрядность, большую чем 32, чтобы предотвратить переполнение при выполнении серии операций умножителя-накопителя. Бит состояния переполнения умножения (MV) устанавливается, когда сумматордевяти битах регистра MR имеются старшие (беззнаковые) биты (при операциях над числами в дополнительном коде).

Регистры ввода/вывода умножителя аналогичны регистрам ввода/вывода АЛУ.

Порт ввода Х может принимать данные либо из регистров MX, либо из любого регистра по Р-шине (результатов). Р-шина соединяет регистры вывода всех вычислительных устройств, что позволяет использовать их сразу в качестве операндов ввода. Имеется два регистра MX: МХО и МХ1. Запись в эти регистры и считывание из них может производиться с шины ДПД. Два выхода регистров MX позволяют осуществлять ввод данных в умножитель одновременно с передачей данных на шину ДПД.

Порт ввода Y может принимать данные либо из регистров MY, либо из регистра MF. Имеется два регистра MY: MYO и MY1. Запись в эти регистры и считывание с них может производиться с шины ДПД, а запись также может быть произведена и с шины ДПП. В наборе команд предусматривается также считывание из этих регистров на шину ДПП, но в данном случае нет прямого соединения; в этой операции используется устройство обмена данными между шинами ДПД и ДПП. Один из регистров MY может обеспечивать ввод данных в умножитель, в то время как другой одновременно передает данные на шину ДПД.

Выходное значение умножителя-аккумулятора поступает либо в регистр MF, либо в регистр MR. MF является регистром обратной связи и позволяет использовать биты результата 16-31 в качестве вводимых через порт Y данных в последующем цикле. Регистр сумматора/вычитателя MR разрядностью 40 бит разделен на три составные части: MRO, MR1 и MR2. Каждый из этих регистров может загружаться непосредственно с шины ДПД и передавать данные либо на шину ДПД, либо на Р-шину.

Запись и считывание из любого регистра, связанного с умножителем-накопителем, может осуществляться в одном и том же цикле. Считывание из регистров происходит в начале цикла, а запись в регистры - в конце цикла. Следовательно, при считывании из регистра считывается значение, загруженное в этот регистр в конце предыдущего цикла. Новое значение, записанное в регистр, невозможно считать до следующего цикла. Это позволяет регистру ввода обеспечивать умножитель операндом в начале цикла и обновлять свое содержимое следующим операндом из памяти в конце этого же цикла. Это также позволяет хранить содержимое регистра результатов в памяти и обновлять его новым результатом в течении этого же цикла. Пример считывания и записи в течение одного цикла можно найти в главе 15 "Набор команд" в разделе "Многофункциональные команды".

В умножителе имеется двойной ряд регистров, которые можно видеть на рис. 2.6 за основными регистрами. В действительности существует два набора регистров MR, MF, MX, MY. В любой определенный момент времени доступен только один ряд. Дополнительный ряд регистров может быть активизирован для чрезвычайно быстрого контекстного переключения. Таким образом, новая задача, например программа обслуживания прерываний, может выполняться без необходимости передачи текущих состояний в ЗУ.

Выбор основного или альтернативного ряда регистров определяется битом О в регистре состояния режима процессора (MSTAT). Если этот бит равен 0, то выбран основной ряд, если он равен 1 - альтернативный ряд регистров.

2.3.2 Операции умножителя-накопителя

В данном разделе описываются функции умножителя, форматы ввода данных и поведение умножителя при насыщении и переполнении.

 

2.1.6 Арифметические операции умножителя

Результаты, полученные в умножителе, представляют собой последовательности двоичных символов. Входные значения интерпретируются согласно информации, представленной в самой команде (знаковое число - во сколько раз -знаковое, беззнаковое - во сколько раз - беззнаковое, смешанное умножение, округление). Предполагается, что 32-разрядный результат умножителя представлен как знаковый, так как он далее расширяется по знаку в наборе регистров MR разрядностью 40 бит.

Процессоры семейства ADSP-2100 поддерживают два режима преобразования формата: дробный режим для дробных операндов, формат 1.15 (1 знаковый бит и 15 бит для представления дробной части), и целочисленный режим для целочисленных операндов, формат 16.0.

При перемножении процессором двух операндов в формате 1.15 получается число в формате 2.30 (2 знаковых бита и 30 бит для представления дробной части). В режиме умножения дробных чисел умножитель автоматически сдвигает полученный им результат Р влево перед передачей его в регистр результатов умножителя (MR). Благодаря этому сдвигу результат умножителя получается в формате 1.31, который можно округлить до формата 1.15. Эта операция показана на рис. 2.7 в разделе, посвященном умножителю.

В режиме целочисленного умножения левый сдвиг не происходит. Например, если операнды представлены в формате 16.0, 32-разрядный результат умножителя должен быть в формате 32.0. Нет никакой необходимости в сдвиге влево; он только изменит числовое представление. Данное положение иллюстрируется на рис. 2.8 в разделе, посвященном умножителю.

2.1.7 Арифметические операции устройства сдвига

Многие операции в устройстве сдвига явным образом расписаны для знаковых (представленных в дополнительном коде) или беззнаковых величин:

логический сдвиг предполагает представление величин без знака или значений последовательностей двоичных символов, а арифметический сдвиг предполагает представление чисел в дополнительном коде.

Логика порядка числа допускает использование чисел, представленных в дополнительном коде. Эта логика поддерживает операции с блочной плавающей точкой, которые также базируются на представлении дробной части в дополнительном коде.

2.3.2 Операции умножителя-накопителя

В данном разделе описываются функции умножителя, форматы ввода данных и поведение умножителя при насыщении и переполнении.

2.3.2.1 Стандартные функции

Функциями умножителя-накопителя являются:

X*Y Умножение операндов Х и Y

MR + X*Y Умножение операндов Х и Y и сложение результата ссодержимым регистра MR

MR - X*Y Умножение операндов Х и Y и вычитание полученногорезультата из содержимого регистра MR.

О Обнуление результата регистра MR.

Процессоры семейства ADSP-2100 имеют два режима для стандартной операции умножения с накоплением: режим умножения дробных чисел (в формате 1.15) и режим умножения целых чисел (в формате 16.0).

В режиме умножения дробных чисел результат Р разрядностью 32 бита регулируется по формату, то есть дополняется по знаку и сдвигается на один бит влево, перед добавлением к содержимому регистра MR. Например, бит 31 результата Р выравнивается до бита 32 регистра MR (то есть бита 0 регистра MRO). Самый младший бит содержит 0. Формат результата умножения в режиме дробных чисел показан на рис. 2.7.

В режиме умножения целых чисел содержимое регистра результата Р разрядностью 32 бита не сдвигается перед добавлением его к содержимому регистра MR. На рис.2.8 показано расположение результата умножения целых

Режим умножения задается битом 4 регистра состояния режима (MSTAT). Если указанный бит равен 1, то выбран режим умножения целых чисел. В противном случае выбран режим умножения дробных чисел. В обоих режимах результат умножения Р помещается в 40-разрядный сумматор/вычитатель, в котором новое значение результата добавляется к текущему значению регистра MR, и в итоге получается конечный результат Р разрядностью 40 бит.

2.3.2.2 Форматы ввода данных

Чтобы обеспечить умножение с повышенной точностью, при вводе операндов Х и Y в умножитель возможны любые комбинации чисел в дополнительном коде и в беззнаковом формате.

Операнд Х

 

 

Операнд Y

знаковый

*

знаковый

беззнаковый

*

знаковый

знаковый

*

беззнаковый

беззнаковый

*

беззнаковый

Форматы ввода данных задаются как часть команды. Они динамически выбираются каждый раз, когда используется умножитель.

Режим "знаковый*знаковый" используется при умножении двух знаковых чисел с одинарной точностью или старших слов двух знаковых чисел с повышенной точностью.

Режимы "беззнаковый*знаковый" и "знаковый*беззнаковый" используются при умножении старших бит одного знакового числа с повышенной точностью на младшие биты другого, или при умножении знакового числа с одинарной точностью на беззнаковое число с одинарной точностью.

Режим "беззнаковый*беззнаковый" используется при умножении беззнаковых чисел с одинарной точностью или всех бит, кроме старших, двух знаковых чисел с повышенной точностью.

2.3.2.3 Регистры ввода/вывода умножителя-накопителя

Источники ввода данных и направление вывода данных умножителя приведены ниже. Источники ввода

2.3.2.4 Операции регистра MR

Как уже было показано на блок-схеме, регистр MR делится на три части:

MRO (биты 0-15), MR1 (битв 16-31) и MR2 (биты 32-39). Каждый из этих регистров может быть загружен с шины ДПД и может передавать данные на Р-шину или шину ДПД.

8-разрядный регистр MR2 привязан к младшим 8 битам этих шин. Когда MR2 передает данные на шину ДПД или Р-шину, происходит добавление знаковых бит для формирования 16-разрядной величины. Регистр MR1 также имеет возможность автоматического добавления знаковых бит. Когда MR1 загружается с шины ДПД, каждый бит регистра MR2 устанавливается как знаковый бит (самый старший бит) MR1, таким образом, MR2 представляется как добавление к MR1. Чтобы загрузить в MR2 значение, отличное от этих дополнительных бит знака MR1, следует загружать MR2, после того как MR1 был уже Загрузка MRO не влияет на содержимое MR2 и MR1; при загрузке MRO добавления знаковых бит не происходит, f

2.3.2.5 Переполнение и насыщение умножителя

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

В регистре MR предусмотрен режим насыщения, благодаря которому MR устанавливается на максимальное положительное или отрицательное значение при переполнении или потере значащих разрядов. Операция насыщения зависит от бита состояния переполнения (MV) в арифметическом регистре состояний (ASTAT) и от самого старшего бита регистра MR2. В следующей таблице представлена операция насыщения регистра MR. загружен.

2.3.2.6 Режим округления

В сумматоре имеется возможность округления 40-разрядного результата R на границе между 16 и 15 битами. Округление может быть задано как часть кода команды. Округленное выходное значение направляется либо в регистр MR, либо в регистр MF. При округлении с выводом результата в регистр MF содержимое этого регистра представляет собой округленный 16-разрядный результат. Аналогичным образом, при выборе MR в качестве регистра вывода округленный 16-разрядный результат содержится в MR1; округленное значение в MR1 отражается и на содержимом MR2, а MR1 и MR2 содержат, таким образом, округленный 24-разрядный результат.

В сумматоре используется округление по схеме без смещения. Условный метод округления со смещением заключается в добавлении 1 к 15-тому биту в цепочке сумматора. Округление по данному методу приводит к чисто положительному смещению, так как срединное значение (когда MRO = 0õ8000) всегда округляется в сторону увеличения. Это смещение устраняется в сумматоре за счет принудительной установки 16-го бита выводимого результата в 0 при обнаружении такого половинного значения. В результате этой установки нечетные значения MR1 округляются в сторону увеличения, а четные значения MR1 - в сторону уменьшения, что приводит в конечном итоге к нулевому смещению при большой выборке в случае равномерно распределенных значений.

 

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

2.3.2.7 Округление со смещением (ADSP-217x, ADSP-218x, ADSP-21msp5x)

В процессорах ADSP-217x, ADSP-218x и ADSP-21msp58/59 имеется режим, позволяющий производить, помимо нормального округления, операцию округления со смещением. Этот режим устанавливается битом BIASRND (бит 12 в регистре управления автобуферизацией последовательного порта SPORTO). Когда бит BIASRND равен 0, производится нормальное округление без смещения. Когда бит BIASRND равен 1, вместо нормального округления производится округление со смещением. При работе в режиме округления со смещением, в большую сторону при значении MRO, равном 0õ8000, округляются все, а не только нечетные значения MR1, например:

Результат округления со

смещением

00-0001-8000

00-0002-8000

00-0001-8001

00-0002-8001

00-0000-7FFF

00-0001-7FFF

Данный режим действует только, когда в регистре MRO содержится значение 0õ8000; во всех остальных случаях производятся операции округления без смещения. Такой режим позволяет более эффективно осуществлять алгоритмы, в которых используется округление со смещением, например, подпрограммы сжатия речи в системах GSM. В остальных алгоритмах предпочтительнее округление без смещения.

2.4 УСТРОЙСТВО ЦИКЛИЧЕСКОГО СДВИГА

Устройство сдвига обеспечивает полный набор функций сдвига для 16-оазрядных входных значений, в результате чего на выходе получается 32-разрядное значение. Сюда относятся арифметический и логический сдвиги и операция нормализации. Устройство сдвига также выполняет операции нахождения порядка и нахождения общего порядка для целого блока чисел. Эти базовые функции могут комбинироваться для эффективного управления преобразованием форматов чисел, включая представление с плавающей точкой.

2.4.1 Блок-схема устройства сдвига

В устройстве сдвига можно выделить следующие компоненты: массив устройства сдвига, логическое устройство ИЛИ/ПЕРЕДАЧА (OR/PASS), определитель порядка и логическое устройство сравнения порядка.

Массив устройства сдвига представляет собой регистр циклического сдвига размером 16 на 32 бита. В него вводится 16-разрядное значение, которое может быть помещено в любое место 32-разрядной области результата, от крайне правой до крайне левой, за один цикл. Таким образом, возможно 49 различных расположении в 32-разрядной области результата. Расположение входных 16 бит определяется управляющим кодом (С) и опорным сигналом HI/LO.

Массив устройства сдвига с обслуживающими его логическими устройствами окружены набором регистров. Регистр ввода устройства сдвига (SI), обеспечивает ввод данных в массив устройства сдвига и в определитель порядка. Считывание из регистра SI разрядностью 16 бит и запись в него может производиться с шины ДПД. Ввод данных в массив устройства сдвига и определитель порядка также производится из регистров AR, SR или MR по Р-шине. Регистр результата устройства сдвига (SR) имеет разрядность 32 бита и разделяется на два 16-разрядных регистра, SRO и SR1. Загрузка в регистры SRO и SR1 может производиться с шины ДПД, а вывод результата - либо на шину ДПД либо на Р-шину. Регистр SR также имеет обратную связь с логическим устройством ИЛИ/ ПЕРЕДАЧА для обеспечения операций сдвига с двойной точностью.

Регистр SE ("порядок устройства сдвига") разрядностью 8 бит содержит значение порядка при проведении операций нормализации и денормализации. Регистр SE может считываться и загружаться с 8 младших битов шины ДПД. Это значение 8.0 в дополнительном коде.

Регистр SB ("блок устройства сдвига") используется для операций с блочной плавающей точкой, во время которых в нем содержится значение блочного порядка, то есть значение, на которое должен произойти сдвиг для нормализации самого большого числа в блоке чисел. 5-разрядный регистр SB считывается и загружается с 5 младших битов шины ДПД. Это значение 5.0 в дополнительном коде.

Всегда, когда значения регистров SE или SB передаются на шину ДПД, в них добавляются знаковые биты для формирования 16-разрядного значения.

В устройстве сдвига имеется еще один ряд регистров, который показан на рис. 2.9 за основными регистрами. В действительности существует два набора регистров SE, SB, SI, SRI и SRO. В любой определенный момент времени доступным является лишь один ряд регистров. Дополнительный ряд регистров может быть активизирован для быстрого контекстного переключения. В этом случае новая задача, например, подпрограмма обслуживания прерываний, может быть выполнена без передачи текущих состояний в ЗУ.

Выбор основного или альтернативного ряда регистров определяется битом О в регистре состояния режима процессора (MSTAT). Когда этот бит равен 0, то выбирается основной ряд регистров; когда он равен 1, выбирается альтернативный ряд регистров.

Сдвиг входного значения зависит от управляющего кода (С) и опорного сигнала HI/LO. Управляющий код представляет собой 8-разрядную знаковую величину, которая показывает направление и число позиций, на которое сдвигается входное значение. Положительный код означает сдвиг влево (вверх), а отрицательный код - вправо (вниз). Управляющий код может иметь три источника: содержимое регистра порядка устройства сдвига (SE), отрицательное содержимое регистра SE или непосредственно значение из команды.

В расширенном состоянии HI (HIX) входное значение интерпретируется как результат сложения или вычитания, выполняемого в АЛУ, которое, может быть переполнено. Тогда определитель порядка учитывает состояние переполнения (AV). Если установлен бит AV, то выводится порядок +1. Чтобы указать на необходимость дополнительного бита в нормализованной мантиссе (бит переноса АЛУ); если AV не установлен, то состояние HIX функционирует также как HI. При выполнении функции извлечения порядка в режимах HI и HIX определитель порядка также выводит знаковый бит устройства сдвига (SS), который загружается в арифметический регистр состояния (ASTAT). Знаковый бит равен самому старшему биту входного значения устройства сдвига, за исключением тех случаев, когда установлен бит AV; если AV установлен в расширенном состоянии HI (HIX), то для восстановления знакового бита переполненного значения инвертируется самый старший бит.

В состоянии LO входное значение интерпретируется как младшие биты числа с двойной точностью. В этом состоянии определитель порядка определяет бит SS арифметического регистра состояния (ASTAT) как знаковый бит этого числа. Выходное значение определителя порядка загружается в регистр SE только, когда SE содержит -15. Это происходит только в том случае, когда старшие биты, которые должны обрабатываться в первую очередь, содержат все знаковые биты. Выходное значение определителя порядка сдвигается на -16, чем и объясняется то, что, фактически, входное значение представляет собой младшие 16 бит 32-разрядного числа. В таблице 2.5. приведены характеристики определителя порядка для всех трех режимов.

Логическое устройство сравнения порядка используется для нахождения самого большого значения порядка в массиве входных значений устройства сдвига. В соединении с определителем порядка, логическое устройство сравнения порядка находит порядок блока. Компаратор сравнивает значение порядка, извлеченное определителем порядка, со значением, хранящемся в регистре блочного порядка устройства сдвига SB и обновляет содержимое SB только, когда извлеченное значение порядка превышает значение в регистре SB.

2.4.2 Операции устройства сдвига

Устройство сдвига выполняет следующие функции (мнемоника команд показана в скобках):

Арифметический сдвиг (ASHIFT)

Логический сдвиг (LSHIFT)

Нормализация (NORM)

Определение порядка (ЕХР)

Нахождение (корректировка) блочного порядка (EXPANDJ) Эти основные команды устройства сдвига применяются при различных

арифметических операциях. В следующем разделе даются примеры выполнения

этих трех функций с одинарной и многократной точностью.

Извлечение блочного порядка

Непосредственный сдвиг

Нормализация

Денормализация

Функции устройства сдвига (арифметический сдвиг, логический сдвиг, нормализация и денормализация) могут дополнительно определяться режимами [SR OR] и HI/LO, чтобы облегчить выполнение операций с повышенной точностью. В режиме [SR OR] над результатом устройства сдвига и текущим содержимым SR выполняется операция логического ИЛИ. Это используется для соединения 16-разрядных частей в 32-разрядное значение в регистре SR. HI и LO модифицируют опорную точку сдвига: по старшим или младшим битам 32-разрядного регистра SR. Входные значения для этих операций устройства сдвига берутся или из регистра SI, или из любого другого регистра результатов,а 32-разрядный результат сдвига загружается в регистр SR.

2.4.2.1 Регистры ввода/вывода

Источники входных значений устройства сдвига и направление вывода результатов даны ниже:

Источники ввода данных Направление вывода результатов

SI SR (SRO, SR1)

AR

MRO, MR1, MR2

SRO, SR1

2.4.2.2 Нахождение блочного порядка

Эта функция определяет порядок самого большого по абсолютной величине числа в массиве чисел. Для ее реализации используется команда EXPANDJ. Ниже дается последовательность шагов при типичном случае.

А. Загрузка значения -16 в регистр SB

Регистр SB используется для хранения порядка всего блока чисел. После выполнения серии операций EXPANDJ в регистре SB возможны значения в диапазоне от -15 до 0. Если новое значение больше текущего, то логическое устройство сравнения порядка обновляет первоначальное содержимое регистра SB. При загрузке этого регистра значением -16 его содержимое всегда будет меньше, чем любые найденные значения порядка.

В. Обработка первого элемента массива:

Массив(1) = 11110101 10110001 Порядок =-3

-3 > SB(-16)

SB получает новое значение -3

С. Обработка следующего элемента массива:

Массив(2) = 00000001 01110110 Порядок = -6

-6<-3

SB сохраняет значение -3

D. Продолжение обработки элементов массива

Если находится такой элемент массива, порядок которого больше содержащегося в SB, то это новое значение порядка загружается в регистр SB. После такой обработки всех элементов массива в регистре SB оказывается порядок наибольшего числа во всем блоке. Операция нормализации в данном случае не выполняется. Операция EXPANDJ является чисто проверочной. Значение, содержащееся в регистре SB, может передаваться в регистр SE и использоваться для нормализации блока при следующем прогоне через устройство сдвига. Или оно может быть просто связанным с обрабатываемыми данными для последующей интерпретации.

2.4.2.3 Непосредственный сдвиг

При непосредственном сдвиге входная последовательность бит просто сдвигается вправо (сдвиг вниз) или влево (сдвиг вверх) на заданное число бит. Величина сдвига и его направление задаются непосредственно в команде (примеры этой команды можно найти в главе 15 "Набор команд"). Значение, управляющее сдвигом, является 8-разрядным знаковым числом. При непосредственном сдвиге регистр SE не используется и не изменяется.

Следующий пример показывает сдвиг вправо относительно старших бит SR (SR1). Это сдвиг в режиме HI.

SI = ОхВбАЗ;

SR = LSHIFT SI BY -5 (HI);

Входное значение 10110110 10100011

Величина сдвига -5

SR 00000101 10110101 00011 000 000000

А теперь то же самое значение сдвигается в другом направлении, относительно младших бит регистра SR (LO).

SI = ОхВбАЗ;

SR = LSHIFT SI BY 5 (LO);

Входное значение 10110110 10100011

Величина сдвига +5

SR 00000000 00010110 11010100 011 00000

Кроме направления операции сдвига, сдвиг может быть либо арифметическим (ASHIFT), либо логическим (LSHIFT). Например, ниже приведен логический сдвиг относительно старших бит SR (HI).

SI = ОхВбАЗ;

SR = LSHIFT SI BY -5 (HI);

Входное значение 10110110 10100011

Величина сдвига -5

SR 00000101 10110101 00011 000 00000000

Следующий пример показывает арифметический сдвиг для того же вход. ного значения и величины сдвига.

SI = ОхВбАЗ;

SR = ASHIFT SI BY -5 (HI);

Входное значение 10110110 10100011

Величина сдвига -5

SR 11111101 10110101 00011 000 00000000

 

2.4.2.4 Денормализация

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

Денормализация требует выполнения определенной последовательности операций. Во-первых, регистр SE должен содержать значение порядка. Это значение или загружается непосредственно или может быть результатом некоторой предыдущей операции. Далее, при выполнении самого сдвига величина сдвига берется из регистра SE, а не из данных.

Ниже приведены два примера денормализации числа с двойной точностью. В первом показана Денормализация, при которой первыми сдвигаются старшие биты числа, затем младшие. Так как результат может вычисляться в любом порядке, то следующий пример демонстрирует другой порядок выполнения той же операции, то есть, когда первыми сдвигаются младшие биты.

Всегда выбирайте арифметический сдвиг для старших бит (HI) входного значения в дополнительном коде (или логический сдвиг для беззнакового входного значения). Подобным образом, для бит, обрабатываемых первыми, не используйте модификатор [SR OR].

Модификатор”. = HI, нет [SR OR] Операция сдвига = арифметический, SE = -3 Первая половина входного 10110110 10100011 (старшие биты требуемого значения результата) SR 11110110 11010100 Oil 00000 00000000

Теперь обрабатываются младшие биты. Для младших бит входного значения всегда выбирайте логический сдвиг. Подобным образом, для битов, обрабатываемых во вторую очередь, используется модификатор [SR OR], чтобы избежать перезаписывания только что обработанной первой части результата.

Модификатор” = LO, [SR OR] Операция сдвига = логический, SE = -3

Вторая половина входного 0)110110 01011101 (младшие биты требуемого

значения результата)

SR 111110110 11010100011 0111011001011

Теперь то же значение обрабатывается в обратном порядке. Старшие биты всегда сдвигаются арифметически, а младшие биты логически. Первая половина входного значения непосредственно передается в SR, а вторая - подвергается операции OR, чтобы получить в SR число с двойной точностью.

Модификатор = LO, нет [SR OR] Операция сдвига = логический, SE = -3 Первая половина входного 0111011001011101 (младшие биты требуемого значения результата) SR 00000000 00000000 000 OHIO 11001011

Модификаторы = HI, [SR OR] Операция сдвига = арифметический, SE = -3 Вторая половина входного 10110110 10100011 (старшие биты требуемого значения результата) SR 111101101101010001101110 11001011

2.4.2.5 Нормализация

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

Нормализация осуществляется в два этапа. На первом этапе определяется порядок. На втором - непосредственно осуществляется сдвиг. На первом этапе используется команда ЕХР, которая определяет значение порядка и загружает его в регистр SE. Команда ЕХР опознает модификаторы HI и LO. На втором этапе используется команда NORM. Эта команда опознает не только HI и LO, но и модификатор [SR OR]. Команда NORM использует инверсное значение регистра SE в качестве управляющего кода сдвига, чтобы сдвиг выполнялся в правильном направлении.

 

УПРАВЛЕНИЕ ПРОГРАММОЙ 3

3.1 ОБЗОР

В данной главе предлагается описание программного автомата процессоров семейства ADSP-2100. Программный автомат управляет последовательностью выполнения программы. В нем содержится контроллер прерываний и логическое устройство состояний.

3.2 ПРОГРАММНЫЙ АВТОМАТ

Программный автомат генерирует адреса команд и обеспечивает гибкое управление программой. Он позволяет осуществлять последовательное выполнение команд, обработку прерываний оригинальным образом и реализовать за один цикл команды вызова, условного и безусловного перехода.

На рис. 3.1 приведена блок-схема программного автомата. Каждый функциональный блок программного автомата будет детально рассмотрен далее.

В данной главе, кроме описания логических устройств программного автомата, приводится также информация о командах, которые задают последовательность выполнения программы в процессорах семейства ADSP-2100. К ним относятся следующие команды:

DO UNTIL

JUMP

CALL

RTS (Return From Subroutine - возвращение в главную программу)

RTI (Return From Interrupt - возобновление работы после обслуживания

прерывания)

IDLE

3.2.1 Логическое устройство выбора адреса следующей команды

Пока процессор выполняет текущую команду, программный автомат осуществляет предварительную выборку следующей команды. Адрес этой команды выбирается в памяти программы логическим устройством выбора адреса следующей команды из одного из четырех источников:

инкрементор счетчика команд

стек счетчика команд

регистр команд

контроллер прерываний

компаратора циклов и контроллера прерываний. Затем адрес этой команды выводится на шину адреса памяти программы (АПП).

В случае последовательного выполнения программы, а также когда не предпринимается переход или возвращение по условию, или когда цикл DO UNTIL заканчивается, в качестве источника адреса следующей команды выбирается инкрементор счетчика команд. Выходное значение инкрементора выводится на шину АПП и загружается обратно в счетчик команд для начала следующего цикла.

При возвращении из подпрограммы или после окончания обработки прерывания в качестве источника адреса следующей команды выбирается стек счетчика команд. Верхнее значение стека может также использоваться в качестве следующего адреса при возвращении к началу цикла DO UNTIL.

В случае прямой адресации адрес команды, к которой осуществляется переход, берется из регистра команд. Адрес перехода разрядностью 14 бит содержится в командном слове.

При обслуживании прерывания адрес следующей команды в памяти программы берется из контроллера прерываний. После обнаружения прерывания, процессор переходит к ячейке, содержащей вектор прерывания, соответствующий запросу прерывания.

Еще одним источником адреса следующей команды может служить один из индексных регистров (14-17) Генератора адреса данных 2 (DAG2), Это происходит при использовании косвенной адресации в такой команде перехода, как:

JUMP (14);

В этом случае в счетчик команд загружается значение из DAG2 через шину АПП. (Генераторы адреса данных будут рассмотрены в главе 4).

3.2.2 Счетчик команд и стек счетчика команд

Счетчик команд представляет собой 14-битовый регистр, в котором постоянно содержится адрес текущей выполняемой команды. Это значение увеличивается на 1 в 14-разрядном инкременторе. Выходное значение инкрементора может выбираться мультиплексором следующего адреса для выборки следующей последовательной команды.

Счетчик команд связан со стеком, содержащим до шестнадцати 14-битовых слов, в который при выполнении команды CALL помещается значение инкрементора. Стек счетчика команд заполняется также при выполнении команды DO UNTIL и при обработке прерываний. Однако, в случае прерывания, инкрементор игнорируется, а в стек помещается текущее значение счетчика команд

(а не значение, на единицу большее). Таким образом можно возобновить выполнение преждевременно прерванной команды по окончанию обслуживания прерывания. Данные автоматически помещаются и извлекаются из стека счетчика команд во всех вышеназванных случаях. Возможно и непосредственное извлечение данных из стека посредством команды POP.

Для чтения (и непосредственного извлечения), а также записи (и помещения в стек) верхнего значения стека счетчика команд предусмотрена специальная команда, использующая псевдорегистр TOPPCSTACK, описание которого приводится в конце данной главы.

Выходное значение мультиплексора следующего адреса подается обратно в счетчик команд, который, как правило, перезагружает это значение в конце каждого цикла процессора. Однако, в случае косвенной адресации адрес следующей команды выводится на шину АПП Генератором адреса данных DAG2, и счетчик команд загружается непосредственно с шины АПП.

3.2.3 Счетчик циклов и стек счетчика

Счетчик циклов и стек счетчика обеспечивают программный автомат мощным механизмом для организации циклов. Счетчик представляет собой 14-битовый регистр с возможностью автоматического постдекрементирования, управляющий последовательностью циклов программы, которые выполняются заданное число раз. Значения счетчика являются беззнаковыми величинами разрядностью 14 бит.

До начала цикла в счетчик (регистр CNTR) загружаются 14 младших бит с шины ДПД, являющиеся требуемым числом циклов. Действительному числу циклов N противопоставляется значение N - 1. Благодаря логической операции проверки состояния заполненности счетчика СЕ (счетчик пуст), которая вместе с автоматическим пост-декрементированием значения счетчика осуществляется в конце цикла DO UNTIL, степень заполненности счетчика используется в качестве условия прекращения цикла. Заполненность счетчика проверяется в начале каждого цикла процессора, и значение счетчика уменьшается на 1 в конце; таким образом, когда значение счетчика достигает 1, устанавливается, что счетчик пуст, а значит, цикл выполнен N раз.

Проверка условия СЕ и автоматическое уменьшение значения счетчика может также выполняться при команде условного перехода, которая проверяет заполненность счетчика. Когда заполненность счетчика проверяется как часть команды возврата по условию или условной арифметической команды, декре-ментирование счетчика не выполняется.

3.2.4 Компаратор циклов и стек циклов

Команда DO UNTIL инициализирует цикл с нулевыми потерями ресурсов, используя компаратор (сравнивающее устройство) циклов и стек циклов программного автомата.

В каждом цикле компаратор сравнивает следующий адрес, сгенерированный программным автоматом, с адресом последней команды цикла (который содержится в команде DO UNTIL). Адрес первой команды в цикле устанавливается в вершине стека счетчика команд. Когда выполняется последняя команда цикла, процессор реализует операцию условного перехода на начало цикла без каких-либо издержек, которые могут возникнуть при организации цикла другим образом.

В стеке циклов, в котором может записываться до четырех уровней, содержатся адреса последних команд и условия окончания временно задержанных циклов. Единственный дополнительный цикл, связанный с организацией вложенных циклов DO UNTIL, возникает при выполнении самой команды DO UNTIL, так как помещение и извлечение данных из всех стеков производится автоматически. При использовании состояния заполненности счетчика в качествеусловия окончания цикла для начальной загрузки счетчика требуется другой цикл. В таблице 3.1 приводятся условия завершения цикла, которые могут использоваться совместно с командой DO UNTIL.

Таблица 3.1 Логические условия завершения цикла DO UNTIL

Синтаксис

Условие состояния

Истинно, если:

EQ

Равно нулю

AZ= 1

NE

Не равно нулю

AZ=0

L7

Меньше нуля

AN.XOR.AV = 1

GE

Больше или равно нулю

AN.XOR.AV = 0

LE

Меньше или равно нулю

(AN.XOR.AV).OR.AZ = 1

GT

Больше нуля

(AN.XOR.AV).OR.AZ = 0

АС

Перенос в АЛУ

АС= 1

NOT AC

Нет переноса в АЛУ

АС=0

AV

Переполнение в АЛУ

AV= 1

NOTAV

Нет переполнения в АЛУ

AV=0

MV

Переполнение в умножителе-накопителе

MV= 1

NOTMV

Нет переполнения в умножителе-накопителе

MV =0

NEG

Операнд Х последней команды ABS был

AS = 1

 

 

отрицателен

 

 

POS

Операнд Х последней команды ABS был

AS =0

 

положителен

 

CE

Счетчик пуст

 

 

FOREVER

Всегда

 

 

 

. Случаи в примерах 2 и 3 также не исключаются, но для их надлежащего выполнения требуется более сложная программа.

Примечание:

Повышенная осторожность необходима в случае преждевременного выхода из цикла, а также в случаях, когда цикл заканчивается командами JUMP, CALL, RETURN или IDLE. Так как ни один из механизмов организации циклов не работает во время выполнения команд перехода/вызова/возврата, то в стеках счетчика, циклов и счетчика программ сохраняется неизвлеченная информация, касающаяся организации цикла. Поэтому для восстановления правильного состояния процессора следует непосредственно извлечь эти данные из каждого задействованного стека. При обращении к подпрограмме подобная проблема возникает только тогда, когда команда вызова стоит последней в цикле; в таких случаях по команде возврата осуществляется переход программы к команде, следующей сразу после цикла. Команды вызова подпрограмм, находящиеся внутри цикла и не являющиеся последней командой цикла, обрабатываются согласно процедуре, рассмотренной в примере 1.

Единственным ограничением при организации циклов с помощью команды DO UNTIL является невозможность завершения вложенных циклов на одной и той же команде. Так как компаратор циклов может проверить только одно условие завершения цикла за один такт, то в случаях, когда внешний и вложенный цикл завершаются на одной и той же команде, при инкрементировании счетчика команд может произойти выход из внутреннего вложенного цикла за пределы конечного адреса внешнего цикла.

3.3 КОМАНДЫ УПРАВЛЕНИЯ ПРОГРАММОЙ

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

3.3.1 Команда перехода (JUMP)

14-разрядный адрес команды, к которой осуществляется переход, содержится в командном слове JUMP. При декодировании команды JUMP этот адрес непосредственно вводится в мультиплексор следующего адреса программного автомата. Адрес выводится на шину АПП и загружается обратно в счетчик команд для следующего цикла. Например, при выполнении команды:

JUMP fir_start;

происходит переход по адресу с меткой fir_start.

3.3.1.1 Косвенная адресация по адресу, взятому из регистра

В случае таких переходов адрес перехода берется из одного из 4-х регистров генератора адреса данных DAG2 (14, 15, 16 или 17). (Генераторы адреса данных рассматриваются в главе 4). Адрес выводится на шину АПП генератором адреса данных 2 и загружается в счетчик команд во время следующего цикла. Например при выполнении команды:

JUMP (14) ;

выполняется переход по адресу, содержащемуся в регистре 14.

3.3.2 Команда вызова (CALL)

Команда CALL выполняется также, как и команда JUMP. Адрес подпрограммы содержится в командном слове CALL, и после извлечения этого адреса из регистра команд он загружается обратно в счетчик команд для следующего цикла. Кроме того, текущее значение счетчика команд увеличивается на 1 и помещается в стек счетчика команд. После возвращения из подпрограммы работа счетчика и выполнение программы возобновляется с команды, следующей за командой CALL.

3.3.3 Циклы, организованные с помощью команды DO UNTIL

В наиболее распространенной форме циклов DO UNTIL в качестве счетчика итераций используется регистр счетчика (CNTR). При использовании счетчика для управления итерациями цикла завершение цикла DO UNTIL происходит по выполнению условия СЕ (счетчик пуст). Ниже приведен простой пример цикла подобного типа:

{установка регистра длины циклического буфера)

(загрузка указателя с первым адресом)

(циклического буфера)

(установка модифицирующего регистра для}

(приращения указателя)

(загрузка длины циклического буфера в)

(счетчик)

DO loop UNTIL СЕ; (задание повторения цикла до обнуления)

(счетчика)

DM(IO,MO)=0; (инициализация/очистка циклического буфера)

...любая команда...

loop:...любая команда...

Когда команда CNTR=10;выполняется до начала цикла, счетчик загружается с шины ДПД. Любой имевшийся до этого в счетчике номер цикла одновременно помещается в стек; эта операция не выполняется, если счетчик пуст. Сама по себе команда DO loop UNTIL CE;

только задает условия организации цикла. Во время выполнения этой команды не осуществляется никаких других операций. Это происходит только один раз, в начале первого прохождения цикла. При выполнении команды DO UNTIL адрес непосредственно следующей за ней команды помещается в стек счетчика команд (за счет помещения в стек инкрементированного значения счетчика команд). В течении того же цикла в стек циклов помещается адрес команды конца цикла и условие его завершения. По мере продолжения выполнения операций внутри цикла, компаратор сравнивает адрес каждой команды с адресом последней команды цикла. До достижения этого адреса программа выполняется последовательно.

Каждый раз по достижению конца цикла компаратор определяет, что выполняемая команда является последней в цикле и воздействует на логическое устройство выбора адреса следующей команды программного автомата. Вместо выбора в качестве адреса следующей команды инкрементированного значения счетчика команд, проверяется условие завершения цикла. Если это условие не выполняется, то выполнение программы возобновляется с первой команды цикла (в качестве следующего адреса берется верхнее значение стека счетчика команд). Обратите внимание, что значения стеков счетчика команд и циклов не извлекаются, а только считываются.

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

3.3.4 Команда ожидания (IDLE)

По команде IDLE процессор входит в состояние неопределенного ожидания в режиме пониженной потребляемой мощности до получения сигнала прерывания. После обслуживания немаскируемого прерывания процессор переходит в нормальный режим работы, и программа выполняется дальше начиная с команды, следующей за командой IDLE.

3.3.4.1 Команда ожидания (IDLE) с замедлением внутренней тактовой частоты процессора

Усовершенствованная версия команды IDLE позволяет замедлять внутреннюю тактовую частоту процессора, уменьшая, таким образом, потребление энергоресурсов. Уменьшенная частота тактовых синхроимпульсов является программируемой дробной частью от нормальной тактовой частоты процессора и задается при помощи выбора соответствующего значения делителя в команде IDLE. Эта команда имеет следующий формат:

IDLE (n) ;

где п=16, 32, 64 или 128. При выполнении данной команды процессор остается полностью работоспособным, но работает с меньшей внутренней тактовой частотой. Когда процессор находится в описываемом состоянии, частота всех остальных внутренних тактовых сигналов, например SCLK, CLKOUT, тактовых синхроимпульсов таймера, уменьшается в той же степени, что и внутренняя тактовая частота процессора. При отсутствии значения делителя в команде IDLE по умолчанию выполняется стандартная версия этой команды.

При использовании команды IDLE (n) замедляется внутренняя тактовая частота процессора и, тем самым, увеличивается время ответа процессора на входящие прерывания. Необходимое при стандартном состоянии ожидания для ответа на прерывание время в один цикл увеличивается в n (значение делителя) раз. После получения сигнала разрешенного прерывания процессор остается в состоянии ожидания в течение, максимум, n циклов перед тем, как возобновить свою нормальную работу (п=16, 32, 64 или 128).

Когда команда IDLE (n) используется в системах, работающих с внешними последовательными тактовыми синхроимпульсами (SCLK), частота последних может превышать внутреннюю тактовую частоту процессора. При таких условиях прерывания не должны генерироваться быстрее, чем они могут быть обслужены с учетом того дополнительного времени, которое требуется процессору для выхода из состояния ожидания (максимум и циклов процессора).

3.4 КОНТРОЛЛЕР ПРЕРЫВАНИЙ

При получении сигнала прерывания контроллер прерываний программного автомата передает управление программой команде, расположенной по адресу соответствующего вектора прерывания. Прерывания и соответствующие адреса векторов прерывания для каждого процессора семейства ADSP-2100 приведены в таблицах 3.2-3.7. (Обратите внимание, что SPORT1 можно скон-

фигурировать либо как последовательный порт, либо как совокупность управляющих выводов, включая два входа внешних прерываний, IRQO и IRQ1. Более подробная информация о конфигурации SPORT 1 дана в главе 5 "Последовательные порты".)

Вектора прерываний хранятся в памяти программы через четыре ячейки от остальных данных. - Это позволяет кодировать короткие подпрограммы обслуживания прерываний, не переходя к требуемой обслуживающей подпрограмме. В случаях когда подпрограммы обслуживания прерываний содержат более четырех команд, управление программой должно передаваться обслуживающей подпрограмме командой перехода, расположенной по адресу вектора прерывания.

После обслуживания прерывания управление возвращается главной программе при помощи команды RTI (возобновление работы после обслуживания прерывания), в ходе выполнения которой верхнее значение стека счетчика команд выталкивается в счетчик команд; содержимое стека состояний также извлекается для восстановления предыдущего состояния процессора.

Прерывания могут устанавливаться принудительно программными средствами; см. описание регистра IFC ниже.

Благодаря эффективному стеку и программному автомату, обработка немаскируемых прерываний происходит без задержки (кроме задержки, связанной с синхронизацией), даже при прерывании циклов DO UNTIL. Возможность использования вложенных прерываний позволяет высокоприоритетным прерываниям прерывать выполняемые в этот момент подпрограммы обслуживания низкоприоритетных прерываний без каких-либо дополнительных задержек.

В процессорах семейства ADSP-2100 имеется ряд теневых регистров, которые могут использоваться как "свежие" регистры АЛУ, умножителя-накопителя и устройства сдвига во время обслуживания прерываний. Благодаря этой особенности возможно контекстное переключение регистров в течении одного цикла. Использование теневых регистров описывается в разделе "Регистр состоя- i ния режима (MSTAT)" данной главы.

3.4.1 Последовательность обработки прерываний

При получении процессором запроса на прерывание, оно фиксируется на г время, которое необходимо ему, чтобы закончить выполнение текущей команды, г Затем контроллер прерываний сравнивает запрос на прерывание с регистром г маски прерывания, IMASK.

В случае немаскируемого прерывания программный автомат помещает текущее значение счетчика команд (в котором содержится адрес следующей ко- Г манды) в стек счетчика команд. За счет этого после обслуживания прерывания 1

AY1 MY1 SRI AF MF SRO AR MRO MR1

MR2

Например, следующая команда управления режимом переключает процессор с главного набора регистров на работу теневого набора регистров.

ENA SEC.REG;

а команда ниже переключает процессор обратно в режим работы основного ряда регистров:

DIS SEC_REG;

В режиме фиксации состояния переполнения в АЛУ бит состояния AV "застывает", если он раз установился. В этом режиме бит AV устанавливается в случае переполнения и "удерживается" даже тогда, когда в ходе последующих операций АЛУ переполнение не генерируется. Бит AV можно очистить только записав в него 0.

При разрешении режима насыщения регистра AR этот регистр насыщается до максимально положительного (Ox7FFF) или отрицательного (0õ8000) значения каждый раз, когда происходит переполнение в АЛУ.

Режим размещения результата умножителя определяет формат его работы:

дробный или целочисленный, - которые подробно рассматривались в главе 2, "Вычислительные устройства".

После установки бита активизации таймера тот начинает операцию декрементирования. Сброс этого бита останавливает работу таймера.

При разрешенном режиме GO процессор может продолжать выполнение команд из внутренней памяти программы во время предоставления шины. Процессор может остановить работу, ожидая, когда освободятся шины, только в случае, когда требуется доступ к внешней памяти. При запрещении режима GO процессор всегда будет останавливать работу во время предоставления шины

3.6 УСЛОВНЫЕ КОМАНДЫ

Логическая схема программного автомата определяет, выполняется ли условная команда, например, команда условного перехода или вызова, или какая-либо арифметическая операция. Эта схема также управляет скрытой последовательностью циклов на основе условия продолжения цикла наверху стека циклов.

Устройство условной логики получает "сырую" информацию о состоянии вычислительных устройств из регистра ASTAT и вычитающего счетчика и выделяет из этой информации набор из шестнадцати составных условий состояния. В таблице 3.9 приводятся условия состояний и соответствующий им синтаксис языка ассемблер. Эти условия состояния используются вместе с оператором IF условие, который может входить в некоторые команды. Кроме того, в качестве условия команд JUMP и CALL может использоваться состояние на выводе FI (Flag In).

Таблица 3.9

Логика условных команд, заданных оператором IF

Синтаксис

Условие состояния

Истинно, если:

EQ

Равно нулю

AZ= 1

NE

Не равно нулю

AZ=0

LT

Меньше нуля

AN.XOR.AV = 1

GE

Больше или равно нулю

AN.XOR.AV = 0

LE

Меньше или равно нулю

(AN.XOR.AV)OR.AZ = 1

GT

Больше нуля

(AN.XOR.AV).OR.AZ = 0

АС

Перенос в АЛУ

AC = 1

NOT АС

Нет переноса в АЛУ

АС=0

AV

Переполнение в АЛУ

AV = 1

NOTAV

Нет переполнения в АЛУ

AV=0

MV

Переполнение в умножителе-накопителе

MV = 1

NOTMV

Нет переполнения в умножителе-

MV =0

 

накопителе

 

NEG

Операнд Х последней команды ABS

AS = 1

 

 

был отрицателен

 

 

POS

Операнд Х последней команды ABS

AS =0

 

был положителен

 

NOT СЕ

Счетчик не пуст

-—

FLAG.IN*

Значение на выводе FI

Последний значение на

 

 

 

выводе FI = 1

NOT FLAGJN*

Значение на выводе FI

Последний значение на

 

 

 

 

выводе FI = 0

 

3.7 Псевдорегистр TOPPCSTACK

Для чтения (и извлечения из стека) и записи (и помещения в стек) верхнего значения стека счетчика команд используется специальная версия команды

reg = TOPSTACK

Доступны только с командами JUMP и CALL.

1