Rdzeń Cortex-M0+ – więcej niż konkurent dla 8-/16- i niektórych 32-bitowców

 

 

 

 

Mikrokontrolery z rdzeniem Cortex-M0+ tworzą dla konstruktorów urządzeń mikroprocesorowych nową rzeczywistość: zapewniają wysoką wydajność, niski koszt implementacji, względną zgodność z „dużymi” rdzeniami z rodziny Cortex i przy tym wszystkim – niewielki pobór mocy. Nie ma więc powodu, dla którego mikrokontrolery 8-bitowe miałyby pozostać w naszych szufladach…

Zacznę od łyżki dziegciu: powstanie rdzenia Cortex-M0+ – w mojej ocenie – nie świadczy dobrze o firmie ARM, bo powstał on jako opatrunek na rany zadane producentom przez tani ale nie wystarczająco, szybki ale nie zawsze pokonujący wydajnością „mniejszą” konkurencję, energooszczędny głównie w testach firmy ARM, kompatybilny głównie ze sobą – rdzeń Cortex-M0. A – oficjalnie – podstawowym celem firmy ARM podczas opracowywania rdzenia Cortex-M0 było przygotowanie maksymalnie taniej w implementacji wersji 32-bitowego rdzenia w znacznym stopniu zgodnego z większym „rodzeństwem” – Cortex-M3 i Cortex-M4/M4F. Podstawowym uproszczeniem w stosunku do rdzenia M3 było zredukowanie listy instrukcji asemblera do 56 rozkazów, które są podstawowym podzbiorem obsługiwanym przez wszystkie rdzenie Cortex-M (rysunek 1), zrezygnowano także z modułu MPU, uproszczono blok sprzętowego debugowania, zmodyfikowano interfejs łączący pamięci z CPU, zmniejszono liczbę przerwań obsługiwanych przez kontroler NVIC, uproszczeniom i redukcjom poddano także wiele innych fragmentów rdzenia. Pomimo tej „rzezi” wielu producentów uznało, że produkcja mikrokontrolerów z rdzeniem Cortex-M0 ma sens, czego przykłady możemy od kilkunastu miesięcy obserwować na rynku.

 

Rys. 1. Listy rozkazów obsługiwanych przez różne rdzenie Cortex-M

Rys. 1. Listy rozkazów obsługiwanych przez różne rdzenie Cortex-M

 

 

Zabiegi te – według danych producenta – zaowocowały dwukrotnym (w stosunku do Cortex-M3) zmniejszeniem dynamicznego poboru mocy przez Cortex-M0 (16 µW/MHz vs 32 µW/MHz w technologii referencyjnej 90LP) oraz trzykrotnym zmniejszeniem powierzchni zajmowanej przez ten rdzeń (0,04 mm2 vs 0,12 mm2) – co ułatwia jego tanią implementację. Obniżenie poboru mocy i zmniejszenie zajmowanej powierzchni odbiły się na wypadkowej wydajności rdzenia Cortex-M0, który zamiast prędkości wykonywania programu 1,25 DMIPS/MHz (Cortex-M3) uzyskiwał w testach zaledwie 0,84 DMPIS/MHz. Tak znaczne obniżenie prędkości wykonywania programów i krótka lista instrukcji (co czasami wymagało wykonywania dłuższych sekwencji programowych zamiast jednego polecenia) redukowały zalety wynikające z mniejszego nominalnego poboru mocy na jednostkę częstotliwości taktowania – bo jednym z decydujących parametrów wpływającym na pobór mocy jest liczba dostępów do pamięci Flash w jednostce czasu. Problemy zgłaszane przez użytkowników i producentów mikrokontrolerów wyposażonych w rdzenie Cortex-M0 – po dość długim czasie – zostały dostrzeżone także przez firmę ARM, co zaowocowało wprowadzeniem do oferty zmodyfikowanej wersji rdzenia, nazwanej Cortex-M0+. Porównanie schematów blokowych obydwu rdzeni przedstawiono na rysunku 2.

 

Rys. 2. Schematy blokowe rdzeni Cortex-M0 (z lewej) i Cortex-M0+ (z prawej)

Rys. 2. Schematy blokowe rdzeni Cortex-M0 (z lewej) i Cortex-M0+ (z prawej)

 

 

O autorze