Структурная организация вычислительной системы на базе процессора ADSP-2181. Программно-логическая модель сигнального процессора ADSP-2181, страница 5

DAG1 генерирует адреса только для DM. При этом он имеет дополнительную возможность выдачи адресного кода на шину адреса DMA BUS с обратным порядком следования адресных бит: младший бит – на старшую адресную линию и т.д., старший бит – на младшую адресную линию. Такой режим адресации памяти данных (бит-реверсивная адресация) необходим при реализации процессором алгоритмов быстрого преобразования Фурье (БПФ). Бит-реверсивная адресация может быть задана путем установки управляющего бита MSTAT.1 в регистре MSTAT.

DAG2 генерирует адреса как для DM, так и для PM, но не может выполнять бит-реверсивную адресацию.

Регистровая модель DAG1 и DAG2 содержит три вида 14-разрядных регистров.

I0 – I3 (DAG1), I4 – I7 (DAG2) – индексные регистры. Индексные регистры содержат адреса, используемые для доступа к памяти. При косвенной адресации индексный регистр содержит текущий адрес ячейки памяти.

М0 – М3 (DAG1), М4 – М7 (DAG2) – регистры модификации адреса (модификаторы). В регистре модификации хранится целое число со знаком, которое при косвенной адресации прибавляется к содержимому индексного регистра после доступа к данным для получения нового значения адреса при следующем обращении к памяти (пост-модификация). Следующий адрес может быть и больше, и меньше предыдущего. Регистры I0 – I3 могут быть модифицированы содержимым модификаторов М0 – М3 в любой комбинации, а регистры I4 – I7 - содержимым М4 – М7.

L0 – L3 (DAG1), L4 – L7 (DAG2) – регистры длины. Содержимое регистра длины (число без знака), соответствующее индексному регистру (L0, например, соответствует I0), определяет, какой режим адресации используется для этого индексного регистра. При адресации циклического буфера в регистр длины записывается объём циклического буфера (число, не равное нулю). При этом реализуется модульная арифметика вычисления модифицированного (исполняемого) адреса.

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

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

При сбросе и перезапуске процессора состояние регистров DAG1 и DAG2 неопределённое, поэтому требуется обязательная их инициализация.

2. ПРОГРАММЫ НА ЯЗЫКЕ АССЕМБЛЕРА

    ДЛЯ ПРОЦЕССОРА ADSP-2181

    2.1. Структура программ LR2.asm, DFT.asm, FIR.asm

Тексты исходных программ LR2.asm, DFT.asm, FIR.asm входят в состав раздаточных материалов, полученных студентом.

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

Команды препроцессора начинаются с префикса # и заканчиваются символом ввода строки (перевод каретки - Enter). Признак # должен быть первым символом ассемблерной строки, содержащей команду. Если команда более длинная, чем одна строка, используются наклонная черта влево (\) и перевод каретки, чтобы продолжить команду на следующей строке. Между наклонной чертой влево и переводом каретки не должно быть никаких символов. Команды препроцессора зависимы от регистра и представляются в нижнем регистре.

Директивы начинаются с точки (.) и заканчиваются точкой с запятой (;). Ассемблер разрешает запись директив в нижнем регистре или верхнем регистре.

Метки размещаются в позиции команды или на предыдущей позиции. Метка заканчивается двоеточием (:). Ассемблер не накладывает никакого ограничения на число символов в метке. Метки зависимы от регистра (ассемблер обрабатывает "start:" и "Start:" как уникальные метки).

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

В программах используются следующие соглашения о форме представления комментария в тексте программы:

/* многострочный комментарий */,           /* ... */ – начало и конец многострочного комментария;

// однострочный комментарий,                 // – начало строки однострочного комментария.

    2.2. Директивы ассемблера

.SECTION

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

.SECTION/tipe sectionName.

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

Для директивы .SECTION задание обоих параметров является обязательным. Параметр tipe принимает значение РМ или CODE, если секция задаёт размещение программного модуля и возможного массива данных во внутренней 24-разрядной памяти программ. Параметр tipe принимает значение DМ или DATA, если секция задаёт размещение данных во внутренней 16-разрядной памяти данных.

Параметр sectionName – имя секции или раздела. Длина имени не ограничивается, но ассемблер чувствителен к регистру, в котором оно представлено.

.VAR

Директива .VAR объявляет и инициализирует или переменные (на 24 бита, на 16 битов), или буферы данных. Буфер представляет собой совокупность ячеек памяти, расположенных упорядоченно друг за другом по смежным (соседним) адресам. Буфер объявляется до использования в программе. Буферы организуются для приёма и передачи блочных данных (последовательностей).

Директива . VAR в анализируемых программах имеет формат:

.VAR bufferName [длина] = "имя файла";

bufferName – представляет собой определяемые пользователем символы, которые идентифицируют буфер.