Как работает Cortex M0 по сравнению с 8-битными контроллерами?

10

Этот документ цитирует 60 DMIPS / мВт для Cortex M0 против 31 DMIPS / мВт для M3. (Последнее не согласуется с числами в этом документе , которые указывают 1,25 DMIPS / МГц и 0,19 мВт / МГц, что дает 6,6 DMIPS / мВт.)
Кто-нибудь знает, как производительность / мощность M0 сравнивается с 8/16-битными контроллерами как AVR, PIC и MSP430? А как обстоят дела с цифрами М3?

Федерико Руссо
источник
3
@frederico это очень загруженный вопрос, и нет простого ответа. Поскольку мой опыт заключается в том, что другие факторы определяют производительность. Такие вещи, как возможности предварительной выборки, скорости шины, количество периферийных устройств, свисающих с шины, скорости флеш-доступа и т. Д. И т. Д. Если вы хорошо профилируете систему, вы почти всегда видите, как поступают данные и становится бутылочным горлышком. Что ж, если вы детализируете свое приложение, я был бы рад дать вам представление о том, как лучше выбрать процессор.
Фрэнк
1
@Frank: Разве тест Dhrystone не учитывает такие вещи, как предварительная выборка и скорость шины? Особенно мне хотелось бы прояснить противоречивые цифры NXP M3. Не могу дать вам подробную информацию о приложении, потому что подробности еще не существуют :-)
Федерико Руссо
@Frederico, я считаю себя ниже среднего инженера, конечно, не архитектор. Я не доверяю никаким контрольным показателям, поскольку данные почти всегда обрабатываются. Например, если у вас высокоскоростной приемник данных, который требует, чтобы вы вводили и выводили данные, а в то же время вам необходим доступ к памяти и другим периферийным устройствам, это мешает работе шины. Эти процессоры предназначены для средних случаев использования. Если вы выполняете мягкое декодирование определенных данных, для которых требуется несколько операций чтения / записи памяти, а путь к данным может быть переполнен или истощен. Это обычно заканчивается бессонными ночами для парней программного обеспечения.
Фрэнк
В наши дни Dhrystone - забавная игрушка, но она мало что говорит. Тесты вообще ничего вам не говорят. Вы должны взять свое приложение и запустить его. Компилятор, который вы выбираете, не меняя код или оборудование, может в несколько раз повысить производительность плюс или минус, так что это все очень сложно. Вы можете сделать тесты, которые заставят цифры показывать все, что вы хотите.
old_timer
ARM собирается обвести остальных вокруг для чистой производительности (при одинаковом размере и сходной цене, не обязательно мощность). Я не думаю, что даже 8051 работает так же медленно, как PIC. Можете ли вы вспомнить количество потерянных часов, чтобы сделать что-нибудь полезное? Используя asm, люди используют C, и это становится невыносимым для просмотра. Msp430, вы, вероятно, захотите его для приложений, в которых вы его выключаете, он просыпается однажды в голубой луне, делает пару вещей, а затем засыпает, как пульт дистанционного управления телевизора или что-то в этом роде.
old_timer

Ответы:

9

Вот несколько советов, которые я могу предоставить. Спецификации, которые предоставляет NXP, относятся ко всему чипу (ядро, память, периферия). Спецификация, которую предоставляет ARM, основана только на ядре. Поскольку числа получены по-разному, очень трудно сделать сравнение.

Итак, я предлагаю отступить и посмотреть на два устройства. MCU на основе NXP M0 и MCU на основе MXP M3.

Для MCU на основе M0 давайте посмотрим на LPC1111. Когда этот MCU выполняет занятый бездействующий контур, он будет потреблять 3 мА тока с тактовой частотой 12 МГц. Это дает 250 мкА / МГц, что при 3,3 В составляет 825 мкВт / МГц.

