- •1. Цель работы
- •2. Структура проекта
- •3. Рекомендуемый путь и этапы создания проекта в vdsp
- •3.1 Пример и описание .Ldf файла
- •Search_dir() - определение путей к текущей рабочей директории и к директории lib.
- •3.2 Структура простейшего .Asm файла
- •Rti; nop; nop; nop; /* 0x0008: irql1*/
- •3.3 Компоновка проекта и создание исполняемого .Dxe файла
- •Rti; nop; nop; nop; /* 0x0008: irql1*/
- •Rti; nop; nop; nop; /* 0x0020: sport1 transmit*/
- •Rti; nop; nop; nop; /* 0x0028: Timer*/
- •4. Запуск и отладка проекта.
- •4.1 Запуск проекта Lab1
- •4.2 Отображение содержимого памяти
- •4.3 Отображение содержимого регистров
- •4.4 Построение графиков
- •5. Задание к лабораторной работе
- •1. Особенности и типы команд сигнального процессора
- •2. Используемые условия
- •2.1 Подробное описание регистров состояния и значения их битов
- •2.2 Логическое описание условий (cond), используемых с оператором if
- •2.3 Условия завершения цикла do until (term)
- •3. Многофункциональные инструкции
- •3.1 Операции alu/mac с одновременным чтением памяти данных и памяти программ
- •3.2 Чтение памяти данных и памяти программ
- •3.3 Вычисления с чтением из памяти
- •3.4 Вычисления с записью в память
- •3.5 Вычисления с пересылкой регистр-регистр
- •4. Инструкции alu, mac и shifter
- •4.1 Инструкции и стандартные функции
- •4.2 Инструкции и стандартные функции
- •4.3 Инструкции и основные функции
- •5. Команды пересылки данных
- •6. Инструкции управления исполнением программы
- •If eq jump my_label; call (i6);
- •7. Другие инструкции и команды не вошедшие в
- •8. Обобщённая таблица команд
1. Особенности и типы команд сигнального процессора
Система команд поддерживает прямой и косвенный (линейный или циклический) режимы адресации для доступа к памяти. Прямая адресация возможна только для памяти данных и использует непосредственное выражение в качестве адреса памяти: DM(<addr>). Косвенная адресация памяти данных и памяти программ использует индексные (I) регистры генераторов адресов данных и регистры модификации (M), например: DM(I3, M3), PM(I4, M7). Она обеспечивает эффективную адресацию массивов данных и соответствующих им буферов.
Набор инструкций процессора ADSP-2189M разделен на следующие группы:
вычислительные (инструкции ALU, MAC и SHIFTER);
пересылки данных;
управления программой;
многофункциональные;
другие инструкции.
При обобщенном описании инструкций процессора используются следующие синтаксические обозначения:
[ ] - необязательная часть инструкции;
| - разделитель в списке операторов, операндов или модификаторов инструкции, из которых должен быть выбран один;
cond - одно из следующих условий выполнения инструкции: EQ, NE, GT, GE, LT, LE, NEG, POS, AV, NOT AV, AC, NOT AC, NOT MV, NOT СЕ;
term - одно из следующих условий завершения цикла: EQ, NE, GT, GE. LT. LE, NEG, POS, AV, NOT AV. AC. NOT AC. MV, NOT MV, CE, FOREVER;
<data>=<const> | %<symbol> | ^<symbol> - обозначает непосредственное значение данных; это также может быть символ имени переменной/буфера, отмеченный операторами % или ^, означающими его длину или начальный адрес;
<addr> - обозначает непосредственное значение адреса, который кодируется в команде; в качестве <addr> может быть либо константа, либо метка программы;
конструкция […] - означает сколь угодное повторение предыдущего параметра;
<ALU>,<МАС,<SHIFT> - операции ALU, MAC, SHIFT соответственно;
<dregs> - один из регистров вычислительных устройств AX0, AX1, AY0, AY1, AR, МХО, МХ1, MY0, MY1, MRO, MR1, MR2, SI, SE, SR0, SR1;
<regs> - один из программно доступных регистров процессора AX0, AX1, AY0, AY1, AR, MX0, MX1, MY0, MYI, MR0, MR1, MR2, SI, SE, SR0, SR1, I0-I7, M0-M7, L0-L7, SB, PX, ASTAT, MSTAT, SSTAT (только для чтения), IMASK, ICNTL, CNTR, OWRCNTR (только для записи), IFC (только для записи), RXO, RX1, TXO, TX1;
<ехр> - константа от –127 до 127;
xop, yop – регистры X,Y-операндов в инструкциях ALU, MAC, SHIFTER;
Инструкции ALU:
xop - один из регистров AX0, AX1, AR, MR2, MRI, MRO, SRI, SR0;
yop - один из регистров AY0, AY1, AF.
Инструкции MAC:
xop - один из регистров MX0, MX1, AR, MR2, MR1, MR0, SR1, SR0;
yop - один из регистров MY0,MY1,MF.
Инструкции SHIFTER:
xop - один из регистров AR, MR2, MR1, MR0, SI, SR1, SR0.
При описании регистров состояния используются следующие обозначения:
* - звездочка означает, что данный бит изменяется после выполнения инструкции;
- черта означает, что данный бит не затрагивается инструкцией;
0 или 1 - означает, что этот бит всегда очищается или устанавливается инструкцией.
2. Используемые условия
2.1 Подробное описание регистров состояния и значения их битов
1) Регистр состояния арифметических устройств
Регистр ASTAT имеет разрядность 8 бит и содержит информацию о состоянии вычислительных устройств процессора. Биты состояния (0–7) (в порядке возрастания) имеют следующий смысл:
AZ – содержимое АЛУ равно нулю;
AN – содержимое АЛУ отрицательно;
AV – переполнение АЛУ;
AC – перенос бита в АЛУ;
AS – знак ввода порта X в АЛУ;
AQ – частное АЛУ;
MV – переполнение умножителя;
SS – знак ввода в устройство сдвига.
Биты состояния обновляются: AZ, AN, AV, AC – любой операцией АЛУ, кроме деления; AS – операцией нахождения абсолютного значения ABS; AQ – операциями деления; MV – любой операцией умножителя, кроме насыщения; SS – операцией нахождения порядка (EXP) устройства сдвига.
Состояние фиксируется в регистре ASTAT в конце цикла, в котором оно было сгенерировано.
2) Регистр состояния стеков
8-разрядный регистр SSTAT содержит информацию о четырех стеках процессора. Его биты состояния (0–7) (в порядке возрастания) имеют следующий смысл:
0 – стек счетчика команд пуст (PC_EMPTY);
1 – стек счетчика команд переполнен (PC_OVERFLOW);
2 – стек счетчика пуст (COUNT_EMPTY);
3 – стек счетчика переполнен (COUNT_OVERFLOW);
4 – стек состояний пуст (STATUS_EMPTY);
5 – стек состояний переполнен (STATUS_OVERFLOW);
6 – стек циклов пуст (LOOP_EMPTY);
7 – стек циклов переполнен (LOOP_OVERFLOW).
Состояние “стек счетчика пуст” означает, что число операций по извлечению данных из стека превышает или равно числу операций по помещению информации в стек. Состояние “стек счетчика переполнен” означает превышение числа помещений над числом извлечений данных из стека, что ведет к потере информации.
3) Регистр состояния режима
Регистр MSTAT определяет операционный режим процессора. Его биты описываются следующим образом:
– выбор ряда регистров данных (0 – главный, 1 – теневой) – SEG_REG;
– разрешение режима перестановки бит (DAG1) – BIT_REV;
– разрешение режима фиксации переполнения АЛУ – AV_LATCH;
– разрешение режима насыщения регистра AR – AR_SAT;
– тип результата в MAC 0 – дробный, 1– целый – M_MODE;
– разблокирование таймера – TIMER;
– разрешение режима GO – G_MODE.
Содержимое регистра MSTAT модифицируется при записи в него нового значения при помощи команды пересылки. В отличие от других регистров состояний, содержимое этого регистра может также изменяться командой управления режимом (ENA, DIS), например:
ENA SEG_REG; DIS SEG_REG; ENA M_MODE (режим умножения целых чисел); DIS M_MODE (режим умножения дробных чисел) и т.д.
При разрешении режима GO процессор может продолжить выполнение команд из внутренней памяти программы во время предоставления шины. Процессор может приостановить работу, ожидая, когда освободятся шины, только в случае, когда требуется доступ к внешней памяти. При запрещении режима GO процессор всегда будет останавливать работу во время предоставления шины.