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

7.3. Распределение регистров и ячеек памяти

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

Перед этим проводится  детализация обобщённого алгоритма (одна строка или элемент схемы – одна будущая инструкция ЦСП) и составляется полный список переменных, имеющихся в алгоритме.

Работа выполняется в 2 этапа. Сначала выполняется анализ времени хранения каждой из величин, а итогом этой работы должна стать диаграмма (или список) занятости регистров и ячеек памяти процессора.

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

Результат выполненной операции возникает в регистре результата. Если вычислитель будет выполнять другую операцию, то регистр результата придётся освободить, то есть сохранить информацию в другом регистре или ячейке памяти.

Блок РОН является сверхоперативным ЗУ. Подходы к распределению зависят от количества РОН в микропроцессоре.

·  В обычных микропроцессорах имеется блок регистров, в ходе вычислений один из них используется как приёмник результата (аккумулятор). В аккумуляторе находится один из операндов, который после операции заменяется результатом. Количество РОН обычно недостаточно и приходится решать задачу пересылки операнда в РОН перед использованием в операции, а  для хранения величин использовать ячейки памяти. При этом сложность алгоритма может заметно возрастать, так как требуются дополнительные пересылки для подготовки операнда и сохранения результата. Когда регистров не хватает, для величин с кратковременным хранением выделяют 1... 2 регистра и организуют их поочерёдное хранение без перекрытия во времени.

·  В микроконтроллерах в операциях участвуют непосредственно ячейки памяти данных (ОЗУ). Их количество обычно достаточно для хранения всех участвующих в алгоритме величин и каждая переменная хранится в своей ячейке. Проблем с распределением почти не возникает – достаточно создать полный список величин с указанием адресов ячеек.

·  В ADSP-21xx ситуация промежуточная. Имеются три вычислительных блока и генератор адресов, в которых присутствуют регистры результата (в АЛУ их два). В выборе источников операндов достаточная свобода; пересылки можно выполнять параллельно с выполнением операции, применяя МФИ. Однако число регистров в ЦСП ограничено. Поэтому стремятся минимизировать количество используемых для решения задачи регистров и ячеек памяти путем правильной организации вычислений. Сэкономленные регистры и ячейки памяти могут быть использованы для решения дополнительных задач. Аккуратно выполняя распределение регистров, можно повысить эффективность разрабатываемой программы и сэкономить время на её отладке.

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

Для величин с непрерывным хранением лучше использовать отдельные ячейки памяти. Те величины, к которым обращаются более часто, обычно хранят в регистрах. Если регистров не хватает, то в ячейках памяти хранят те величины, к которым обращаются реже. Такой подход способствует сокращению времени выполнения программы.