Выбрать главу

На рис. 7.4, С представлена модифицированная гарвардская архитектура, используемая компанией Analog Devices Inc., где и команды, и данные могут храниться в памяти программ. Например, в случае с цифровым фильтром коэффициенты могут храниться в памяти программы, а значения данных — в памяти данных. Поэтому коэффициент и значение данных могут выбираться в одном машинном цикле. Помимо выборки коэффициента из памяти программ и значения отсчета из памяти данных, естественно, должна быть выбрана команда из памяти программы. Цифровые сигнальные процессоры компании Analog Devices решают эту задачу двумя способами. В первом случае к памяти программ обращаются дважды за время цикла. Этот метод использует процессоры семейства ADSP-218x. Во втором случае используется кэш-память программ. В алгоритмах, требующих одновременной выборки двух операндов, программист один массив помещает в память программ, а другой — в память данных. Когда процессор в первый раз выполняет команду, требующую двойного обращения к памяти программ, используется один дополнительный машинный цикл, т. к. необходимо выбрать и команду, и коэффициент с помощью шины данных памяти программ. Однако когда возникает такая проблема, процессор помещает команду в кэш, и в следующий раз, когда требуется эта команда, секвенсер программ извлекает ее из кэш-памяти, в то время как коэффициент поступает по шине данных памяти программ. Кэш программ используется как в семействе процессоров ADSP-219x компании Analog Devices, так и в процессорах семейства SHARC.

Пример реализации цифрового фильтра

После того, как мы представили основные принципы архитектуры процессоров семейства ADSP-21xx, проиллюстрируем простоту ее программирования на примере обычного КИХ-фильтра. Псевдокод программы проектируемого КИХ-фильтра показан на рис. 7.5.

ПСЕВДОКОД ДЛЯ ПРОГРАММЫ КИХ-ФИЛЬТРА С ИСПОЛЬЗОВАНИЕМ DSP С ЦИКЛИЧЕСКИМ БУФЕРОМ

1. Получить значение от АЦП (обычно по прерыванию)

2. Поместить значение в циклический буфер отсчетов входного сигнала

3. Обновить указатель циклического буфера входного сигнала

4. Обнулить аккумулятор

5. Выполнить фильтрацию (один проход цикла для каждого коэффициента)

6. Получить коэффициент из циклического буфера коэффициентов

7. Обновить указатель циклического буфера коэффициентов

8. Получить значение отсчета из циклического буфера отсчетов входного сигнала

9. Обновить указатель циклического буфера отсчетов входного сигнала

10. Умножить коэффициент на значение отсчета

11. Результат сложить с результатом предыдущих вычислений, хранящимся в аккумуляторе

12. Полученный в результате фильтрации отсчет отправить в ЦАП

Пример кода для ADSPxx:

CNTR = N-1;

DO convolution UNTIL CE; convolution:

MR = MR+MX0*MY0(SS), MX0=DM(10,M1), MY0=PM(14,M5)

Рис. 7.5

Цифровые сигнальные процессоры компании Analog Devices выполняют все операции, связанные с реализацией звена фильтра, за один цикл, что существенно повышает эффективность реализации фильтра. Для выполнения цикла не требуется дополнительных команд по проверке условия завершения цикла. Это называется циклом с автоматической проверкой условия завершения цикла (zero-overhead looping). Программа реализации КИХ-фильтра, написанная на языке ассемблера для семейства процессоров ADSP-21xx с фиксированной точкой показана на рис. 7.6.

Стрелками отмечены непосредственно исполняемые команды (7 строк), остальная часть текста — дополнительные комментарии, введенные для ясности. Первая команда (на которой стоит метка fir:) инициализирует вычисления, очищая регистр MR и загружая первый элемент данных и значение коэффициента из памяти данных и памяти программ соответственно в регистры МХ0 и MY0. Затем N-1 раз в N-1 циклах производится умножение с накоплением и автоматической проверкой условия завершения цикла для вычисления суммы первых N-1 произведений. Последняя команда умножения с накоплением производится с округлением с точностью до 24 старших разрядов регистра MR. Далее регистру MR1 может быть присвоено либо максимально возможное положительное, либо максимально возможное отрицательное значение в пределах разрядной сетки в зависимости от состояния флага переполнения, содержащегося в регистре MV. Таким образом, результат накапливается с точностью, соответствующей 40 разрядам регистра MR, при этом насыщение возникает, если только конечный результат вызывает переполнение младших 32 разрядов регистра MR.