Олег Вальпа - Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++ стр 28.

Шрифт
Фон

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

DM(I0,M0)=AR, AR=AX0+AY0;

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

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

AR=AX0+AY0, AX0=MR2;

В данном примере операция сложения в АЛУ производится одновременно с загрузкой в регистр AX0 нового значения, взятого из регистра MR2. Как и в предыдущих примерах, для вычисления используется значение, содержащееся в регистре AX0 в начале цикла. Данные могут между всеми регистрами ввода или вывода АЛУ, умножителя-накопителя MAC и устройства сдвига, за исключением регистров обратной связи (AF и MF) и регистра SB. В рассмотренном примере новое значение загружается в регистр AX0 из регистра данных в конце цикла. Разрешенными являются все операции АЛУ, кроме деления, все операции умножителя-накопителя и все операции устройства сдвига, кроме непосредственного сдвига. Вычисления должны быть безусловными.

Ниже приводится полный список многофункциональных команд в соответствии с принятыми ранее условными обозначениями. Назначение команд приводится в тексте описания этих команд. Вычисление с пересылкой регистр-регистр:

| <ALU> |, dreg = dreg;

| <MAC> |

|<SHIFT>|

Вычисление с чтением из памяти:

|<ALU> |,dreg = |DM(|I0|,|M0|)|;

|<MAC> | | |I1| |M1| |

|<SHIFT>| | |I2| |M2| |

| |I3| |M3| |

| |I4| |M4| |

| |I5| |M5| |

| |I6| |M6| |

| |I7| |M7| |

| |

|PM(|I4|,|M4|)|;

| |I5| |M5| |

| |I6| |M6| |

| |I7| |M7| |

Вычисление с записью в память:

|DM(|I0|,|M0|)|=dreg, |<ALU> |;

| |I1| |M1| | |<MAC> |

| |I2| |M2| | |<SHIFT>|

| |I3| |M3| |

| |I4| |M4| |

| |I5| |M5| |

| |I6| |M6| |

| |I7| |M7| |

| |

|PM(|I4|,|M4|)|;

| |I5| |M5| |

| |I6| |M6| |

| |I7| |M7| |

Чтение памяти данных и программ:

|AX0|=DM(|I0|,|M0|), |AY0|=PM(|I4|,|M4|);

|AX1| |I1| |M1| |AY1| |I5| |M5|

|MX0| |I2| |M2| |MY0| |I6| |M6|

|MX1| |I3| |M3| |MY1| |I7| |M7|

Команда АЛУ или MAC с чтением памяти данных и программ:

|<ALU>|,|AX0|=DM(|I0|,|M0|), |AY0|=PM(|I4|,|M4|);

|<MAC>| |AX1| |I1| |M1| |AY1| |I5| |M5|

|MX0| |I2| |M2| |MY0| |I6| |M6|

|MX1| |I3| |M3| |MY1| |I7| |M7|

В качестве регистров dreg могут быть использованы регистры: AX0, АХ1, AY0, AY1, AR, MX0, МХ1, MY0, MY1, MR0, MR1, MR2, SI, SE, SR0 и SR1.

Примечания:

<ALU>¹ - любая команда АЛУ (исключая DIVS и DIVQ);

<MAC>¹ - любая команда умножителя/накопителя;

<SHIFT>² - любая команда устройства сдвига (исключая непосредственный сдвиг);

где ¹ - должны использоваться только регистры результатов AR, MR, а не регистры обратных связей AF, MF; ² - не могут быть условными командами.

Дополнительные команды

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

Пустая команда:

NOP;

Модифицировать регистр адреса:

MODIFY(|I0|,|M0|);

|I1| |M1|

|I2| |M2|

|I3| |M3|

|I4| |M4|

|I5| |M5|

|I6| |M6|

|I7| |M7|

Управление стеками:

[|PUSH| STS] [,POP CNTR] [,POP PC] [,POP LOOP];

|POP |

Управление режимом:

|ENA| |SEC_REG | [, ...];

|DIS| |BIT_REV |

|AV_LATCH|

|AR_SAT |

|M_MODE |

|TIMER |

|G_MODE |

|INTS |

Ключевые слова означают следующие режимы:

SEC_REG - фоновый регистровый файл;

BIT_REV - бит-реверс адреса генератора DAG1;

AV_LATCH - защелка статуса переполнения АЛУ (AV);

AR_SAT - насыщение регистра AR;

M_MODE - режим размещения результата MAC;

TIMER - разрешить работу таймера;

G_MODE - разрешить режим "Go mode";

INTS - разрешить прерывания.

NOP - это команда отсутствия операций. Она часто применяется для выполнения холостого цикла процессора в качестве задержки на один такт.

Команда MODIFY позволяет модифицировать указатель адреса в заданном регистре I на величину, которая содержится в заданном регистре M, не обращаясь при этом к памяти. Как и во всех других случаях, регистры I и M должны быть регистрами одного и того же генератора адреса данных; любой регистр I0–I3 может использоваться в комбинации с любым регистром M0–M3, а любой регистр I4–I7 - с любым регистром M4–M7.

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

Команды управления режимом разрешают и блокируют режимы некоторых операций процессора. Эта команды управляют режимами реверсной адресации в генераторе адреса данных 1, фиксацией переполнения АЛУ, насыщением регистра результата АЛУ, выбором набора основных или теневых регистров, режимом GO для непрекращающейся работы процессора во время предоставления шины, режимом сдвига в умножителе для выполнения целочисленных или дробных вычислений и активизацией таймера. За операторами ENA или DIS может следовать через запятую сколько угодно идентификаторов. Команды ENA и DIS могут повторяться в командной строке. Кроме того, все семь режимов могут разрешаться, блокироваться или изменяться при помощи всего одной команды.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке