Анализ ядер MIPS32 M4K, Cortex-M3 и C28x
V/ ■ V
как решении для цифровом обработки сигналов
Алексей ПАНТЕЛЕИЧУК
pantel@compel.ru
Традиционно для приложений цифровой обработки сигналов (DSP) используются цифровые сигнальные процессоры, построенные на базе специализированной архитектуры, позволяющей добиться высокой производительности системы. В последнее время все чаще производители микроконтроллеров, снабдив свои решения дополнительным функционалом и увеличив тактовые частоты, рекомендуют их для DSP-приложений, хотя изначально микроконтроллеры предназначены для задач управления. В настоящей статье делается попытка проанализировать микроконтрол-лерные ядра Cortex-M3 и MIPS32 M4K с точки зрения способности их выполнять задачи цифровой обработки сигналов, а также произвести их сравнение с традиционным DSP-ядром C28x компании Texas Instruments.
Ядро MIPS32 M4K
Ядро M4K является представителем 32-разрядного семейства процессорных ядер компании MIPS Technologies. Эти ядра рекомендуются производителем для множества задач, начиная от встраиваемых приложений реального времени и заканчивая высокопроизводительными системами с функциями цифровой обработки. Ядро M4K является самым миниатюрным по занимаемой площади на кристалле и самым экономичным по энергопотреблению ядром компании MIPS.
На базе ядра M4K построены, например, микроконтроллеры семейства PIC32 компании Microchip.
Ядро Cortex-M3
Ядро Cortex-M3 разработано компанией ARM, решения которой хорошо известны всем разработчикам. Cortex-M3 представляет собой первое ядро, построенное по архитектуре ARMv7-M и рекомендуется для приложений, в число которых входят промышленные системы управления и беспроводные сети. На ба-
зе этого ядра построены микроконтроллеры STM32 компании STMicroelectronics.
Ядро С28ж
С28x представляет собой 32-разрядное ядро для недорогих приложений цифровой обработки сигналов. Построено на основе архитектуры с сокращенным набором команд (RISC). На базе этого ядра построены цифровые сигнальные контроллеры TMS320F28xx компании Texas Instruments. Контроллеры, а не процессоры, потому что TMS320F28xx
ЦОС
23
ЕТМ-интерфейс
Шина считываемых команд
Логика
управления
Thumb
декодер
Thumb 2 декодер
32-битное АЛУ
32-битный
умножитель
Делитель
Интерфейс
NVIC
Интерфейс
шин
С
Адресная шина команд
( Адресная шина считываемых данных () ( Шина считывания данных ()
Ю
Ю
Логика генерации адресов команд
—~J~—
Логика управления командами
[ Буфер считываемых данных ]
MUX
MUX
Адрес из стека
адрес
Рис. 2. Архитектура ядра Cortex-M3
обладают периферийными устройствами, присущими микроконтроллерам.
Методы анализа
Существует огромное количество методов для сравнения и анализа микроконтроллеров и цифровых сигнальных процессоров. Самые простые из них заключаются в простом сравнении тактовых частот, объемов памяти. В более сложных методах анализируется число определенных операций (в нашем случае это может быть умножение, сложение), выполняемых в единицу времени. Самые сложные, и, скорее всего, наиболее корректные, базируются на сравнении скорости выполнения алгоритмов, таких как быстрое преобразование Фурье, КИХ- и БИХ-фильтрация, свертка и т. д. Также существуют стандартные синтезированные алгоритмы для определения производительности ядра, например, Dhrystone. Очень часто возникает ситуация, при которой ядро «выйдет победителем» согласно одному методу и «потерпит поражение» согласно другому.
В этой статье мы не будем придерживаться ни одного из методов, а просто рассмотрим, что есть у каждого из ядер для решения задач цифровой обработки сигналов.
Умножение
Одна из основных задач DSP-приложения состоит в осуществлении большого объема математических вычислений в реальном времени. Основными операциями в этом случае являются: умножение, умножение с накоплением (MAC), сложение и разность, а также операции пересылки операндов и результата между памятью и вычислительными модулями.
Ядро M4K содержит умножитель-делитель с отдельным конвейером (MDU), который функционирует параллельно с основным конвейером и во время останова основного продолжает работать. Умножитель поддерживает операции со знаком и без знака, среди которых умножение, умножение с накоплением (MAC) и деление. Эти операции входят в состав системы команд MIPS32 Release 2 ISA. Когда такая команда попадает в конвейер, она передается
Шина операндов
Текущие данные
Текущие
данные
ARAU Регистровый файл
Умножитель, параллельный сдвигатель, АЛУ
( Шина результатов О
[ Буфер записываемых данных ]
і
( Шина записи данных/команд О
1
( Адресная шина записи данных О
Рис. 3. Архитектура ядра С28х
в МЭИ для выполнения, а команда, следующая за ней (не МЭИ-команда), продолжает перемещаться через конвейер без задержек. Исключение составляют команды, следующие за МЭИ-командами и использующие результат этих МЭИ-команд. МЭИ способен выполнять операции умножения 32x16 бит (с накоплением и без) за один цикл. Ядро СоГех-М3 выполняет операцию 32x32 бит за один цикл, хотя более ранние версии АКМ7ТОМ1 этого не могут.
Умножитель ядра С28 может выполнять две операции 16x16 бит с 32-разрядным результатом или одну 32x32 бит с 64-разрядным результатом за один цикл. Две операции 32x32 бит в случае необходимости совмещаются для выполнения операции 64x64 = 128 бит.
При сложении больших массивов данных может произойти переполнение регистра результата, или так называемое насыщение. При этом в результате сложения двух положительных чисел получается отрицательный результат, а двух отрицательных — положительный. Также, при перемножении больших массивов данных, важно организовать округление результата умножения, например, 16x16 бит до шестнадцати бит. Ни в М4К, ни в СоГех-М3 эти функции аппаратно не поддерживаются. Несмотря на то, что существуют программные библиотеки этих функций, облегчающие разработку Б8Р-алгоритмов, производительность ядра будет ограничена. Ядро С28х поддерживает эти операции аппаратно.
Конвейер
Конвейер позволяет организовать параллельную обработку очереди из нескольких команд. В ходе этой обработки команда прове-
ряется на правильность, генерируются адреса и подкачиваются необходимые операнды для ее выполнения и т. д. Естественно, без конвейера на выполнение этих операций ядру пришлось бы затратить много циклов тактовой частоты. Но организовывать длинный конвейер тоже не всегда правильно, так как в случае команды перехода, возникновения прерывания, содержание конвейера теряет ценность, и все его фазы командам, начинающимся с адреса перехода, нужно проходить заново. Исходя из этого, для приложений управления, характеризующихся большим количеством команд перехода и частыми прерываниями, конвейер не должен быть длинным — обычно он состоит из трех уровней. Для приложений цифровой обработки сигналов, в которых программный код в основном выполняется последовательно, длинный конвейер позволяет увеличить производительность системы.
Самым коротким конвейером из рассматриваемых ядер обладает Соі!ех-М3. Конвейер ядра СоГех-М3 содержит всего три уровня: выборка, декодирование, выполнение команды. Стоит отметить, что чем короче конвейер, тем меньше энергопотребление и площадь ядра на кристалле, и тем выше эффективность компилятора. Но для приложений цифровой обработки сигналов использование короткого конвейера ограничивает максимальную производительность.
Ядро М4К содержит 5-уровневый конвейер ядра, а также отдельный конвейер умножителя-делителя, о котором шла речь ранее.
Теперь рассмотрим подробнее конвейер специализированного Б8Р-ядра С28х, состоящий из восьми уровней (табл. 1). Благодаря кон-
Таблица 1. Уровни конвейера ядра C28x
Фазы конвейера Описание
Выборка 1 ЦПУ устанавливает адрес команды на шине адреса команд
Выборка 2 ЦПУ считывает из памяти и загружает команды в очередь выборки команд
Декодирование 1 С28х поддерживает 32- и 16-разрядные команды, последние могут быть выровнены по четным или нечетным адресам. На этой стадии конвейера определяются границы команды из очереди выборки команд, ее размер. Также проверяется правильность команды
Декодирование 2 Завершается декодирование команды: • Если нужно считать или записать данные в памяти, ЦПУ генерирует необходимые адреса • ARAU выполняет все необходимые преобразования указателя стека • В случае необходимости (команда ветвления или недопустимая команда) выполнение завершается.
Чтение 1 Если операнды считываются из памяти, на шинах адреса устанавливаются необходимые адреса
Чтение 2 Извлекаются операнды из памяти
Выполнение Выполняются все умножения, сдвиги и АЛУ-операции
Запись Результат, при необходимости, сохраняется в памяти
вейеру ядро С28х может обрабатывать одновременно восемь команд, в результате чего в момент выполнения вычислительным модулям доступны все необходимые операнды. А после выполнения (при необходимости) результаты вычислений сохраняются в памяти, о чем тоже «заботится» конвейер. Благодаря такому конвейеру становится возможным в каждый момент времени выполнять команды, которые без конвейера обрабатывались бы за несколько тактов ядра.
При реализации ЭвР-алгоритмов очень часто используются внутренние циклы. Такие циклы содержат относительно небольшое количество команд, которые чаще являются командами ветвления. Для увеличения производительности в ЭвР-процессорах используются специальные аппаратные функции для реализации внутренних циклов. В М4К и Со11ех-М3, как и в большинстве процессоров общего назначения, таких аппаратных функций нет. Каждое ветвление занимает два цикла тактовой частоты, что сказывается на скорости выполнения БвР-алгоритмов
Система памяти
Приложения цифровой обработки сигналов отличаются тем, что обрабатывают
большие массивы данных, для сохранения которых требуется большой объем памяти. Кроме того, при реализации DSP-алгоритмов реального времени требуется высокая вычислительная производительность. Очень часто выполняются математические операции с двумя операндами. В этом случае важна способность процессора передавать операнды и результат операции в память и из памяти с необходимой скоростью. В традиционных DSP-процессорах это достигается за счет раздельных шин команд и данных. В этом случае возможно за один цикл тактовой частоты выполнить передачу команды и операнда. В высокопроизводительных DSP-процессорах может использоваться до двух шин данных и отдельной шины команд.
Все рассматриваемые ядра — Cortex-M3, M4K и C28x — построены на основе гарвардской архитектуры памяти с раздельными шинами команд и данных.
Ядро C28x содержит три шины для работы с памятью: шина чтения из памяти программ, шина чтения из памяти данных и шина записи памяти программ-данных. Благодаря такой архитектуре ядро C28x может одновременно читать из памяти программ, читать из памяти данных и писать в память данных.
Специализированные команды
В приложениях цифровой обработки сигналов чаще всего используются команды умножения (с накоплением или без) и сложения. Многие DSP-ядра аппаратно поддерживают команды подсчета количества старших нулевых битов (CLZ) и единичных битов (CLO) внутри 32-разрядного слова. Эти команды широко используются при реализации кодеков с переменной длиной кодируемого слова. Из рассматриваемых ядер эти команды поддерживают C28x и M4K.
Выводы
Естественно, все аспекты выбора ядра для приложений цифровой обработки охватить очень сложно, особенно если доступны решения на базе разных архитектур. Если прило-
Таблица 2. Обобщенное сравнение ядер сточки зрения DSP
Cortex-M3 M4K C28x
Разрядность ядра, бит 32 32 32
Частота ядра, МГц 135 228 150
Конвейер, уровней 8
Регистры общего назначения 13х32-бит 32х32-бит 8х32-бит
Архитектура системы памяти гарвардская гарвардская гарвардская
Умножение за один цикл 32х32 32х16 32х32
Операции округления нет нет да
Операции насыщения нет нет да
Команды CLZ и CLO нет да да
жение представляет собой, по сути, систему управления с элементами цифровой обработки сигналов, естественно, специализированный DSP-процессор будет излишним, приведет к высокому энергопотреблению (за счет разветвленной системы шин памяти) и стоимости системы, а такие его особенности, как длинный конвейер команд, будут, напротив, помехой при компиляции. В этом случае стоит обратить внимание на такие ядра, как Cortex-M3 и M4K (в зависимости от сложности цифровой обработки в приложении). И наоборот, даже при относительно низкой тактовой частоте (150 МГц C28x против 228 МГц M4K), ядро C28x вне конкуренции при реализации чистых DSP-алгоритмов — с большим числом умножений и сложений (32x32 бит C28x против 32x16 бит 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.