Migracja z Cortex-M3 do Cortex-M4
Połączenie wysokiej wydajności przetwarzania sygnałów z niskim poborem mocy, niską ceną i łatwością użycia sprawia, że mikrokontrolery oparte na rdzeniach ARM Cortex-M znajdują zastosowanie w szerokiej gamie aplikacji, między innymi w systemach sterowania silnikiem, elektronicznych podzespołach motoryzacyjnych, w systemach zarządzania energią, przetwarzania dźwięku, automatyce i wielu innych dziedzinach.
ARM Cortex-M4 to jeden z najnowszych rdzeni mikroprocesorowych firmy ARM. Rdzeń ten rozszerza zastosowanie rdzeni Cortex-M na aplikacje, które wymagają większej mocy obliczeniowej, niż ta obecnie osiągana przez Cortex-M3. Większa wydajność i funkcjonalność jest efektem zintegrowania w rdzeniu nowych modułów: jednostki obliczeniowej MAC (Multiply and Accumulate) do wykonywania operacji mnożenia i sumowania w jednym cyklu pracy oraz jednostki obliczeniowej FPU (Floating-Point Unit) do wykonywania operacji na liczbach zmiennoprzecinkowych pojedynczej precyzji. Rdzeń Cortex-M4 ma ponadto możliwość wykonywania instrukcji SIMD (Single Instruction, Multiple Data) – zoptymalizowanych operacji na wielu danych. A zatem, rdzeń Cortex-M4 to Cortex-M3 z dodatkową funkcjonalnością cyfrowego przetwarzania sygnałów DSP (Digital Signal Processing), dzięki czemu proces migracji z Cortex-M3 do Cortex-M4 jest bardzo łatwy.
Dlaczego zmiana na Cortex-M4?
Wyższa wydajność
Cortex-M4, podobnie jak Cortex-M3, zapewnia wydajność operacji na liczbach całkowitych na poziomie 1.25 MIPS (milionów instrukcji na sekundę)/MHz w testach na platformie Dhrystone w wersji 2.1, ale Cortex-M4 zapewnia lepszą wydajność cyfrowego przetwarzania sygnałów (DSP). Więcej informacji na ten temat można znaleźć w rozdziale Funkcjonalności Cortex-M4.
Możliwości cyfrowego przetwarzania sygnałów
W rdzeniu Cortex-M4 zintegrowano jednostkę obliczeniową MAC, wykonującą w jednym cyklu pracy operacje mnożenia i sumowania jednocześnie na liczbach 16 i 32-bitowych, a zestaw instrukcji SIMD umożliwia wykonywanie w jednym cyklu pracy operacji na dwóch liczbach 16-bitowych i czterech liczbach 8-bitowych. Jednostka obliczeniowa FPU rdzenia Cortex-M4 jest implementacją wariantu pojedynczej precyzji układu rozszerzenia zmiennoprzecinkowego Floating-Point Extension (FPv4-SP) architektury ARMv7-M. Zapewnia ona obliczenia na liczbach zmiennoprzecinkowych, spełniając normy ANSI/IEEE STD 754-2008, oraz normy IEEE dotyczące obliczeń na liczbach zmiennoprzecinkowych (Standard for Binary Arithmetic Floating-Point), nazywane IEEE 754. FPU obsługuje wszystkie instrukcje przetwarzania danych i operacji na liczbach pojedynczej precyzji oraz typy danych opisane w podręczniku ARM Architecture Reference Manual.
Cortex-M4 spełnia wymagania stawiane produktom nowej generacji
Zastosowanie rodziny ARM Cortex-M koncentruje się na obszarach takich jak elektronika konsumpcyjna, niskokosztowe, przemysłowe systemy sterowania (w tym sterowanie silnikiem), zarządzanie energią, elektronika samochodowa oraz przetwarzanie dźwięku. Rosnące obciążenia obliczeniowe w tych dziedzinach zajmują zbyt wiele zasobów rdzenia, jeśli wszystkie zadania cyfrowego przetwarzania sygnałów są obsługiwane przez oprogramowanie. ARM Cortex-M4 rozwiązuje ten problem poprzez zastosowanie wbudowanej jednostki obliczeniowej MAC do wykonywania operacji mnożenia i sumowania w jednym cyklu pracy, zestawu instrukcji SIMD zoptymalizowanych operacji na wielu danych, a także opcjonalnie jednostki FPU.
Tak jak już zostało to napisane, rdzeń Cortex-M4 to Cortex-M3 z dodatkowymi możliwościami cyfrowego przetwarzania sygnałów. Oznacza to, że oprogramowanie z Cortex-M3 może również funkcjonować z rdzeniem Cortex-M4, zatem łatwe jest przeprowadzenie migracji z rdzenia Cortex-M3 do Cortex-M4. Na rysunku 1 zilustrowano zależności pomiędzy tymi dwoma rdzeniami.
Rys. 1.
Funkcjonalności Cortex-M4
32-bitowa jednostka obliczeniowa MAC do wykonywania operacji mnożenia i sumowania
Wbudowana w rdzeniu Cortex-M4, 32-bitowa jednostka obliczeniowa MAC w jednym cyklu pracy może wykonać jedną operację mnożenia dwóch liczb 32-bitowych i następnie sumowania wyniku z liczbą 64-bitową, dając w rezultacie liczbę 64-bitową: 32×32+64->64, lub dwie operacje mnożenia dwóch liczb 16-bitowych: 16×16. Ta jednostka obliczeniowa o dużej wydajności sprawia, że cyfrowe przetwarzanie sygnałów jest bardziej efektywne i znacznie zmniejsza zużycie zasobów rdzenia. Podsumowując, 32-bitowa jednostka obliczeniowa MAC ma trzy główne funkcjonalności:
- udostępnia szeroki zakres instrukcji wykonywania operacji mnożenia i sumowania,
- wykonuje operacje mnożenia liczb 16- lub 32-bitowych oraz sumowanie liczb 32- lub 64-bitowych,
- wykonuje wszystkie instrukcje w jednym cyklu pracy.
Instrukcje SIMD do wykonywania operacji na wielu danych
Rdzeń Cortex-M4 posiada zestaw instrukcji SIMD do wykonywania zoptymalizowanych operacji na wielu danych w jednym cyklu pracy. Zestaw instrukcji SIMD zawiera szereg instrukcji DSP, do wykonywania takich operacji jak dodawanie, odejmowanie, mnożenie, mnożenie i sumowanie, które są wykorzystywane do implementacji powszechnie stosowanych operacji cyfrowego przetwarzania sygnałów, w tym filtrowania sygnałów cyfrowych za pomocą filtrów o nieskończonej odpowiedzi impulsowej FIR (Finite Impulse Response) lub o nieskończonej odpowiedzi impulsowej IIR (Infinite Impulse Response), obliczania szybkiej transformaty Fouriera FFT (Fast Fourier Transform) na liczbach zespolonych, obliczania algorytmów proporcjonalno-całkująco-różniczkujących PID (Proportional–Integral–Derivative), oraz sumowania, odejmowania i mnożenia macierzy. Dzięki tym instrukcjom rdzeń Cortex-M4 oferuje większą moc obliczeniową do wykonywania programów DSP, niż rdzeń Cortex-M3. Podsumowując, SIMD ma trzy główne funkcjonalności:
- wykonuje cztery operacje (4 równoległe) dodawania lub odejmowania liczb 8-bitowych,
- wykonuje dwie operacje (2 równoległe) dodawania lub odejmowania liczb 16-bitowych,
- jest wykonywana w jednym cyklu pracy.