Ten dokument podaje 60 DMIPS / mW dla Cortex M0, w porównaniu do 31 DMIPS / mW dla M3. (Ten ostatni nie zgadza się z liczbami w tym dokumencie , które cytują 1,25 DMIPS / MHz i 0,19 mW / MHz, co daje 6,6 DMIPS / mW.)
Czy ktoś wie, jak wydajność / moc M0 wypada w porównaniu z kontrolerami 8/16-bitowymi jak AVR, PIC i MSP430? A o co chodzi z liczbami M3?
microcontroller
performance
Federico Russo
źródło
źródło
Odpowiedzi:
Oto kilka wskazówek, które mogę podać. Specyfikacje dostarczane przez NXP dotyczą całego układu (rdzenia, pamięci, urządzeń peryferyjnych). Specyfikacja dostarczana przez ARM oparta jest tylko na rdzeniu. Ponieważ liczby są wyprowadzane w różny sposób, porównanie jest bardzo trudne.
Proponuję więc wycofać się i spojrzeć na dwa urządzenia. MCU oparty na NXP M0 i MCU oparty na MXP M3.
Dla MCU opartego na M0 spójrzmy na LPC1111. Kiedy MCU wykonuje zajętą pętlę biegu jałowego, zużywa 3 mA prądu przy częstotliwości taktowania 12 MHz. Daje to 250uA / MHz, co przy 3,3 V wynosi 825uW / MHz.
Dla MCU opartego na M3 spójrzmy na LPC1311. Kiedy MCU wykonuje tę samą zajętą pętlę biegu jałowego, zużywa 4 mA prądu przy 12 MHz. Wydajność 333,3 uA / MHz, czyli 1,1 mW / MHz.
Jeśli spojrzymy na MCU MSP430C1101 (16-bit), zobaczymy, że będzie używać 240uA przy 1 MHz, gdy napięcie będzie wynosić 3 V. Daje to 720uW / MHz.
Następnie przejdźmy do ATMega328 (używanego w Arduino Uno). Widzimy 200uA zastosowane przy 1 MHz o napięciu 2 V. Daje to 400uA / MHz.
Należy również zauważyć, że MSP430 i AVR są specyfikowane inaczej. Ich pobór mocy jest podawany przy 1 MHz, gdzie jako M0 i M3 są podawane przy 12 MHz. Oznacza to, że M0 i M3 mają nieefektywne skalowanie do 12 MHz upieczone na ich liczbę.
Wszystkie te wartości są aktywnymi liczbami zużycia prądu. Jeśli spojrzysz na pobór prądu, gdy urządzenie znajduje się w trybie uśpienia, zobaczysz, że zużywasz rząd wielkości mniejszej mocy. Zaletą 32-bitowego M0 jest to, że może wykonać znacznie więcej pracy w krótszym czasie niż 8 i 16-bitowy MCU. Oznacza to, że przy danym obciążeniu spędzi dużo więcej czasu w stanie uśpienia. M0 w rękach dobrego inżyniera często osiąga znacznie lepszą wydajność energetyczną niż 8-bitowy MCU w rękach mniej wykwalifikowanego inżyniera, pomimo różnic w zużyciu energii czynnej.
Z mojego doświadczenia wynika, że M0 jest tak blisko 16 i 8-bitowego poboru mocy czynnej, że można nadrobić wiele różnic w aplikacji. Również wielokrotne zużycie energii przez wszystko, co wieszasz na MCU, przewyższa MCU. Tak więc w przypadku wielu aplikacji radzenie sobie ze skutecznością MCU nie jest najważniejsze.
Mam nadzieję że to pomogło. Długo można powiedzieć, że zużycie energii jest nieco gorsze, ale z tymi cyklami zegara można zrobić znacznie więcej niż w przypadku innych układów. Tak więc to naprawdę zależy od twojej aplikacji.
źródło
Porównywanie 12 MHz do 1 MHz jest tendencyjne - wyższe częstotliwości taktowania wymagają mniejszego prądu na MHz. Na przykład najnowsze MSP430 mogą osiągać nawet 80-120uA na MHz przy 8 / 16MHz w trybie aktywnym.
Warto wspomnieć, że poprawnie napisany kod utrzymuje aktywny tryb MCU poniżej 1% (a nawet 0,1%) czasu, więc tryby zasilania mają tutaj duże znaczenie.
W rzeczywistości MSP430 jest trudny do pokonania (nie jestem pracownikiem TI) ze względu na bardzo przydatne stany niskiej mocy, w których inne MCU potrzebują więcej czasu na przebudzenie lub nie przechowują zawartości pamięci RAM, co jest śmieszne.
źródło