Чтение онлайн

ЖАНРЫ

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

Вальпа Олег Дмитриевич

Шрифт:

Например, следующий операнд X должен загружаться в регистр MX0 из памяти данных, а новый операнд Y должен загружаться в регистр MY0 из памяти программ (для команд данного уровня несущественно, из внутренней или из внешней памяти). Кроме того, результат вычисления должен записываться в регистр результата (MR или AR), ни в коем случае не в регистр обратной связи (MF или AF).

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

AX0=DM(I2,M0), AY0=PM(I4,M6);

В

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

Существуют многофункциональные команды выполнения вычислений с одновременным считыванием из памяти. Если, в отличие от описанных выше многофункциональных команд, вместо двойного считывания из памяти, команда задает выполнение только одной операции считывания из одного типа памяти, то одновременно с выборкой данных из памяти можно произвести различного рода вычисления. К числу таких разрешенных вычислений относятся все операции АЛУ, за исключением деления, все операции умножителя-накопителя MAC и все операции устройства сдвига, за исключением непосредственного сдвига SHIFT IMMEDIATE. Все вычисления должны быть безусловными. Пример многофункциональной команды такого типа приведен ниже:

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

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

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

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; ² — не могут быть условными командами.

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

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

Поделиться с друзьями: