Анализ ядер MIPS32 M4K, Cortex-M3 и C28x как решений для цифровой обработки сигналов

№ 3’2008
PDF версия
Традиционно для приложений цифровой обработки сигналов (DSP) используются цифровые сигнальные процессоры, построенные на базе специализированной архитектуры, позволяющей добиться высокой производительности системы. В последнее время все чаще производители микроконтроллеров, снабдив свои решения дополнительным функционалом и увеличив тактовые частоты, рекомендуют их для DSP приложений, хотя изначально микроконтроллеры предназначены для задач управления. В настоящей статье делается попытка проанализировать микроконтроллерные ядра Cortex.M3 и MIPS32 M4K с точки зрения способности их выполнять задачи цифровой обработки сигналов, а также произвести их сравнение с традиционным DSP.ядром C28x компании Texas Instruments.

Традиционно для приложений цифровой обработки сигналов (DSP) используются цифровые сигнальные процессоры, построенные на базе специализированной архитектуры, позволяющей добиться высокой производительности системы. В последнее время все чаще производители микроконтроллеров, снабдив свои решения дополнительным функционалом и увеличив тактовые частоты, рекомендуют их для DSP-приложений, хотя изначально микроконтроллеры предназначены для задач управления. В настоящей статье делается попытка проанализировать микроконтроллерные ядра Cortex-M3 и MIPS32 M4K с точки зрения способности их выполнять задачи цифровой обработки сигналов, а также произвести их сравнение с традиционным DSP-ядром C28x компании Texas Instruments.

Ядро MIPS32 M4K

Архитектура ядра M4K

Ядро M4K является представителем 32-разрядного семейства процессорных ядер компании MIPS Technologies. Эти ядра рекомендуются производителем для множества задач, начиная от встраиваемых приложений реального времени и заканчивая высокопроизводительными системами с функциями цифровой обработки. Ядро M4K является самым миниатюрным по занимаемой площади на кристалле и самым экономичным по энергопотреблению ядром компании MIPS. На базе ядра M4K построены, например, микроконтроллеры семейства PIC32 компании Microchip.

Ядро Cortex-M3

Архитектура ядра Cortex-M3

Ядро Cortex-M3 разработано компанией ARM, решения которой хорошо известны всем разработчикам. Cortex-M3 представляет собой первое ядро, построенное по архитектуре ARMv7-M и рекомендуется для приложений, в число которых входят промышленные системы управления и беспроводные сети. На базе этого ядра построены микроконтроллеры STM32 компании STMicroelectronics.

Ядро С28x

Архитектура ядра С28x

С28x представляет собой 32-разрядное ядро для недорогих приложений цифровой обработки сигналов. Построено на основе архитектуры с сокращенным набором команд (RISC). На базе этого ядра построены цифровые сигнальные контроллеры TMS320F28xx компании Texas Instruments. Контроллеры, а не процессоры, потому что TMS320F28xx обладают периферийными устройствами, присущими микроконтроллерам.

Методы анализа

Существует огромное количество методов для сравнения и анализа микроконтроллеров и цифровых сигнальных процессоров. Самые простые из них заключаются в простом сравнении тактовых частот, объемов памяти. В более сложных методах анализируется число определенных операций (в нашем случае это может быть умножение, сложение), выполняемых в единицу времени. Самые сложные, и, скорее всего, наиболее корректные, базируются на сравнении скорости выполнения алгоритмов, таких как быстрое преобразование Фурье, КИХ- и БИХ-фильтрация, свертка и т. д. Также существуют стандартные синтезированные алгоритмы для определения производительности ядра, например, Dhrystone. Очень часто возникает ситуация, при которой ядро «выйдет победителем» согласно одному методу и «потерпит поражение» согласно другому.

В этой статье мы не будем придерживаться ни одного из методов, а просто рассмотрим, что есть у каждого из ядер для решения задач цифровой обработки сигналов.

Умножение

Одна из основных задач DSP-приложения состоит в осуществлении большого объема математических вычислений в реальном времени. Основными операциями в этом случае являются: умножение, умножение с накоплением (MAC), сложение и разность, а также операции пересылки операндов и результата между памятью и вычислительными модулями.

Ядро M4K содержит умножитель-делитель с отдельным конвейером (MDU), который функционирует параллельно с основным конвейером и во время останова основного продолжает работать. Умножитель поддерживает операции со знаком и без знака, среди которых умножение, умножение с накоплением (MAC) и деление. Эти операции входят в состав системы команд MIPS32 Release 2 ISA. Когда такая команда попадает в конвейер, она передается в MDU для выполнения, а команда, следующая за ней (не MDU-команда), продолжает перемещаться через конвейер без задержек. Исключение составляют команды, следующие за MDU-командами и использующие результат этих MDU-команд. MDU способен выполнять операции умножения 32×16 бит (с накоплением и без) за один цикл. Ядро Cortex-M3 выполняет операцию 32×32 бит за один цикл, хотя более ранние версии ARM7TDMI этого не могут.

Умножитель ядра C28 может выполнять две операции 16×16 бит с 32-разрядным результатом или одну 32×32 бит с 64-разрядным результатом за один цикл. Две операции 32×32 бит в случае необходимости совмещаются для выполнения операции 64×64 = 128 бит.

При сложении больших массивов данных может произойти переполнение регистра результата, или так называемое насыщение. При этом в результате сложения двух положительных чисел получается отрицательный результат, а двух отрицательных — положительный. Также, при перемножении больших массивов данных, важно организовать округление результата умножения, например, 16×16 бит до шестнадцати бит. Ни в M4K, ни в Cortex-M3 эти функции аппаратно не поддерживаются. Несмотря на то, что существуют программные библиотеки этих функций, облегчающие разработку DSP-алгоритмов, производительность ядра будет ограничена. Ядро C28x поддерживает эти операции аппаратно.

Конвейер

Конвейер позволяет организовать параллельную обработку очереди из нескольких команд. В ходе этой обработки команда проверяется на правильность, генерируются адреса и подкачиваются необходимые операнды для ее выполнения и т. д. Естественно, без конвейера на выполнение этих операций ядру пришлось бы затратить много циклов тактовой частоты. Но организовывать длинный конвейер тоже не всегда правильно, так как в случае команды перехода, возникновения прерывания, содержание конвейера теряет ценность, и все его фазы командам, начинающимся с адреса перехода, нужно проходить заново. Исходя из этого, для приложений управления, характеризующихся большим количеством команд перехода и частыми прерываниями, конвейер не должен быть длинным — обычно он состоит из трех уровней. Для приложений цифровой обработки сигналов, в которых программный код в основном выполняется последовательно, длинный конвейер позволяет увеличить производительность системы.

Самым коротким конвейером из рассматриваемых ядер обладает Cortex-M3. Конвейер ядра Cortex-M3 содержит всего три уровня: выборка, декодирование, выполнение команды. Стоит отметить, что чем короче конвейер, тем меньше энергопотребление и площадь ядра на кристалле, и тем выше эффективность компилятора. Но для приложений цифровой обработки сигналов использование короткого конвейера ограничивает максимальную производительность.

Ядро M4K содержит 5-уровневый конвейер ядра, а также отдельный конвейер умножителя-делителя, о котором шла речь ранее.

Теперь рассмотрим подробнее конвейер специализированного DSP-ядра C28x, состоящий из восьми уровней (табл. 1). Благодаря конвейеру ядро C28x может обрабатывать одновременно восемь команд, в результате чего в момент выполнения вычислительным модулям доступны все необходимые операнды. А после выполнения (при необходимости) результаты вычислений сохраняются в памяти, о чем тоже «заботится» конвейер. Благодаря такому конвейеру становится возможным в каждый момент времени выполнять команды, которые без конвейера обрабатывались бы за несколько тактов ядра.

Таблица 1. Уровни конвейера ядра C28x
Уровни конвейера ядра C28x

При реализации DSP-алгоритмов очень часто используются внутренние циклы. Такие циклы содержат относительно небольшое количество команд, которые чаще являются командами ветвления. Для увеличения производительности в DSP-процессорах используются специальные аппаратные функции для реализации внутренних циклов. В M4K и Cortex-M3, как и в большинстве процессоров общего назначения, таких аппаратных функций нет. Каждое ветвление занимает два цикла тактовой частоты, что сказывается на скорости выполнения DSP-алгоритмов.

Таблица 2. Обобщенное сравнение ядер с точки зрения DSP
Обобщенное сравнение ядер с точки зрения DSP

Система памяти

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

Все рассматриваемые ядра — Cortex-M3, M4K и C28x — построены на основе гарвардской архитектуры памяти с раздельными шинами команд и данных.

Ядро C28x содержит три шины для работы с памятью: шина чтения из памяти программ, шина чтения из памяти данных ишина записи памяти программ-данных. Благодаря такой архитектуре ядро C28x может одновременно читать из памяти программ, читать из памяти данных и писать в память данных.

Специализированные команды

В приложениях цифровой обработки сигналов чаще всего используются команды умножения (с накоплением или без) и сложения. Многие DSP-ядра аппаратно поддерживают команды подсчета количества старших нулевых битов (CLZ) и единичных битов (CLO) внутри 32-разрядного слова. Эти команды широко используются при реализации кодеков с переменной длиной кодируемого слова. Из рассматриваемых ядер эти команды поддерживают C28x и M4K.

Выводы

Естественно, все аспекты выбора ядра для приложений цифровой обработки охватить очень сложно, особенно если доступны решения на базе разных архитектур. Если приложение представляет собой, по сути, систему управления с элементами цифровой обработки сигналов, естественно, специализированный DSP-процессор будет излишним, приведет к высокому энергопотреблению (за счет разветвленной системы шин памяти) и стоимости системы, а такие его особенности, как длинный конвейер команд, будут, напротив, помехой при компиляции. В этом случае стоит обратить внимание на такие ядра, как Cortex-M3 и M4K (в зависимости от сложности цифровой обработки в приложении). И наоборот, даже при относительно низкой тактовой частоте (150 МГц C28x против 228 МГц M4K), ядро C28x вне конкуренции при реализации чистых DSP-алгоритмов — с большим числом умножений и сложений (32×32 бит C28x против 32×16 бит M4K за один цикл) и использованием специализированных команд (CLO, CLZ).

Литература

  1. An Independent Analysis of the: MIPS Technologies MIPS32 M4K Synthesizable Processor Core. Berkeley Design Technology, Inc.
  2. TMS320C28x DSP CPU and Instruction Set Reference Guide (SPRU430D). Texas Instruments, Inc.
  3. Cortex-M3 Technical Reference Manual. ARM Limited.
  4. PIC32MX Family Data Sheet. Microchip Technology Inc.
  5. MIPS32 4K Processor Core Family Integrator’s Manual. MIPS Technologies.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *