Jak działa Cortex M0 w porównaniu do kontrolerów 8-bitowych?

10

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?

Federico Russo
źródło
3
@ Frederico to bardzo obciążone pytanie i nie ma łatwej odpowiedzi. Ponieważ z mojego doświadczenia wynika, że ​​inne rzeczy determinują wydajność. Rzeczy, takie jak funkcje pobierania wstępnego, prędkości magistrali, liczba urządzeń peryferyjnych zawieszających magistralę, prędkości dostępu flash itp. Itp. Jeśli dobrze profilujesz system, prawie zawsze widzisz pobieranie danych i na zewnątrz staje się szyjka butelki. Cóż, jeśli sprecyzujesz swoją aplikację, z przyjemnością przedstawię najlepszą drogę do wyboru procesora.
Frank
1
@Frank: Czy test porównawczy Dhrystone nie bierze pod uwagę rzeczy takich jak pobieranie wstępne i prędkość magistrali? Szczególnie chciałbym, aby wyjaśniono sprzeczne dane NXP M3. Nie mogę podać szczegółów aplikacji, ponieważ szczegóły jeszcze nie istnieją :-)
Federico Russo
@Frederico, uważam się za poniżej przeciętnego inżyniera, na pewno nie architekta. Nie ufam żadnym testom, ponieważ dane są prawie zawsze masowane. Na przykład, jeśli masz szybkie ujście danych, które wymaga wpychania i wyprowadzania danych, aw międzyczasie potrzebujesz dostępu do pamięci i innych urządzeń peryferyjnych, ta magistrala przypadków przeszkadza. Te procesory są zaprojektowane do średnich zastosowań. Jeśli wykonujesz miękkie dekodowanie niektórych danych, które wymagają kilku operacji odczytu / zapisu pamięci, a ścieżka danych może się przepełnić lub zagłodzić. Zwykle kończy się to nieprzespanymi nocami dla programistów.
Frank
Obecnie Dhrystone jest zabawną zabawką, ale niewiele ci mówi. Benchmarki w ogóle niewiele mówią. Musisz wziąć aplikację i uruchomić ją. Kompilator, który wybierzesz, nie zmieniając żadnego kodu ani sprzętu, może kilkakrotnie zwiększyć wydajność plus lub minus, więc wszystko to jest bardzo trudne. Możesz tworzyć testy porównawcze, dzięki którym liczby pokazują, co chcesz.
old_timer
ARM będzie krążyć wokół reszty dla czystej wydajności (przy podobnym rozmiarze i podobnej cenie, niekoniecznie mocy). Nie sądzę, że nawet 8051 jest tak wolny jak PIC, czy możesz pojąć liczbę utraconych zegarów, aby zrobić coś pożytecznego? Używając asm, ludzie używają C i oglądanie staje się nie do zniesienia. Msp430, prawdopodobnie chcesz go do aplikacji, w których go wyłączasz, budzi się raz w niebieskim księżycu robi kilka rzeczy, a następnie idzie spać, jak pilot telewizora lub coś takiego.
old_timer

Odpowiedzi:

9

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.

tallganglyguy
źródło
1
Odwołaj się do pierwszego akapitu: jeśli liczby ARM dotyczą rdzenia, to powinny być wyższe niż liczby NXP, które obejmują moc urządzeń peryferyjnych. Ale są niższe. Nie umiem tego też wyjaśnić.
stevenvh
1
Powinieneś również porównać sterowniki przy równych napięciach. Jeśli korzystasz z LPC1111 przy napięciu 3 V, podobnie jak MSP430, jego pobór mocy jest bardzo bliski. Nieźle jak na NXP ARM; MSP430 jest znany z niskiej mocy.
stevenvh
1
jednym wielkim problemem, jaki miałem z urządzeniami kory ARM w porównaniu do MSP430, jest to, że urządzenia ARM mogą spalić wiele cykli procesora, wracając do stanu pracy z trybu niskiego poboru mocy. Dane RAM są tracone i muszą zostać ponownie utworzone / zainicjowane (oprócz SRAM zasilanego bateryjnie), należy ponownie uruchomić system PLL i zegar. MSP właśnie wznawia pracę od następnej instrukcji z nienaruszoną pamięcią RAM od momentu przejścia w tryb uśpienia. Jeśli proces wymaga częstych przejść między trybem aktywnym a trybem uśpienia, ARM straci.
u
3

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.

użytkownik19790
źródło