Для MCU на основе M3 давайте посмотрим на LPC1311. Когда этот MCU выполняет ту же самую занятую петлю ожидания, он будет потреблять 4 мА тока на частоте 12 МГц. Выход 333,3 мкА / МГц, что составляет 1,1 мВт / МГц.

Если мы посмотрим на микроконтроллер MSP430C1101 (16-разрядный), то увидим, что он будет использовать 240 мкА при 1 МГц при напряжении 3 В. Это дает 720uW / MHz.

Теперь давайте обратимся к ATMega328 (используется в Arduino Uno). Мы видим 200 мкА, используемые при 1 МГц с напряжением 2 В. Это дает 400 мкА / МГц.

Следует также отметить, что MSP430 и AVR определены по-разному. Их потребляемая мощность указана при 1 МГц, а M0 и M3 - при 12 МГц. Это означает, что M0 и M3 имеют неэффективность масштабирования до 12 МГц, включенную в их число.

Все эти значения являются активными числами потребления тока. Если вы посмотрите на потребление тока, когда устройство находится в спящем режиме, вы увидите, что потребляемая мощность на порядок меньше. Преимущество, которое обеспечивает 32-битный M0, состоит в том, что он может выполнить гораздо больше работы за меньшее время, чем 8 и 16-битный MCU. Это означает, что для данной рабочей нагрузки он будет проводить намного больше времени в состоянии сна. M0 в руках хорошего инженера часто получит гораздо лучшую энергоэффективность, чем 8-битный MCU в руках менее квалифицированного инженера, несмотря на различия в потреблении активной мощности.

По моему опыту, M0 настолько близок к 16 и 8-битному потреблению активной мощности, что вы можете компенсировать множество различий в приложении. Кроме того, много раз энергопотребление всего, что у вас висит от MCU, превосходит MCU. Таким образом, для многих приложений повышение эффективности MCU - не самая важная вещь.

Надеюсь, это поможет. Можно сказать, что энергопотребление немного хуже, но с этими тактами вы справляетесь намного больше, чем другие чипы. Итак, это действительно зависит от вашего приложения.

tallganglyguy
источник
1
Обратитесь к первому абзацу: если показатели ARM примерно соответствуют ядру, то они должны быть выше, чем показатели NXP, которые включают мощность периферийных устройств. Но они ниже. Я тоже не могу это объяснить.
Стивенвх
1
Кроме того, вы должны сравнить контроллеры при равных напряжениях. Если вы используете LPC1111 на 3 В, как MSP430, их энергопотребление очень близко. Неплохо для NXP ARM; MSP430 известен своей низкой мощностью.
Стивенвх
1
одна большая проблема, с которой я столкнулся с устройствами ARM Cortex по сравнению с MSP430, заключается в том, что устройства ARM могут сжигать много циклов процессора, возвращаясь в рабочее состояние из режима низкого энергопотребления. Данные RAM потеряны и должны быть заново созданы / инициализированы (кроме SRAM с резервным питанием от батареи), PLL и система синхронизации должны быть перезапущены. MSP просто возобновляет выполнение следующей инструкции со всей оперативной памятью без изменений, когда она переходит в спящий режим. Если ваш процесс включает частые переходы между активным и спящим режимами, то ARM будет проигрывать.
uɐɪ
3

Сравнение от 12 МГц до 1 МГц смещено - более высокие тактовые частоты требуют меньшего тока на МГц. Например, последние версии MSP430 могут работать при 80-120 мкА на МГц с 8/16 МГц в активном режиме.

Стоит отметить, что правильно написанный код сохраняет активный режим MCU ниже 1% (или даже 0,1%) времени, поэтому режимы питания здесь имеют большое значение.

В реальной жизни MSP430 трудно победить (я не сотрудник TI) из-за очень полезных состояний низкого энергопотребления, когда другим MCU требуется больше времени для пробуждения или они не сохраняют содержимое оперативной памяти, что нелепо.

user19790
источник