Проектирование устройств на сигнальных процессорах: Учебное пособие (Проектирование цифровых устройств аппаратуры связи на ЦСП семейства ADSP-21xx), страница 15

7.2. Разукрупнение алгоритма

Изучив систему команд ЦСП, необходимо провести разукрупнение алгоритма до такой степени, чтобы один графический элемент алгоритма соответствовал одной команде ЦСП. Конечная цель состоит в получении детального графического алгоритма в физических обозначениях, который позволит обоснованно провести распределение регистров и ячеек памяти для хранения величин. Разукрупнение неочевидных операций обработки выполнялось на этапе разработки алгоритма (п. 5.3).

7.2.1. Для разукрупнения алгоритма проводят сопоставление каждой из его операций с описанием команд, имеющихся в наборе команд ЦСП. Каждую операцию алгоритма непосильную для ЦСП следует выразить через некоторое количество более простых операций, которые имеются в наборе команд процессора (Приложение B, таблицы B.2..B.7).

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

          M:=8;

R[3]:=(R and M) shr 3;

M:=1;                                          Z:=R[3] xor R[0];

R[0]:=R and M;

Z:=R[3] xor R[0];

Об отсутствующих в наборе операциях ввода/вывода было сказано выше (п. 7.1). Ограничения, характерные для системы команд ADSP-21xx, упомянуты в п. 7.1.

Систему обозначений физических величин в алгоритме следует пока сохранить, так как она позволяет следить за правильностью физического содержания алгоритма при его преобразованиях. Введения дополнительных буквенных обозначений лучше избегать, так как это создаёт предпосылки к увеличению числа занимаемых регистров. Для этого можно текущий (промежуточный) результат обозначить символом окончательного результата, учитывая смысл операции присвоения (п. 5.3). Пример изображён на рисунке 7.1. Такой подход упростит назначение регистров для хранения величин (см. далее в п. 7.3).

 


Рисунок 7.1 — Разукрупнение выражения P=A*(B-C)

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

1. Деление, умножение ( /, *).

2. Сложение, вычитание (+, -).

3. Операции отношения (=, <>, >, <, >=, <=).

4. Операция НЕ (NОТ).

5. Операция И (АND).

6. Операция ИЛИ (ОR).

7. Операция исключающее ИЛИ (ХОR).

Скобки меняют порядок выполнения операций вопреки старшинству.

7.2.2. Условная операция выполняется с использованием признака результата или их комбинации, отображаемой кодом условия. По “да” операция выполняется. По “нет” выполняется пустая операция.  …

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

В случае сложных условий разветвления операция отношения разукрупняется. При этом сначала выполняется одна или несколько операций, после которых условие разветвления сводится к одному из самых простых условий (= 0, <0 и т. п.), перечисленных в таблице B.1. Пример условного перехода по сложному условию изображен на рис. 7.2. Операция вычитания может служить операцией сравнения, если  выполняется для получения не результата, а признаков. Операцию <операнд AND маска> можно применять для получения  признака, характеризующего состояние отдельных бит операнда. Например, …

 


Рисунок 7.2 — Разветвление по сложному условию