Benchmark – cała prawda o ULPBench
Trzech zawodników pochodzi od firmy Texas Instruments, przy czym problemy sprawia model MSP432 z rdzeniem ARM Cortex-M4. W przypadku pracy z zasilaczem DC/DC może uzyskać względnie wysokie wyniki ULPBench, jednak napięcie zasilania 2,2 V stanowi dolną granicę, której układ nie może przekroczyć. Aby układ mógł pracować z napięciami do 1,8 V, należy wykorzystać stabilizator liniowy, co wiąże się ze spadkiem wyniku ULPBench o prawie 25% – jest to wynik znacznie gorszy od innych mikrokontrolerów z rdzeniem Cortex-M4.
Do 8-bitowych układów należy model MSP430 w wersji z pamięcią FRAM lub konwencjonalną Flash. O ile wersja FRAM radzi sobie nieco lepiej od MSP432 przy wykorzystaniu zasilacza LDO, model MSP430 z pamięcią Flash przegrywa tą rywalizację. Wyniki z zakresu od 32 (3,0 V) do 57,2 (minimalne uzyskane napięcie 2,0 V) to pięciokrotnie mniej, niż na przykład uzyskał układ STM32F433.
Wyprzedzając mniej lub bardziej konwencjonalne układy, na czele stawki znalazł się mikrokontroler Ambiq Micro Apollo pracujący z zakresie podprogowym – tzn. przełączanie jego tranzystorów zachodzi poniżej faktycznego napięcia progowego. Ta technologia została opanowana w warunkach laboratoryjnych kilka dekad temu, natomiast dotąd nie udało się jej zaimplementować w układach produkowanych masowo W jaki sposób start-up zdołał ominąć ograniczenia wynikające z procesu produkcyjnego i naturalnych wahań napięcia progowego, pozostaje tajemnicą. Widoczne są natomiast rezultaty: wyniki ULPBench wynoszą 329,9 punktu dla napięcia 3,0 V i 472,42 dla 2,1 V. Poniżej tego zakresu układ się resetuje.
Wykres 4. przedstawia wyniki z tabeli 1 w bardziej czytelnej formie. Warto zwrócić uwagę na wartość 2,3 V – poniżej tego poziomu napięcia zasilania tylko niektóre układy są w stanie pracować.
Uważny czytelnik może zadać pytanie, dlaczego nie wykorzystaliśmy modelu RL78 firmy Renesas. Przyczyna jest prosta: pomimo wielu prób nie udało nam się uruchomić na nim kodu ULPBench.
Temperatura
Drugim problemem narzędzia ULPBench jest założenie najlepszej możliwej temperatury otoczenia równej 25°C, dla której producenci podają parametry produktów, a EEMBC je certyfikuje. Jednak na przykład inteligentny miernik generuje temperaturę od 50 do 60°C, a niektóre systemy przemysłowe nawet 80 lub 85°C. Zatem wartości podawane przez ULPBench należy przyjmować z pewnym dystansem.
W komorze klimatycznej STMicroelectronics sprawdziliśmy, jak wyniki ULPBench zmieniają się wraz ze wzrostem temperatury. Czas, w którym mieliśmy do dyspozycji komorę klimatyczną, był ograniczony, zatem nie mogliśmy przetestować wszystkich mikrokontrolerów. Skupiliśmy się na dwóch mikrokontrolerach firm ST i Atmel, układzie MSP432 Texas Instruments oraz układzie Apollo pracującym w zakresie podprogowym Ambiq Micro.
Już przed rozpoczęciem testów było oczywiste, że sprawność energetyczna spadnie wraz ze wzrostem temperatury – pytanie brzmiało, jak bardzo. To zjawisko wynika głównie z procesu produkcji. Wykres 5. przedstawia zależność wyników ULPBench od temperatury w zakresie 25 – 85°C przy napięciu zasilania 3 V. Warto zwrócić uwagę na stabilność temperaturową modelu STM32L0 z rdzeniem ARM Cortex-M0+ wykonanego w autorskim procesie technologicznym 110 nm. Choć układ STM320L0 wypada słabiej od konkurentów wykonanych w rozmiarze technologicznym 90 lub 65 nm z powodu wyższego poboru mocy w trybie pracy aktywnej (pozycja 4. przy 25°C), pozostałe modele na wyższych temperaturach wykazują rosnące wykładniczo prądy upływu. Po przekroczeniu temperatury otoczenia 70°C układ STM320L0 je wyprzedza.
Warto też zwrócić uwagę na zachowanie dwóch mikrokontrolerów Atmel. Ich wykres wyników ULPBench spada znacznie w stosunku do modeli ST oraz TI przy niewielkim wzroście temperatury, natomiast w wyższej temperaturze jego wyniki są bardziej stabilne. Z kolei modele MSP432 oraz STM32L4 pozostają względnie stabilne do poziomu 50°C, a przy wyższych wartościach temperatury zaliczają wyraźny spadek.
Na wykresie 6. skala została spłaszczona, by pomieścić modeli Apollo od Ambiq Micro dominujący nad rywalami. Jego spadek wyników ULPBench przy temperaturze 85°C jest dramatyczny – jego przewaga zmalała z niemal 200 punktów w stosunku do modelu STM32L0 w temperaturze 25°C do niewiele ponad 30 punktów. Jeszcze bardziej niepokojące jest spostrzeżenie, że firma Ambiq Micro gwarantuje pracę jedynie w zakresie od -10 do +60°C (errata na rys. 7). Podejrzewamy, że proces produkcji pozwalający na pracę w zakresie podprogowym powodował zbyt dużą rozbieżność parametrów termicznych, zatem nie gwarantuje stabilnego przełączania tranzystorów w wysokiej temperaturze. Dopiero w wersji 4 układu udało się uzyskać zakres temperatury od -40 do +85°C podany w karcie katalogowej. Jednak wiązały się z tym problemy wymienione dalej i niższe wyniki ULPBench od tych zmierzonych w wersji 3.
Następnie pomiary zostały powtórzone przy napięciu zasilania zmniejszonym do minimum. Dla większości układów oznacza to 1,8 V, poza mikrokontrolerem Apollo, który potrzebuje napięcia przynajmniej 2,1 V. Wykres 8. przedstawia wyniki. Wraz ze wzrostem temperatury maleje przewaga Ambiq Micro. Nawet jeśli mieliśmy szczęście i mierzony układ w wersji 3. pracuje bez problemu do temperatury 85°C, należy pamiętać, że Ambiq Micro gwarantuje pracę tylko do wartości 60°C.
Zmiany na gorsze w wersji 4. Ambiq Micro Apollo
W wersji 4. układu Ambiq Micro specyfikacja podaje dopuszczalny zakres temperatury od -40°C do +85°C. Jednak nastąpiły inne zmiany, niekoniecznie na korzyść użytkownika. Zapewne zastosowany został inny proces produkcji, aby zapewnić pracę w szerszym zakresie temperatury. Pobór prądu wzrósł, zwłaszcza w trybie uśpienia, również w trybie aktywnym osiągnął wartość 35µA/MHz zamiast 34 µA/MHz w wersji 3. W trybie głębokiego uśpienia z wyłączonym zegarem czasu rzeczywistego i bez utrzymania stanu 8 KB pamięci RAM podany pobór prądu wynosi 143 nA zarówno w wersji 3, jak i 4. Jednak ta wartość z pracującym zegarem RTC wzrosła ze 198 nA do 419 nA. Zatem sam zegar pobiera prąd 55 nA w wersji 3. lub 276 nA w wersji 4. Natomiast uruchomienie zegara i utrzymanie stanu pamięci RAM (dodatkowe 193 nA) oznacza pobór prądu 386 nA w wersji 3. lub 469 nA w wersji 4 w trybie głębokiego uśpienia.
Ponadto w wersji 4 niektóre wyprowadzenia mikrokontrolera – a dokładniej, przetwornicy obniżającej napięcie – muszą zostać podłączone w inny sposób (rys. 9). Pojemność C3 została zwiększona z 1 µF do 2 µF, zdaniem Ambiq Micro – aby zredukować tętnienia napięcia. Przetwornica ta służy do zasilenia rdzenia, pamięci Flash, SRAM oraz analogowych i cyfrowych układów peryferyjnych. Większa pojemność oznacza zatem wyższe oczekiwane prądy szczytowe. Co więcej, w wersji 4. przejście z trybu głębokiego uśpienia do trybu aktywnego trwa 43 µs zamiast 20 µs, zatem w najgorszym ponad dwukrotnie dłużej.
Te trzy wymienione wady sprawiły, że sprawność energetyczna układu została obniżona. Nie mogliśmy tego sprawdzić, nie mając do dyspozycji układu w wersji 4. Mimo to możemy oczekiwać, że w pewnych zakresach pracy (napięcie zasilania nie mniejsze, niż 2,1 V i względnie niskie temperatury) układ powinien utrzymać najwyższy wynik w ULPBench.
Silicon Labs – karta katalogowa a rzeczywistość
Zaskoczeni niskimi wynikami mikrokontrolerów Gecko firmy Silicon Labs, przyjrzeliśmy się im dokładniej. Pierwsze wskazówki pojawiły się już w oficjalnej dokumentacji. Dla układu Giant Gecko w trybie niskiego poboru mocy EM1 przy zasilaniu 3,0 V i częstotliwości zegara 14 MHz pobór prądu wzrósł między wersjami 1.10 a 1.30 o 48% – z 56 do 83 µA/MHz. W trybie EM2 pobór prądu w temperaturze 85°C wzrósł o całe 50% z 4,0 do 6,0 µA, zachowując podane wartości dla utrzymania stanu pamięci RAM i stanu CPU z wersji 1.10. Jednak w wersji 1.30 aktywny jest tylko jeden blok RAM – zatem w warunkach podanych dla wersji 1.10 (pamięć RAM w pełni aktywna) trzeba się liczyć z jeszcze większym poborem prądu.
Warto zwrócić uwagę na odstępstwa rzeczywistych wartości od wartości podanych w specyfikacji (tabela 2). Różnica 935% jest niebywała i zupełnie nieusprawiedliwiona. Projektanci opierają się przecież na tych danych katalogowych, szukając mikrokontrolera, który byłby odpowiedni dla ich systemu.
Konkurencja pokazuje, że możliwe jest inne podejście – na przykład w przypadku układu MSP432 firmy Texas Instruments. Dla zegara 24 MHz i napięcia zasilania 3,0 V z aktywnym zasilaczem DC/DC podany jest pobór prądu 2200 µA, natomiast my zmierzyliśmy 2210 µA – różnica w stosunku do danych katalogowych jest mniejsza, niż 0,5%.
Wracając do Silicon Labs: wersja B modelu Pearl Gecko w rzeczywistości znacząco różni się od tego, co podaje specyfikacja. Przynajmniej te różnice są opisane w erracie: w trybie EM2 z 32 KB SRAM, napięciem 3,3 V oraz zasilaczem DC/DC układ pobiera prąd 2,48 µA zamiast 1,4 µA, natomiast w trybie EM3 przy napięciu 3,3 V nie mniej, niż 2,1 µA zamiast deklarowanych 1,1 µA.
Choć firma Silicon Labs podaje parametry drastycznie różniące się od rzeczywistych, nie jest jedyna. Jak zostało wspomniane wcześniej, wersja B układu Atmel SAM21 nie osiąga tych samych wyników w ULPBench, jak wersja A. Również w tym wypadku karta katalogowa zawiera wyjaśnienie: w trybie oczekiwania pobór prądu w zakresie temperatury 25 – 85°C z wyłączonym zegarem czasu rzeczywistego rośnie od poziomu 0,9 / 10,5 do 1,2 / 20,7 µA, natomiast z włączonym zegarem – od 0,94 / 11 do 1,4 / 20,8 µA.
Tabela 2. Różnice między kartą katalogową a wynikami faktycznych pomiarów mikrokontrolera Giant Gecko EFM32 firmy Silicon Labs
Co jeszcze rzuca się w oczy
Pamięci Cache są popularnym tematem analiz. Przykładowo, Atmel wykonuje pomiary, gdy rejestr READMODE kontrolera pamięci NVM jest ustawiony na '1′, tzn. gdy pamięć Cache pracuje w trybie obniżonego poboru mocy. W takiej sytuacji po każdym nietrafionym odwołaniu do pamięci Cache następuje oczekiwanie procesora (wait state), przez co wynik ULPBench spada przy częstotliwościach zegara ponad 12 MHz. Układ MSP432 wcale nie ma pamięci Cache, z tego powodu wyniki w benchmarku spadają (ale nie poniżej częstotliwości 24 MHz), a układ ATM32L4 pracuje bez problemów do wartości 80 MHz dzięki technologii ART.
ART (adaptive realtime) to rozwiązanie znane z modeli F2, które teoretycznie umożliwia pracę do częstotliwości 168 MHz bez stanów oczekiwania podczas oczekiwania na przetworzenie kodu z pamięci Flash. W praktyce ART działa tylko, jeśli pamięć Cache nie jest ciągle zapełniana zawartością Flash z powodu licznych skoków w kodzie. W takim wypadku wszystkie deklaracje na temat jej działania pozostają czysta teorią. Jednak w małych benchmarkach, takich jak CoreMark czy ULPBench z sekwencyjnie wykonywanym kodem, ART może zaprezentować swoje zalety.
Inne wątpliwości nasuwa fakt, że układ MSP432 firmy Texas Instruments, wykorzystujący własne rozwiązania IP i proces produkcji zoptymalizowany pod kątem poboru mocy, nie wygrał tej rywalizacji. Jedną z przyczyn mogły być stosunkowo wysokie prądy maksymalne wynoszące 6,8 mA (zasilacz DC/DC) lub 6,56 mA (zasilacz LDO). Na tym polu konkurencyjne układy są zdecydowanie lepsze – dla modelu Atmel SAM21 wynik ten jest poniżej 2 mA, dla STM32L47x 3,2 mA, a dla Ambiq Micro Apollo 4,7 mA. Dodatkowo przełączenie z zasilania LDO na DC/DC jest stosunkowo długie i trwa 10 µs.
W razie wątpliwości – zmierz sam
Dla inżyniera poszukującego mikrokontrolera o wysokiej wydajności energetycznej karty katalogowe są pomocne tylko w ograniczonym stopniu. Określają one jedynie pobór prądu w kilku typowych stanach wybranych przez producenta, które mogą być zarówno bliskie, jak i odległe od rzeczywistych warunków. Przykładowo, aby zaprojektować inteligentny miernik, który będzie pracował przy niskim napięciu zasilania w temperaturze 50 – 60°C, konieczne będzie wykonanie własnych pomiarów.
Materiały reklamowe obiecują „najbardziej energooszczędne mikrokontrolery na świecie”, „najbardziej energooszczędne mikrokontrolery na rynku” lub też „mikrokontrolery o najniższym poborze prądu” – natomiast po porównaniu okazuje się, że są co najwyżej średnie.