|
Генри Дэвис (перевод М. Ахметова, А. Биленко)
Стандартный DSP или конфигурируемый микроконтроллер
Микроконтроллеры, в отличие от большинства DSP, обладают более широким
набором периферийных устройств. Это связано с острой конкуренцией в сфере
их применения. DSP, в свою очередь, используются во многих приложениях
благодаря привлекательной цене.
Но в конечном итоге только инженерная интуиция, помноженная на знание
требований, предъявляемых к разработке, позволяет сделать правильный выбор:
стандартный DSP или современный конфигурируемый микроконтроллер. Технические
проблемы декодирования MP3 и способы их решения дают нам возможность сравнить
эти два варианта.
Всё течёт,
всё изменяется
Если добавить к этому мудрому изречению концовку “и совершенствуется”,
его можно будет в полной мере применить к технологиям цифровой обработки
сигналов. Производительность DSP продолжает неуклонно повышаться, несмотря
на все мрачные предсказания о технологических и физических барьерах. Более
того, так же неуклонно множится и растёт количество новых периферийных
устройств, расположенных на кристалле.
Однако же, в соответствии с упомянутой крылатой фразой, для многих областей
применения DSP, традиционно использовавших именно сигнальные процессоры,
появился некий альтернативный и даже конкурирующий вариант — конфигурируемый
микроконтроллер.
Не секрет, что почти каждый производитель микроконтроллеров не может удержаться
от попыток внедрения своих изделий в область DSP-приложений, добавляя
в архитектуру своих микроконтроллеров элементы, присущие DSP. Некоторые
из подобных микроконтроллеров содержат модули умножителя-аккумулятора
МАС, отображённые в адресном пространстве, другие — включают в состав
набора инструкций команды, характерные для DSP.
В результате, появился целый ряд инструментальных средств, предназначенных
для оценки эффективности чипа как цифрового сигнального процессора, микроконтроллера
или как объектно-специализированного устройства. Стандартные тесты на
производительность могут охарактеризовать только один её тип — вычислительную
мощность процессора.
Многие компании используют системы, объединяющие целые блоки таких тестов,
оптимизированных для конкретных процессоров. В итоге, когда разработчик
знакомится с результатами тестов, он может оценить эффективность работы
процессорного устройства. Но почти все такие измерения теряют эффективность,
когда речь заходит о правильном выборе периферийных устройств, доступных
разработчику.
Широкий выбор периферийных модулей был характерной и отличительной чертой
микроконтроллеров в течение довольно долгого времени. Существует множество
микроконтроллеров, обеспечивающих почти идеальный выбор производительности,
памяти и периферии для самых разнообразных применений. Драйверы жидкокристаллических
дисплеев, высоковольтные интерфейсы и линии с высокой нагрузочной способностью
для управления внешними устройствами, цифро-аналоговые преобразователи,
последовательные интерфейсы — это только верхушка айсберга, скрывающего
всю остальную микроконтроллерную периферию. В то же время, сигнальные
процессоры вряд ли могут похвастаться таким широким выбором. Большинство
семейств DSP представляют ограниченный набор периферийных устройств, в
основном это базовые функции ввода/вывода и наиболее распространённые
последовательные интерфейсы.
В какой-то мере подобное положение объясняется самой историей развития
микроконтроллерной линии, ориентированной в основном на применения в изделиях
широкого потребления. Но наиболее веской причиной большего многообразия
периферийных устройств является пожалуй очень жестокая конкуренция в каждой
из областей применения, использующей МК.
Итогом этой борьбы может стать конфигурируемый микроконтроллер на основе
ASIC фирмы ARC.
Архитектура ARC предлагает прототип расширяемого и конфигурируемого ASIC-ядра.
Основанная на системе команд с 32-разрядной шиной, архитектура ARC позволяет
инженеру сконфигурировать и расширить возможности процессора, включая
использование своих инструкций и периферийных устройств.
В отличие от традиционных встраиваемых процессоров, изначально ориентируемых
для работы в качестве компонента на плате, ARC спроектировала своё процессорное
ядро специально для однокристальных SoC (system-on-chip) приложений. В
результате стало возможным интегрировать ARC-ядро в SoC значительно быстрее,
чем при использовании других процессоров. Иногда это занимает буквально
несколько дней.
ARC представляет свои архитектуры в виде программных макросов, что снимает
проблему зависимости от конкретного ASIC-производителя.
Другим преимуществом такого подхода является возможность использования
новых технологий производителя (по мере их появления), осуществляя просто
ресинтез макроса, вместо трудоёмкой и дорогой операции обновления производственного
процесса на аппаратном уровне.
ARC-процессоры обеспечены поддержкой широкого набора программных и аппаратных
средств разработки и отладки. В их число входит ARChitect — графическая
среда на основе концепции “укажи и кликни” (point-and-click), с помощью
которой можно создать конфигурацию процессора в течение нескольких минут.
При этом разработчику нет необходимости самостоятельно модифицировать
HDL-код. Специальный программный инструментарий автоматически модифицирует
HDL-код в соответствии с изменениями, произведёнными в графической оболочке
ARChitect.
Множество современных проектов используют одновременно микроконтроллеры
и цифровые сигнальные процессоры. Технология ARC позволяет разработчикам
либо объединить их в одно ядро, либо сконфигурировать ARC-процессоры как
отдельный микроконтроллер и отдельный DSP.
Работу выполняет DSP
Если сравнить конфигурируемый микроконтроллер с DSP, то цифровые сигнальные
процессоры фирмы Analog Devices, пожалуй, обладают наиболее типичными
характеристиками. Например, сигнальный процессор ADSP-2186M при относительно
невысокой стоимости объединяет высокопроизводительное DSP-ядро с архитектурой,
оптимизированной под использование языков высокого уровня, и ряд периферийных
модулей, включающих два последовательных порта, 16-разрядный внутренний
контроллер DMA, программируемый таймер и контроллер прерываний.
Цикл выполнения инструкции составляет 13 нс (75 MIPS) при рабочем напряжении
питания процессорного ядра 2,5 В (3,3 В для линий ввода/вывода). Код программы
и используемые данные размещаются во внутреннем ОЗУ программ и ОЗУ данных
объёмом по 8 Кслов.
ADSP-2186 имеет и некоторые “микроконтроллерные” черты, включающие программируемые
сигналы стробирования памяти и раздельное адресное пространство для памяти
и устройств ввода/вывода.
Наглядным примером необходимости одновременного использования свойств
DSP и микроконтроллера является реализация алгоритма сжатия аудиоданных
MP3, который явился результатом настойчивого желания людей обмениваться
музыкальными произведениями через Интернет, экономя при этом трафик.
Для процесса декодирования необходима весьма скромная вычислительная мощность
DSP и минимальные возможности интерфейса. Однако, “скромность” по отношению
к стандартам DSP превращается в процесс “значительной” обработки в случае
стандартных микроконтроллеров.
Декодирование включает ориентированные на побитовую обработку и управляющие
её интенсивностью алгоритмы, которые в действительности являются неким
гибридом, реализующим лучшие стороны DSP и микроконтроллеров.
Битовый поток данных MPEG разделяется на пакеты, именуемые фреймами, и
формат MPEG характеризуется фиксированным числом фреймов в секунду.
При заданной скорости битового потока и частоты дискретизации, задаваемыми
при кодировании аудиофайла, каждый пакет имеет определённый размер и декодируется
независимо от других, что позволяет достаточно просто двигаться вдоль
битового потока к следующему или предыдущему фреймам.
Сам процесс декодирования начинается с определения начала фрейма по специальным
синхронизирующим битовым последовательностям. После этого, для корректного
декодирования декодер определяет по заголовку пакета, каким образом происходило
исходное сжатие данных.
Передача потока данных начинается после того, как из заголовка считывается
масштабирующий коэффициент, управляющий усилением для определённой полосы
частот. Затем в потоке данных определяется фактическое значение уровня
сигнала для конкрентой частоты, квантованное и закодированное с помощью
кодов Хаффмана. Дешифратор декодирует эти коды, восстанавливает значение
уровня сигнала и преобразует его во временные интервалы, восстанавливая
тем самым из выходного потока исходные сигналы.
Алгоритм Хаффман-кодирования минимизирует общий размер в битах, используя
множественные Хаффман-ветвления, учитывающие содержание данных. Хаффман-декодер
выбирает соответствующее Хаффман-ветвление и затем просматривает его для
каждого символа фрейма для того, чтобы корректно декодировать его значение.
После декодирования значений происходит восстановление их истинных значений
в ре-квантователе с использованием масштабных коэффициентов.
В принципе, битовые потоки достаточно просты, но они могут стать более
сложными, если увеличить количество каналов. Простейшая структура стерео-
сигнала — это передача каждого канала отдельно в каждом фрейме. Наиболее
“интеллектуальные” шифраторы устраняют избыточность двух каналов, передавая
для дальнейшего сжатия исходного сигнала сумму и разницу.
В случае, когда кодировка использует такой тип представления, для восстановления
двух исходных каналов дешифратор должен выполнить стереообработку. Затем
он симметрично увеличивает значение частоты в пределах каждой полосы частот,
сглаживая тем самым искажения, внесённые эффектом наложения, возникающим
вследствие квантования.
Дискретное
косинус-преобразование
Пока мы говорили о сигналах в частотной области. Однако для синтеза выходных
сигналов, производится некая трансформация, обратная используемой шифратором
и носящая характер время-частотного преобразования.
При трёхуровневой кодировке, два преобразования производятся друг за другом
(речь идёт об обратном дискретном косинус-преобразовании), что позволяет
достичь более высокого разрешения по частоте, чем при других видах преобразования.
Оба они критичны к косинус-преобразованию, то есть, если во время кодирования
квантование не производится, то дешифратор полностью восстанавливает исходный
сигнал. Для устранения разрывов между преобразованными блоками, которые
заполнены звуковыми шумами и прочим “мусором”, преобразование использует
50-% перекрытие.
Итак, внутри каждого преобразуемого блока размером X шифратор позиционирует
входной указатель только для X/2 отсчётов. Дешифратор делает обратное:
каждый восстановленный блок пересекается только с половиной исходных отсчётов.
Этот процесс сглаживает все “разрывы”.
После того, как дешифратор произвёл все преобразования, полученные данные
пропускаются через низкочастотный фильтр, на выходе которого и получается
восстановленный сигнал. Низкочастотная фильтрация в дешифраторе осуществляется
свёрткой с синусоидальным опорным сигналом. Технически, каждый выходной
отсчёт представляет собой средне взвешенное значение примерно 512 отсчётов,
которые были преобразованы во временный интервал, так что MPEG аудиостандарт
определяется формой 512 составляющих.
Дискретное косинус-преобразование можно определить как:
где нормирующий коэффициент равен
,
.
Если строго следовать уравнению, для реализации преобразования требуется
4096 операций умножения и 4032 операции сложения.
Для осуществления этого алгоритма “в лоб” требуется быстродействие около
3 млн. операций умножения-сложения в секунду. Однако разумная оптимизация
может уменьшить это число до двух млн.
Таким образом, можно реализовать алгоритм MP3, используя DSP с производительностью
приблизительно 15 MIPS, что легко достижимо при использовании практически
любого доступного DSP.
Природа алгоритма дискретного косинус-преобразования такова, что позволяет
достаточно просто оценить и архитектуры DSP различного назначения.
DSP для дискретного косинус-преобразования
Рассмотрим пример ADSP-2186M.
Одноцикловая неконвейерная реализация этого DSP упроcтит нам технический
анализ, поскольку не придётся учитывать задержки или другие особенности,
обычно присущие конвейерной обработке. Данный DSP использует одноцикловые
команды умножения-сложения, которые могут независимо и одновременно адресовать
два операнда. К сожалению, особенности зигзагообразной адресации, которые
составляют суть алгоритма дискретного косинус-преобразования, не включают
возможность модульной адресации, реализованной в семействе 2100. Однако
это небольшая проблема, поскольку практически любая оптимизация по коду
приводит к повышению производительности алгоритма косинус-преобразования.
Обычно используется развёрнутое циклическое кодирование, при котором вместо
имеющегося механизма адресации используется прямая адресация. Оптимизация
алгоритма для 2186 — это достаточно простой и понятный процесс, который
требует лишь времени и сообразительности.
В противоположность DSP, ядро Tangent фирмы ARC является процессором с
конвейерной системой команд на базе RISC-архитектуры (рис. 1). (Набор
команд ARC приведён на врезке.)
Ядро использует конвейерные команды, которые по своей сути являются последовательностью
функциональных устройств, выполняющих команды на различных шагах. Каждое
функциональное устройство получает данные на вход и создаёт выходной поток,
который хранится в выходных буферах.
Как на конвейере, выход одного этапа становится входом следующего, допуская
при этом параллельную обработку на всех этапах.
Результатом этого является большая производительность.
Ядро Tangent на базе конвейерной обработки реализует и другие этапы выполнения
заданий, например, команды выборки, декодирования, загрузки данных и результатов,
а также арифметические операции. Конвейер предполагает непрерывный поток
команд, последовательно выбираемых из ячеек памяти и прерываемый при необходимости
операций перехода.
В момент перехода формируется список команд, которые не должны выполняться
с текущей позиции после команды перехода; это условие носит название конвейерного
прерывания.
Реализация неоптимизированного алгоритма дискретного косинус-преобразования
MP3 при испорльзовании базового ядра ARC, потребует 4096 операций умножения,
4032 операции сложения, 8128 вычислений адреса и аналогичное количество
выборок операнда. Хотя необходимый уровень вычислений более чем в шесть
раз превышает производительность, которую требует для этого ADSP-2186M,
или примерно в 100 раз производительность самого Tangent, задача хорошо
сочетается с возможностями процессора на базе ядра Tangent.
Но вопрос оказывается на бит сложнее. Поскольку ядро Tangent использует
многокаскадный конвейер, необходимо рассматривать вопросы останова и прерывания
конвейерной обработки с учётом производительности, которая потребуется
для достижение функционирования в реальном времени. Останов конвейера
происходит в тех случаях, когда отсутствуют необходимые данные, или когда
процессору это нужно по ряду других причин. Естественно, что процессор
останавливается и в том случае, когда он не получает результаты процесса
вычислений или, когда время доступа к памяти слишком велико. Прерывания
возникают в случае, когда в ходе выполнения программы необходимо перейти
на другую ветвь алгоритма, поскольку целевая команда находится за пределами
конвейера.
Если используется базовое ядро, прерывания и остановы конвейерной обработки
вполне могут происходить, однако это нежелательно. Поэтому необходимо
реорганизовать программу таким образом, чтобы избежать остановов, увеличивая,
например, время ожидания в результате прерываний.
Использование ресурсов мощности
Допуская, что оба процессора потребляют примерно одинаковую мощность
на единицу производительности, DSP фирмы Analog Devices казалось бы должны
выигрывать в борьбе за экономичность. Однако ядро Tangent позволяет инженеру-разработчику
дополнительно к базовой системе команд использовать специальные команды
умножения-сложения, двухпортовую память и аналогичный DSP модуль адресации.
Поэтому, за исключением архитектуры load-store, процессор Tangent может
достичь того же уровня производительности, что и основные современные
DSP. Следовательно, оба процессора потребляют одинаковую мощность, если
их использовать для одного и того же процесса.
Но всё же ARC чуть-чуть лучше всех стандартных DSP.
Поскольку компания ARC поставляет процессор в виде “пластилина” для разработчика,
его можно “вылепить” или для использования в малопотребляющих изделиях,
или для изделий, требующих определённого быстродействия.
В этом смысле переконфигурируемое ядро имеет важное преимущество, но оно
же может привести и к некоторым потерям.
Для DSP, оптимизированного “вручную” и изготавливаемого с использованием
стандартной полупроводниковой технологии, размер его “неизменной” части
будет вероятно меньше эквивалента синтезируемой части, использующей ядро
ARC. Различие в размерах зависит от многих факторов, включая размер и
тип памяти на кристалле, завершённости и устойчивости работы модулей из
библиотеки прикладных программ, качества инструментальных средств синтеза
и умения инженера, управляющего процессом синтеза.
Традиционно, размер и тип памяти имеют определяющее значение для размера
самого DSP. Для достижения высокой плотности и малого потребления при
ограниченных ресурсах быстродействия обычно жертвуют памятью. Так что
размер кристалла примерно одинаков для стандартных DSP и переконфигурируемых
микроконтроллеров.
“Си” и системы на кристалле
Гибкость и возможность расширения ядер типа Tangent позволяет разработчикам
идти один шаг впереди стандартных DSP.
Например, цифровое косинус-преобразование в MP3 плеерах ограничивается
количеством циклов, которые требуются для завершения полной трансформации,
однако при этом возможность создания специализированных команд позволяет
уменьшить потребляемую мощность.
Поскольку одна специальная команда дискретного косинус-преобразования
экономит при декодировании по меньшей мере 4096 стандартных команд, экономия
мощности напрямую зависит от эффективности программы.
Нужно сказать, что ядро Tangent затмевает большинство стандартных DSP,
поддерживающих обработку данных с фиксированной запятой в поддержке программ,
написанных на языке “Cи”. Поскольку фирма ARC разработала Tangent, думая
о “Cи”, в систему команд входят и такие, которые учитывают особенности
компиляторов, правда это мало что даёт программистам, использующим ассемблер.
Tangent обладает улучшенной способностью изменять контексты, сохранять
состояния процессора и адресовать фреймы стека. Хотя можно реализовать
базовый дешифратор MP3 с помощью 2000–3000 команд, по мере того как характеристики
пользовательского интерфейса становятся всё более сложными и изощрёнными,
программирование склоняется в пользу использования для управляющего кода
языка Cи, а пользовательский интерфейс потребует пяти или шести кнопок.
Можно сконфигурировать ADSP-2186M для считывания информации от кнопок,
управления ЖКИ и обеспечения связи со стереокодеком.
Но также можно сконфигурировать Tangent-ядро со схемой управления ЖКИ
на кристалле и функционально-ориентированными кнопками, а в качестве аналогового
стереовыхода может быть выбран любой, подходящий по объёму и стоимости.
Выводы
Стандартные DSP, также как ADSP-2186M, используются во многих приложениях
из-за низкой стоимости. Но если рассмотреть конечный продукт с точки зрения
системы, большая часть бытовых и иных изделий может быть существенно улучшена,
если использовать возможности конфигурирования и расширения процессоров
типа ARC.
Конечно, решение, которое удовлетворит необходимым специфическим требованиям,
зависит от требуемого типа I/O, размеров изделия, его производительности,
потребляемой мощности и многого другого. Однако, независимо от технических
требований, имеется выбор, позволяющий удовлетворить эти потребности.
И в конечном итоге, всё зависит от качества и количества той инженерной
работы, которую Вы можете на это потратить.
EDN, январь 2001 г.
Набор команд ARC
Процессорное ядро Tangent фирмы ARC является уникальным
среди микроконтроллеров, но многие проиводители микроконтроллеров
начинают движение в его сторону.
Данное ядро поддерживает 30 базовых команд, но можно сконфигурировать
его таким образом, что подключится ещё более 71 дополнительных команд,
определяемых пользователем.
Дополнительно к базовой системе команд, ARC-процессор включает встроенные
расширенные команды, которые можно использовать для ускорения работы
алгоритмов в различных приложениях. Библиотеки расширений включают
мощный комплект команд DSP и дополнительные команды микроконтроллера
общего назначении, например, сдвиговые регистры. Дополнительно к
встроенным расширениям команд можно легко добавить заказные команды,
используя VHDL или Verilog. Можно легко сконфигурировать сервисные
программы ARC, чтобы разрешить использование этих команд в стандартном
режиме разработки программ.
ARC-процессор использует четырёхэтапный конвейер, который поддерживает
как одноцикловые, так и мультицикловые команды, позволяя добавлять
в конвейер очень сложные команды. ARC-процессор поддерживает режим
слот-задержки, который поддерживает циклы с нулевыми потерями и
ветвления. Все команды устройств арифметики условные. Имеется 32
условные команды: 16 встроеных команды, 16 команд, используюемых
для определяемых пользователем расширений. Эта ситуация позволяет
добавлять специфические пользовательские команды, позволяющие установить
периферийные аппаратные средства, например, заказные сопроцессоры.
Эти команды позволяют использовать специализированное программное
обеспечение для реализации сложных алгоритмов принятия решения очень
эффективными методами, причём и для перефирийных устройств и для
расширенного набора команд могут быть созданы условные команды для
конкретных решений.
Регистры
ARC-ядро поддерживает 32 регистра общего назначения,
32-бит регистры ядра. Можно увеличить общее число регистров до 64,
чтобы использовать любые определяемые пользователем регистры ядра.
Ядро поддерживает 4-Гбайт вспомогательное регистровое пространство,
доступ к которому обеспечивается через вспомогательную шину. Этот
доступ позволяет определять по существу неограниченное количество
вспомогательных регистров для связи других периферийных устройств.
DSP расширения
ARC-процессор располагает мощным комплектом DSP-расширений,
которые обеспечивают реальное быстродействие DSP, включая XY память,
конфигурируемый MAC и множество арифметических операций.
MAC поддерживает 16ґ16, 24ґ24 и двойной 16ґ16 режим, позволяя выбирать
соответствующую точность для конкретного приложения. Переконфигурируемая
память XY-типа допускает использование четырёх банков памяти XY.
Это повышает устойчивость и быстродействие, поскольку процессор
может иметь доступ к одному банку, пока происходит обращение к другому
через устройство прямого доступа в память.
Четыре 32-бит регистра, связанные с каждым банком памяти, обеспечивают
быструю коммутацию. Для того, чтобы ускорить выполнение некоторых
функций, например БПФ, устройства генерации адреса для XY-памяти
поддерживают модульную и инверснобитовую адресации в режимах переменного
смещения и постинкремента. В случае необходимости, эти режимы можно
удалить при конфигурации процессора.
Команды и кеширование данных
ARC-процессоры поддерживают кеширование команд
и данных, что существенно улучшает загрузку-хранение данных и эффективность
команд выборки.
Как кеш данных, так и кеш команд могут быть сконфигурированы.
Можно выбрать размер кеша и выбрать один, два или четыре пути для
реализации ассоциативности. Длина пути также конфигурируется. Можно
также заблокировать некоторые пути, оставаясь при этом уверенным,
что критичные к быстродействию данные или команды, например, программы
обслуживания прерываний, всегда кешируются. Можно выбрать один из
двух алгоритмов замены: произвольная замена или циклическая. И наконец,
можно аннулировать целые или выборочные линии кеш.
Кеш данных обеспечивает перезапись, блокировку и распределённую
запись в соответствии с определёнными правилами записи; построчную
запись в буфер; в кеш под управлением ЦЕНТРАЛЬНОГО ПРОЦЕССОРА, поддержку
LD.DI и ST.DI команд, обеспечивающих обходной режим для данных “на
лету”.
Контроль потребления
Небольшой размер ARC-процессоров и их способность
к изменению конфигурации позволяют разрабатывать изделия с низким
уровнем потребления, устраняя функции, не используемые в конкретном
приложении.
ARC-процессоры также поддерживают “спящий” режим потребления и управление
мощностью процессора с помощью специальных часов, устанавливая,
каким устройствам и сколько позволено потребление определённых уровней
мощности.
Можно резко снизить потребляемую мощность, используя специальные
пользовательские команды или команды из расширенного набора, которые
устанавливают для реализации алгоритмов предельное значение быстродействия,
обеспечивающее выполнение заданных условий.
|
|