Шрифт:
Однако для быстрой обработки сигналов больше подходит гарвардская архитектура, показанная на рис. 7.4, В. Данная архитектура получила свое название в связи с работами, проведенными в Гарвардском университете под руководством Ховарда Айкена. Данные и код программы хранятся в различных блоках памяти и доступ к ним осуществляется через разные шины, как показано на схеме. Т. к. шины работают независимо, выборка команд программы и данных может осуществляться одновременно, повышая таким образом скорость по сравнению со случаем использования одной шины в архитектуре Фон Неймана. При выполнении умножения с последующим суммированием в КИХ-фильтре за один цикл происходит выборка команды из памяти программ и коэффициента из памяти данных. Второй цикл требуется для выбора слова данных из памяти данных.
На рис. 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.
Архитектура DSP семейства ADSP-21xx (рис. 7.7) оптимизирована для цифровой обработки сигнала и других высокоскоростных приложений. Данное семейство DSP включает ядро семейства ADSP-2100 (три вычислительных блока, адресные генераторы, устройство управления выполнением команд), два синхронных последовательных порта, программируемый таймер, развитую систему обработки прерываний, встроенную статическую память программ и данных. Существуют также версии с встроенным ПЗУ.
Гибкая архитектура процессоров семейства ADSP-21xx и соответствующий набор команд позволяют достичь высочайшей степени параллелизма при выполнении операций. За один цикл DSP семейства ADSP-21xx может сгенерировать адрес следующей команды программы, выбрать следующую команду, выполнить 1 или 2 перемещения данных, обновить 1 или 2 указателя адреса, выполнить вычислительную операцию, передать или принять данные от двух последовательных портов и обновить регистр таймера.
АРХИТЕКТУРА ЯДРА ПРОЦЕССОРА ADSP-21XX