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.

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.

O autorze