CPU, MPU, MCU
Szybki rozwój branży półprzewodnikowej i mikrokontrolerów spowodował, że terminologia w tym zakresie często jest dosyć nieprecyzyjna. Dlatego na początek wyjaśnimy kluczowe pojęcia.
Procesor jest definiowany jako układ cyfrowy, który pobiera dane z pamięci lub innego źródła, interpretuje je jako rozkazy – określone działania do zrealizowania, wykonuje je i zwraca wyniki do pamięci lub strumienia danych (rysunek 1).
Termin ten jest zwykle używany do określenia jednostki centralnej systemu – CPU (Central Processing Unit), ale odnosi się również do innych układów przetwarzających dane, takich jak:
- koprocesory arytmetyczne – układy wyspecjalizowane do obliczeń na liczbach, również zmiennoprzecinkowych (wtedy określane są jako FPU, czyli Floating-Point Unit);
- układy przetwarzania grafiki – GPU (Graphics Processing Unit), przeznaczone do wykonywania operacji potrzebnych do uzyskania grafiki 3D i obsługujące szereg rozkazów, którymi nie dysponuje standardowy procesor;
- procesory sygnałowe – DSP (Digital Signal Processor), czyli wyspecjalizowane procesory do cyfrowej obróbki sygnałów. Ich budowa pozwala na wydajne wykonywanie prostych i zaawansowanych operacji występujących przy przetwarzaniu sygnałów, np. filtracji FIR i IIR czy też transformacji Fouriera.
Pierwsze procesory były konstruowane z wielu układów scalonych małej skali integracji, jednak takie rozwiązanie miało sporo wad i ograniczeń. Poprzez zintegrowanie procesora w jednym układzie scalonym o wyższej skali integracji udało się znacząco zwiększyć szybkość działania i możliwości takiego układu, a dodatkowo zmniejszył się koszt jego produkcji. Nowy komponent integrujący wszystkie wymagane bloki w jednym obwodzie został nazwany mikroprocesorem – μP lub MPU (Microprocessing Unit). Pierwszym dostępnym komercyjnie mikroprocesorem był Intel 4004 (fotografia 1) opracowany w 1971 r. – pierwotnie przeznaczony do pracy wewnątrz kalkulatorów biurowych.
Wybrane parametry tego układu:
- maksymalna częstotliwość taktowania – 740 kHz,
- osobna pamięć programu i danych – architektura harwardzka,
- 46 instrukcji,
- 16 czterobitowych rejestrów,
- 2300 tranzystorów (technologia produkcji 10 μm).
Od tamtej pory mikroprocesory stały się najbardziej rozpowszechnioną formą CPU. Obecnie każdy nowoczesny procesor jest w istocie mikroprocesorem, ale oba terminy pozostają w użyciu, ponieważ pozwalają rozróżnić komponenty o innym zakresie funkcjonalności. Procesor, jako komponent elektroniczny, pozostaje charakterystycznym elementem typowego komputera i jest przeznaczony do szerokiego zakresu zadań. Natomiast mikroprocesor będzie zoptymalizowany do konkretnego zastosowania. Może mieć mniejszą częstotliwość taktowania, ale mimo to będzie lepiej radził sobie z zadaniem, do którego został opracowany niż porównywalny, uniwersalny procesor – jeśli nie pod względem wydajności, to w kontekście zapotrzebowania na energię. Ponadto mikroprocesor będzie komponentem o mniejszych wymiarach i (zazwyczaj) znacznie tańszym.
Kolejną grupą komponentów są mikrokontrolery – μC lub MCU. Mikroprocesor to tylko jednostka przetwarzająca dane, która – choć dość wydajna pod względem obliczeniowym – wymaga jednak dodatkowych układów sprzętowych do działania, takich jak pamięć operacyjna, magistrala systemowa itd. Mikrokontroler zawiera nie tylko jednostkę przetwarzania danych, ale także pamięci ROM i RAM, uniwersalne porty I/O, układy taktujące i czasowe (timery) i wiele innych bloków peryferyjnych (rysunek 2). Łączy wszystkie niezbędne elementy systemu mikrokomputerowego w jednym elemencie sprzętowym i praktycznie nie wymaga prawie żadnych dodatkowych komponentów ani złożonych systemów operacyjnych.
Ekonomiczne, małe i energooszczędne mikrokontrolery sprawdzają się w wielu nowoczesnych dziedzinach elektroniki, od nieskomplikowanych kontrolerów sprzętu AGD, przez szeroki wachlarz rozwiązań z grupy IoT, po zaawansowaną elektronikę motoryzacyjną, medyczną i kosmiczną. Jednym z pierwszych mikrokontrolerów, który w pojedynczym układzie scalonym zawierał procesor, pamięci RAM i ROM, układy wejścia/wyjścia oraz zegar taktujący, był TMS 1000 od Texas Instruments (fotografia 2).
Był produkowany od 1971 r. i instalowany w kalkulatorach SR-16 z 1974 r., a wersja TMS1100 znalazła zastosowanie w konsolach do gier Microvision. Wybrane parametry mikrokontrolera TMS1000:
- 4-bitowa architektura harwardzka,
- zegar: 300 kHz,
- wszystkie rozkazy sprzętowe są wykonywane w 6 cyklach zegara,
- przestrzeń adresowa równa 1024,
- brak przerwań,
- zasilanie: 15 V.
Wiemy już, jaka jest podstawowa różnica pomiędzy mikrokontrolerem a mikroprocesorem, jednak zajrzymy jeszcze w głąb samego procesora i wskażemy koleją różnicę w budowie tych komponentów (rysunek 3). Każda jednostka przetwarzania danych – procesor – zawiera następujące bloki funkcjonalne.
- Jednostka arytmetyczno-logiczna ALU (Arithmetic Logic Unit), która wykonuje operacje logiczne na dostarczonych danych. Minimalny zestaw to: dodawanie, podstawowe operacje logiczne – AND, XOR, OR, NOT oraz przesunięcia bitowe w lewo i w prawo. W bardziej złożonych mikroprocesorach zestaw ten jest znacznie bogatszy.
- Układ sterowania CU (Control Unit), nazywany też dekoderem rozkazów, odpowiedzialny za dekodowanie dostarczonych instrukcji i odpowiednie sterowanie pozostałymi blokami mikroprocesora.
- Rejestry – umieszczone wewnątrz mikroprocesora komórki pamięci o niewielkich rozmiarach (najczęściej 8/16/32/64/128 bitów), służące do przechowywania tymczasowych wyników obliczeń (rejestry danych) oraz adresów komórek pamięci operacyjnej (rejestry adresowe). Proste mikroprocesory mają tylko jeden rejestr danych zwany akumulatorem (ACC).
- Rejestry specjalnego przeznaczenia – oprócz rejestrów danych oraz adresowych występuje też pewna liczba rejestrów specjalnych:
- PC – licznik rozkazów (Program Counter), który przechowuje adres komórki pamięci zawierającej następny rozkaz do wykonania;
- IR – rejestr instrukcji (Instruction Register), który przechowuje kod aktualnie wykonywanej przez procesor instrukcji;
- SP – wskaźnik stosu (Stack Pointer) – adres wierzchołka stosu.
- Pamięć podręczna (Cache) – mikroprocesory korzystają z tzw. pamięci podręcznej, czyli szybkiej pamięci znajdującej się blisko procesora w celu przechowywania często używanych danych i przyspieszenia działania.
- Rdzenie procesora (Core) – poszczególne jednostki przetwarzania w mikroprocesorach są znane jako rdzenie. Nowoczesne procesory często zawierają wiele rdzeni, co umożliwia przetwarzanie równoległe poprzez wykonywanie wielu zadań jednocześnie.
- Szyna danych (Data Bus) i szyna adresowa (Address Bus), które umożliwiają komunikację z pozostałymi elementami systemu.
Pierwsze mikroprocesory bazowały na architekturze von Neumanna (rysunek 4a), która używa tej samej magistrali danych i adresowej do przesyłania zarówno instrukcji kodu programu, jak i danych. Takie układy nie mogą wykonywać tych czynności jednocześnie, jednak nowoczesne komponenty zawierają wiele usprawnień kompensujących to utrudnienie.
Mikrokontrolery bazują na bardziej złożonej architekturze typu Harvard (rysunek 4b), mającej oddzielne zestawy magistral danych i adresowych do odczytu i zapisu danych w pamięci oraz do pobierania instrukcji kodu programu. Procesor może jednocześnie odczytać instrukcje i uzyskać dostęp do pamięci danych, dzięki czemu wykonuje podstawowe operacje szybciej.
Architektura typu Harvard jest bardziej skomplikowana, ale sprawdza się w zastosowaniach wymagających dużej szybkości działania i pracy w czasie rzeczywistym. Z drugiej strony ujednolicona przestrzeń pamięci danych i instrukcji w prostszej architekturze von Neumanna zapewnia lepszą niezawodność oraz skalowalność i jest preferowana w przypadku bardziej wymagających zadań. Nowoczesne procesory komputerowe, takie jak Intel ix oraz Ryzen x, bazują na architekturze von Neumanna, choć niektóre wewnętrzne elementy procesora – jak pamięć cache – mają rozdzielone szyny pamięci danych i instrukcji.
Architektura procesora
Najważniejsze cechy budowy procesora noszą nazwę architektury. Na architekturę procesora składają się:
- model programowy procesora ISA (Instruction Set Architecture), czyli zestaw instrukcji oraz jego różne właściwości określające dostępne mechanizmy programowania. ISA stanowi granicę pomiędzy warstwą sprzętową i programową, dlatego nie określa cech konstrukcji i sposobu realizacji funkcjonalności;
- mikroarchitektura procesora (Microarchitecture), czyli sprzętowa implementacja danego modelu programowego, określająca szczegółową budowę wewnętrzną procesora.
Model programowy procesora określają m.in.: lista rozkazów procesora, typy danych, dostępne tryby adresowania, zestaw rejestrów dostępnych dla programisty, zasady obsługi wyjątków i przerwań itp. Procesory, które mają ten sam model programowy, są ze sobą kompatybilne – oznacza to, że mogą wykonywać te same programy i generować identyczne rezultaty. W początkowej historii procesorów model programowy procesora zależał od fizycznej implementacji i niejednokrotnie całkowicie z niej wynikał. Obecnie tendencja jest odwrotna i stosuje się bardzo różne implementacje fizyczne (mikroarchitektury), pochodzące od różnych producentów, natomiast realizujące ten sam model ISA.
Model ISA stosowany w rdzeniach ARM jest zamkniętą i zastrzeżoną technologią ARM Holdings. Oferuje szeroką kompatybilność i doskonałą niezawodność, ale ma ograniczone możliwości dostosowywania. Otwarty model ISA RISC-V oferuje znacznie większą elastyczność i może być swobodnie używany w dowolnym celu. Chociaż nie jest to pierwszy otwarty model programowy, to ma ogromny potencjał, ponieważ został zaprojektowany z myślą o niewielkich, szybkich i energooszczędnych systemach i nie ogranicza się do konkretnego stylu mikroarchitektury procesora. Zarówno RISC-V, jak i ARM podlegają architekturze instrukcji RISC, co oznacza, że bazują na niewielkim zestawie prostych instrukcji wykonywanych zwykle w pojedynczym cyklu pracy rdzenia procesora.
RISC i CISC to kluczowe typy architektury procesorów opracowane w celu zwiększenia wydajności (rysunek 5).
Wydajność procesora można zoptymalizować na dwa sposoby:
- poprzez zmniejszenie liczby instrukcji w programie przy zachowaniu jego funkcjonalności,
- poprzez zmniejszenie liczby cykli maszynowych przypadających na każdą instrukcję.
Osiągnięcie celu przy użyciu obu tych zabiegów jednocześnie jest niemożliwe – poprawienie jednego parametru powoduje pogorszenie drugiego. Podstawowym celem architektur typu RISC i CISC jest osiągnięcie wysokiej wydajności procesora, ale obydwa rozwiązania prezentują zupełnie przeciwne założenia.
RISC (Reduced Instruction Set Computer) to architektura zaprojektowana do wykonywania niewielkiego zestawu prostych instrukcji, które można łatwo zdekodować i szybko wykonać.
Każda instrukcja wykonuje tylko jedną prostą funkcję, np. kopiuje wartość z pamięci do rejestru, dlatego procesor RISC ma wiele szybkich rejestrów ogólnego przeznaczenia (zwykle 16 lub 32). Ponadto udostępnia kilka prostych trybów adresowania i ma przewidywalne czasy wykonywania instrukcji. Kod programu dla procesora RISC może wymagać bardzo wielu instrukcji w celu wykonania nawet praktycznie prostego zadania, ponieważ każde działanie musi być rozbite do postaci ciągu najprostszych poleceń.
Przeciwieństwem RISC jest architektura CISC – Complex Instruction Set Computer, która charakteryzuje się występowaniem złożonych, specjalistycznych instrukcji zastępujących kilka operacji niskiego poziomu lub zdolnych do wykonywania operacji wieloetapowych, np. takich jak ładowanie z pamięci, operacja arytmetyczna i zapis do pamięci. Takie podejście ma zagwarantować zestawy instrukcji procesora, które niemal bezpośrednio odpowiadałyby poleceniom dostępnym w językach programowania wysokiego poziomu, takim jak wywołania procedur, sterowanie pętlami czy dostęp do struktur danych. Stosowanie takich złożonych instrukcji znacznie zmniejsza rozmiar programów i w niektórych aspektach pozwala na większą wydajność działania np. dzięki mniejszej liczbie odwołań do pamięci. Ponadto, w przeciwieństwie do RISC, zamiast przesyłać dane do rejestrów i z rejestrów, rozkazy mogą operować bezpośrednio na pamięci. Osiągnięcie tych założeń komplikuje budowę niektórych elementów procesora, np. dekodera rozkazów.
Branża mikroprocesorów obejmuje firmy wspierające głównie te dwie architektury. Układy z rodziny x86, np. Intel, to procesory działające na architekturze CISC, podczas gdy procesory ARM i np. Apple korzystają z architektury RISC. Inne, mniej popularne architektury to m.in.:
- ZISC – Zero Instruction Set Computer,
- MISC – Minimal Instruction Set Computing,
- VLIW – Very Long Instruction Word,
- EPIC – Explicitly Parallel Instruction Computing.
Każda z nich ma swoją specyfikę oraz charakterystyczne wady i zalety.
ARM
W procesorach komputerowych niemal od samego początku stosowano architekturę instrukcji CISC. Jednak badania wykazały, że programy komputerowe korzystały głównie z niewielkiej części rozkazów oferowanych przez takie procesory. Był to główny argument dla rozwoju architektury RISC, którą zajmowało się wówczas przedsiębiorstwo Apple Computer we współpracy z Acorn Computers. W tym celu wydzielono grupę projektową, która w 1990 roku przekształciła się w ARM Ltd. Akronim ARM pierwotnie oznaczał Acorn RISC Machine, ale ostatecznie przyjęto wersję: Advanced RISC Machine.
ARM Ltd rozwija architekturę ARM i udziela licencji na własność intelektualną, aby umożliwić swoim partnerom i klientom produkowanie, a także sprzedawanie mikroprocesorów oraz mikrokontrolerów w ramach ich własnych projektów i produktów. Jest to podejście inne niż w przypadku producentów procesorów, takich jak Intel lub AMD, którzy opracowują i wdrażają do sprzedaży własne chipy. Najtańsze licencje ARM to gotowa dokumentacja, którą można przekazać producentowi układów scalonych w celu produkcji. Rozbudowane licencje zawierają cały materiał projektowy i język opisu sprzętu (HDL – Hardware Description Language) – umożliwiają więc wprowadzanie znaczących zmian w układzie. Z działalnością ARM wiąże się określenie IP Core, gdzie IP oznacza Intellectual Property – własność intelektualna, zaś Core odnosi się do struktury układu scalonego.
Procesory z architekturą ARM są obecnie jednymi z najczęściej stosowanych procesorów na świecie. Różne wersje rdzeni ARM znajdują liczne zastosowania w systemach wbudowanych i urządzeniach o niskim poborze mocy (ze względu na ich energooszczędność). Używa się ich między innymi w smartfonach, mikrokomputerach (takich jak Raspberry Pi), urządzeniach IoT, a nawet w zabawkach dziecięcych. Licencje ARM nabył m.in. Apple i zastosował procesory tej rodziny w swoich flagowych produktach – iPhone, iPad, iPod, iWatch.
Z czasem wielu producentów (w tym Apple) zaczęło samodzielnie modyfikować i rozbudowywać swoje układy, optymalizując je do różnych zastosowań. Dzisiaj wszystkie liczące się na rynku urządzenia mobilne bazują na procesorach ARM lub pochodnych.
Zgodnie z założeniami architektury RISC rozkazy procesora są tak skonstruowane, aby wykonywały jedną określoną operację i były przetwarzane (w większości przypadków) w jednym cyklu maszynowym. Sam zestaw instrukcji jest niewielki. Interesującą cechą w stosunku do innych architektur jest użycie 4-bitowego kodu warunkowego na początku każdej instrukcji (rysunek 6). W praktyce można użyć piętnastu różnych warunków (rysunek 7), szesnasty (1111) jest zarezerwowany i nie wolno go używać.
W przypadku braku sufiksu pole warunkowe większości instrukcji jest ustawione na Always (AL), co oznacza, że instrukcja będzie zawsze wykonywana niezależnie od kodów warunkowych. Powyższa cecha powoduje znaczne uproszczenie programu i zmniejszenie liczby linii kodu w porównaniu do innych procesorów RISC. W efekcie układy ARM są konkurencyjne nawet wobec układów bardziej złożonych i o wyższym taktowaniu.
Większość procesorów ARM obsługuje dwa lub nawet trzy różne zestawy instrukcji. Standardowe trzy zestawy, których procesory ARM mogą używać, to:
- ARM lub A32 – klasyczne instrukcje o długości 32 bitów.
- Thumb – zestaw instrukcji, który został po raz pierwszy dodany w procesorze ARM7TDMI i zawierał tylko 16-bitowe instrukcje, co pozwalało na zmniejszenie zajętości pamięci przez program, kosztem wydajności. Zajętość pamięci była poważnym problemem w mniejszych systemach wbudowanych.
- Thumb-2 – najnowsze procesory, w tym te z serii Cortex-A, obsługują zestaw instrukcji Thumb-2, który rozszerza zestaw Thumb i zawiera instrukcje 16-bitowe oraz 32-bitowe. Daje to wydajność podobną do zestawu instrukcji A32, z rozmiarem kodu podobnym do instrukcji Thumb. Ze względu na zalety nowego rozwiązania często zdarza się, że cały kod jest kompilowany do standardu Thumb-2.
Najpopularniejszym projektem ARM był rdzeń ARM7TDMI (architektura ARMv4T), który zawierał 3-stopniowe potokowanie instrukcji (Instruction Pipeline) i mógł być taktowany do około 70 MHz. Kolejny znany rdzeń ARM9TDMI również bazował na architekturze ARMv4T, ale zawierał 5-stopniowe potokowanie instrukcji i mógł być taktowany do około 180 MHz. Kolejne rdzenie – ARM9xxE oraz ARM10xxE – bazowały na różnych wersjach architektury ARMv5. Architektura ARMv6 była bazą dla bardzo wydajnych rdzeni ARM11xx taktowanych zegarem do ok. 1 GHz. Układy z tej rodziny – Broadcom BCM2835/BCM2836 – były stosowane np. na płytkach Raspberry Pi 1/2 (fotografia 3), w układach Freescale Semiconductor serii i.MX3x, w układach Samsung ARM 1176JZ instalowanych w iPhone 3G itd. Architektura ARMv6 stała się także bazą dla pierwszych rdzeni Cortex-M.
64 bity
Architektura 64-bitowa AArch64 została wprowadzona w 2012 r. wraz z rdzeniem Cortex-A (ARMv8-A). Nowa wersja dawała znaczne korzyści wydajnościowe – pozwala na adresowanie większego obszaru pamięci i przetwarzanie większych typów danych. Przekłada się to na płynniejsze wykonywanie wielu zadań jednocześnie, obsługę większych plików, uruchamianie bardziej złożonych aplikacji i przetwarzanie grafiki o wyższej jakości, przy jednoczesnym niewielkim zapotrzebowaniu na energię w porównaniu z 64-bitowymi układami x86-64. W ARMv8-A dodano nowy zestaw instrukcji A64, bardziej rozbudowany niż 32-bitowy poprzednik, zastosowano ponadto 31 rejestrów ogólnego przeznaczenia o pojemności 64 bitów każdy, co przełożyło się na wydajniejsze wykonywanie złożonych zadań. Ponadto architekturę AArch64 można rozszerzyć o opcjonalne zestawy instrukcji, takie jak NEON do operacji SIMD (Single Instruction, Multiple Data) i SVE (Scalable Vector Extensions) do obsługi jeszcze bardziej złożonych zadań.
Niezwykle ważnym aspektem przemawiającym za potrzebą opracowania architektury 64-bitowej była możliwość wykonywania zarówno kodu 32-bitowego, jak i 64-bitowego – obsługa zestawów A64 oraz A32 i Thumb/Thumb-2 znacznie ułatwiła migrację z popularnej, 32-bitowej architektury ARMv7-A (rysunek 8). Dzisiejszy użytkownik najnowszego smartfona nawet nie zdaje sobie sprawy z tego, czy aplikacja pracuje w standardzie 32-, czy 64-bitowym. Stosując nowatorskie podejście do zapewnienia wstecznej kompatybilności, ARM zapewnia producentom oprogramowania i rozwiązań sprzętowych stabilną platformę do prowadzenia biznesu, co okazało się kluczowe dla utrzymania wysokiej pozycji rynkowej.
ARM Cortex
Cortex to bardziej modułowa i skalowalna architektura, zaprojektowana z myślą o różnych zastosowaniach, od urządzeń mobilnych po serwery. Bazuje zarówno na 32-bitowej architekturze ARMv7 (w przypadku starszych rdzeni Cortex), jak i na nowoczesnej, 64-bitowej ARMv8 oraz ARMv9 w przypadku najnowszych układów. Nowa architektura korzysta z silniej zoptymalizowanych zestawów instrukcji – Thumb-2 oraz A64, oraz wprowadza zaawansowane funkcje bezpieczeństwa – ARM TrustZone i funkcje wirtualizacji sprzętowej (ARMv8), które pozwalają na uruchamianie wielu systemów operacyjnych na jednym procesorze. Portfolio Cortex jest podzielone na trzy główne kategorie (rysunek 9).
Cortex-M – rdzenie zaprojektowane do mikrokontrolerów w systemach wbudowanych. Pierwsze procesory Cortex-M zostały wydane w 2004 roku. Dziś stanowią poważną konkurencję dla układów 8-bitowych, ponieważ są produkowane przez wielu producentów w przeogromnej palecie różnych konfiguracji, a ponadto nie są dużo droższe
od starszych i nieporównanie mniej wydajnych mikrokontrolerów, np. z rodziny 8051. Główną różnicą w stosunku do bardziej zaawansowanych rdzeni Cortex-A jest brak jednostki zarządzania pamięcią MMU (Memory Management Unit). Układy bez MMU nie pozwalają na uruchomienie „pełnoprawnych” systemów operacyjnych, natomiast bez problemu obsługują różnego rodzaju systemy operacyjne czasu rzeczywistego RTOS (Real-Time Operating System).
Cortex-A – rdzenie wysokowydajnych procesorów aplikacyjnych do urządzeń pracujących pod kontrolą wysokopoziomowych systemów operacyjnych, takich jak Linux lub Android. Wszystkie wyposażone są w jednostkę zarządzania pamięcią MMU oraz pamięci cache zarówno dla instrukcji (Instruction Cache), jak i danych (Data Cache). W większości są implementowane w układach wielordzeniowych.
Cortex-R – rdzenie o wysokiej wydajności przeznaczone do aplikacji czasu rzeczywistego. Oferta rdzeni tego typu jest najmniejsza pod względem zróżnicowania wersji. Znajdują zastosowanie w takich aplikacjach, jak kontrolery dysków twardych i SSD, sprzęt sieciowy, a także aplikacje samochodowe (kontrolery poduszek powietrznych, układów hamulcowych i systemów zarządzających pracą silnika). Układy z rdzeniem Cortex-R są pod pewnymi względami podobne do mikrokontrolerów, ale przeważnie stosowane w systemach bardziej zaawansowanych i krytycznych pod względem bezpieczeństwa.
Charakterystyka wybranych rdzeni ARM Cortex
Cortex-M0 to najprostszy i bardzo energooszczędny rdzeń ARM. Bazuje na architekturze ARMv6-M zoptymalizowanej specjalnie z myślą o zastosowaniu w niewielkich i tanich mikrokontrolerach, dlatego jego struktura krzemowa zajmuje także najmniejszą powierzchnię spośród wszystkich rdzeni Cortex. Zawiera 3-stopniowe potokowanie instrukcji i obsługuje większość poleceń z grupy Thumb i niektóre z grupy Thumb-2. Wydajność jest na poziomie 0,84 DMIPS/MHz. Znane układy z rdzeniem Cortex-M0 to m.in: XMC1100….1400 (Infineon), nRF51 (Nordic), STM32F0 (ST Microelectronics) czy też LPC1100 (NXP).
Cortex-M0+ to najbardziej energooszczędny rdzeń firmy ARM, cechujący się jednocześnie wyższą wydajnością obliczeniową niż Cortex-M0 (na poziomie 0,93 DMIPS/MHz). Osiągnięcie takich parametrów było możliwe dzięki wprowadzonym modyfikacjom (rysunek 10), m.in.:
- zredukowano przetwarzanie potokowe z 3- do 2-stopniowego, co umożliwia szybsze wykonywanie instrukcji,
- wprowadzono zoptymalizowaną magistralę AHB-Lite z buforowaniem dostępu do pamięci, co przyspiesza dostęp do pamięci i rejestrów peryferyjnych w systemach mikrokontrolerowych,
- dostęp do portów I/O odbywa się w jednym cyklu zegarowym,
- struktura procesora zawiera bufor MTB (Micro Trace Buffer) pozwalający na śledzenie wykonywania instrukcji i łatwiejsze debugowanie,
- układ umożliwia zaimplementowanie bloku MPU (Memory Protection Unit).
Cortex-M0+ korzysta z tego samego zestawu instrukcji, co Cortex-M0, więc obydwa wymienione rdzenie są binarnie kompatybilne. Kod napisany na Cortex-M0 będzie działał także po uruchomieniu na Cortex-M0+ bez żadnych zmian. Rdzeń M0+ jest często stosowany jako pomocniczy w mikroprocesorach wielordzeniowych, np. ST WB (jeden Cortex-M4F + jeden Cortex-M0+). Znane układy z rdzeniem Cortex-M0+ to m.in: SAM C2, D0, D1, D2, DA, L2, R2, R3 (Microchip); PIC32CM JH i MC (Microchip); LPC800 (NXP); Kinetis E, EA, L, M, V1, W0, S32K11 (Freescale/NXP); S124, S128, RE, RE01 (Renesas); EFM32 Zero (Silicon Labs/Energy Micro); STM32 L0, G0, C0, WL (ST Microelectronics); RP2040 – dwa rdzenie M0+ (Raspberry Pi).
Cortex-M1 jest podobny do M0, ale zoptymalizowany specjalnie do implementowania w układach FPGA i oferowany jako rdzeń programowy m.in. w takich układach, jak: Cyclone-II, Cyclone-III, Stratix-II, Stratix-III (Altera) czy Spartan-3, Virtex-2, Virtex-3, Virtex-4, Artix-7 (Xilinx).
Cortex-M3/Cortex-M4 bazują na bardziej złożonej architekturze – ARMv7-M, która może działać z taktowaniem do 200 MHz i zapewnia zaawansowane funkcje debugowania (rysunek 11). Oprócz standardowego SWD (Serial Wire Debug), mikrokontrolery z rdzeniem Cortex-M3/M4 mają interfejs śledzenia z jednoliniowym wyjściem SWO (Serial Wire Output), który może być używany do przesyłania komunikatów debugowania printf bezpośrednio z kodu aplikacji i umożliwia ich przeglądanie z poziomu dowolnego standardowego środowiska IDE. Ponieważ wyjście SWO jest wbudowane w sam rdzeń, nie zajmuje żadnych standardowych UART-ów.
Oprócz doskonałej wydajności obliczeniowej rdzeni Cortex-M3/M4, zaawansowana struktura przerwań zapewnia szybką reakcję systemu na zdarzenia zachodzące w świecie rzeczywistym, a system NMI (Non-Maskable Interrupts) odpowiada za obsługę szczególnych przypadków, takich jak błędy sprzętowe.
Cortex-M3/M4 zawiera 3-stopniowe potokowanie instrukcji, obsługuje pełny zestaw instrukcji Thumb i Thumb-2 oraz ma sprzętowe bloki do operacji mnożenia i dzielenia 32-bitowych liczb całkowitych. Osiąga wydajność na poziomie 1,25 DMIPS/MHz. Cortex-M4 wyróżnia się tym, że obsługuje instrukcje DSP i opcjonalnie może zawierać jednostkę zmiennoprzecinkową FPU (Floating-Point Unit). Rdzeń z FPU jest oznaczany jako Cortex-M4F.
Popularne układy z rdzeniem Cortex-M3 to m.in: SAM 3A, 3N, 3S, 3U, 3X (Microchip); LPC1300, LPC1700, LPC1800 (NXP); STM32 F1, F2, L1, W (ST Microelectronics); TLE9860, TLE987x (Infineon) czy MG32F1xx (Megawin). Mikrokontrolery, w których Cortex-M3 występuje jako jeden z wielu rdzeni, to np. Apple A9; Samsung Exynos 7420 czy Texas Instruments F28, LM3, TMS470, OMAP 4470.
Z kolei Cortex-M4 znajdziemy w strukturach układów: SAM 4L, 4N, 4S (Microchip); Kinetis K, W2 (Freescale); STM32WL (ST Microelectronics) czy CC32xx, CC32xxMOD (Texas Instruments). Natomiast Cortex--M4F to np. układy: ADUCM4050 (Analog Devices); XMC4000 (Infineon); LPC4000, LPC4300, LPC54000 (NXP); Kinetis K, V3, V4, S32K14x (Freescale); S3, S5, S7, RA4, RA6 (Renesas); STM32 F3, F4, L4, L4+, G4, WB (ST Microelectronics). Cortex-M4F jest również chętnie stosowany jako rdzeń dodatkowy przy znacznie silniejszej jednostce/jednostkach. Cała seria układów NXP: i.MX 6, i.MX 7, i.MX 8, i.MX 8M oraz i.MX 8X zawiera takie właśnie rozwiązanie, podobnie jak np. STM32MP1 (ST Microelectronics).
Cortex-M7 to rdzeń z 2014 roku, o wysokiej wydajności, ostatni zaprojektowany na bazie architektury ARMv7-M. Charakteryzuje się niemal dwukrotnie większą efektywnością energetyczną niż starszy Cortex-M4 – osiąga 2,14 DMIPS/MHz. Jest wyposażony w 6-stopniowe przetwarzanie instrukcji z przewidywaniem rozgałęzień (Branch predictor) i obsługuje największy zestaw instrukcji (rysunek 12). Magistrale instrukcji i danych zostały powiększone do szerokości 64 bitów, w porównaniu do poprzednich magistral 32-bitowych. Może być wyposażony w jednostkę zmiennoprzecinkową FPU zdolną do wykonywania operacji pojedynczej precyzji i podwójnej precyzji. Jeśli rdzeń zawiera FPU, jest określany jako Cortex-M7F. Znane układy z rdzeniem Cortex-M7 to m.in: SAM E7, S7, V7 (Mikrochip); Kinetis KV5x, S32K3xx (Freescale); i.MX RT (NXP); STM32 F7, H7 (ST Microelectronics).
Cortex-M23 bazuje na nowej architekturze – ARMv8-M, wprowadzonej do użytku w 2016 roku. Koncepcyjnie jest podobny do Cortex-M0+, ale obsługuje dodatkowe instrukcje dzielenia liczb całkowitych, ma usprawniony, 2-etapowy potok instrukcji oraz funkcje bezpieczeństwa TrustZone. Mikrokontrolery, które bazują na rdzeniu Cortex-M23, to m.in.: GD32E2xx (GigaDevice); SAM L10, L11 (Microchip); PIC 32CM-LE 32CM-LS (Microchip); M23xx, M2xx, NUC1262 (Nuvoton); S1JA, RA2A1, RA2L1, RA2E1, RA2E2 (Renesas).
Cortex-M33 to kolejny rdzeń na bazie nowej architektury ARMv8-M, który czerpie wiele z Cortex-M4 – zawiera 3-stopniowe potokowanie instrukcji, obsługuje pełny zestaw instrukcji Thumb i Thumb-2 oraz operacje DSP. Opcjonalnie może zawierać jednostkę zmiennoprzecinkową FPU – Cortex-M33F. Zasadniczą nowością jest funkcjonalność TrustZone. Znane układy z rdzeniem Cortex-M33 to m.in.: nRF91, nRF5340, nRF54 (Nordic); LPC5500, i.MX RT500, RT600, RT700 (NXP); RA4, RA6 (Renesas); STM32 H5, L5, U5, WBA (ST Microelectronics); RP2350 (Raspberry Pi).
Cortex-M35P to pierwszy rdzeń ARMv8-M podobny do Cortex-M33, ze zintegrowanymi mechanizmami ochrony przed manipulacjami (tamper-resistance), przeznaczony do bezpiecznych urządzeń IoT, aplikacji obsługujących płatności lub usługi telekomunikacyjne. Jest to projekt z wieloma warstwami zabezpieczeń, łączący ochronę oprogramowania z technologią ARM TrustZone i ochroną fizyczną – SecurCore. Jeden z dostępnych mikrokontrolerów z tym rdzeniem to ST33K (ST Microelectronics).
Cortex-M52/Cortex-M55 to pierwsze rdzenie zgodne z kolejną architekturą – ARMv8.1-M. Wersja M55 została wydana w 2020 roku, a wersja M52 w 2023 roku. Nowa architektura zawiera różne funkcje bezpieczeństwa i wprowadza nowe optymalizacje zwiększające wydajność, takie jak 64-bitowa magistrala AXI. Najważniejszą zmianą jest nowy zestaw instrukcji SIMD (Single Instruction, Multiple Data), znany jako Helium i przeznaczony do aplikacji wymagających przeprowadzania intensywnych obliczeń, takich jak sztuczna inteligencja (AI), przetwarzanie sygnałów cyfrowych (DSP), multimedia (audio, wideo) czy złożone obliczenia matematyczne. Dzięki SIMD jedna instrukcja może przetwarzać wiele elementów danych jednocześnie, co znacznie przyspiesza operacje macierzowe, filtrowanie, transformacje Fouriera i inne zadania DSP, a jednocześnie zachowuje niski pobór mocy i kompaktową konstrukcję. Układy z tym rdzeniem to np.: G32R5 (Geehy Semiconductor); STM32 N6 (ST Microelectronics), PSOC Edge (Infineon).
Cortex-M85 to wszechstronny, wydajny i energooszczędny rdzeń zaprojektowany do najbardziej wymagających aplikacji w systemach wbudowanych. Dzięki technologii Helium, wysokiej przepustowości i zaawansowanemu wsparciu dla AI i DSP, wydajność opisywanej architektury wynosi ok. 3,8 DMIPS/MHz i jest wystarczająca do realizacji lekkich modeli ML (Machine Learning), np. służących do rozpoznawania głosu czy przetwarzania obrazu. Dodatkowo obsługuje przerwania z bardzo małym opóźnieniem, co jest istotne w aplikacjach w czasu rzeczywistego. Cortex-M85 jest idealnym rozwiązaniem dla urządzeń nowej generacji, łącząc niskie zużycie energii z wysoką wydajnością. Układy z tym rdzeniem to np. Renesans RA8.
Cortex-A5, A7, A8, A9, A12, A15 i A17 bazują na architekturze ARMv7-A i stanowią pierwszą serię 32-bitowych rdzeni aplikacyjnych Cortex-A (rysunek 13). Mają wspólny zestaw funkcjonalności, w tym takie elementy jak silnik przetwarzania multimediów NEON, zabezpieczenia TrustZone czy obsługa działań zmiennoprzecinkowych pojedynczej i podwójnej precyzji, a także wsparcie kilku zestawów instrukcji – ARM, Thumb, Thumb-2, Jazelle i DSP. Wybrane układy z tej rodziny to: SAMA5D3 (Cortex-A5, Microchip); i.MX7 (Cortex-A8, NXP); Apple A5 (Cortex-A9, Apple); Exynos 5 52xx, 54xx (Cortex-A15, Samsung); MT6595, MT5595 (Cortex-A17, MediaTek).
Cortex-A3x, A5x, A7x implementują nowszą architekturę – ARMv8-A (rysunek 14), która oferuje funkcje wspierające wielowątkowość, takie jak symetryczne przetwarzanie wieloprocesorowe SMP (Symmetric Multiprocessing). Mogą być implementowane zarówno jako jednostki 32-bitowe, jak i 64-bitowe. Najnowsze wersje Cortex-A55, A65, A75, A76, A77, A78 oferują już ulepszoną architekturę ARMv8.2-A. Wybrane układy z tej rodziny to: i.MX8X (Cortex-A35, NXP); Sitara AM6xxx (Cortex-A53, Texas Instruments); Snapdragon 808, 810 (Cortex-A57, Qualcomm); Amlogic S922X (Cortex-A53, Amlogic).
Cortex-A510, A520, A710, A715, A720, A725 bazują na najnowszych architekturach ARMv9-A lub ARMv9.2-A, które są skoncentrowane na heterogenicznych systemach wielordzeniowych. Implementują DynamIQ – kluczową technologię ARM, która umożliwia tworzenie bardziej elastycznych, wydajnych i energooszczędnych systemów heterogenicznych. Dzięki możliwości łączenia różnych typów rdzeni w jednym klastrze, ulepszonemu zarządzaniu pamięcią i zoptymalizowanym zarządzaniem obciążeniem DynamIQ jest fundamentem nowoczesnych procesorów ARM stosowanych w wielu dziedzinach technologii. Wybrane układy z tej rodziny to: Snapdragon 7 (Cortex-A510, Qualcomm); Exynos 2200 (Cortex-A710, Samsung); Tensor G4 (Cortex-A710, Google); Dimensity 9300 (Cortex-A720, MediaTek).
Cortex-R4, R5, R7, R8 to 32-bitowe rdzenie bazujące na architekturze ARMv7-R (rysunek 15). Charakteryzują się pamięciami o szybkim dostępie, przeznaczonymi do wysoce deterministycznych aplikacji. TCM (Tightly-Coupled Memory) to tzw. pamięć ściśle sprzężona, która może przechowywać kod procedur obsługi przerwań i danych wymagających intensywnego przetwarzania. Każdy blok TCM może mieć do 1 MB.
Ponadto opisywane procesory mają wielostopniowy potok instrukcji z przewidywaniem rozgałęzień oraz technologią przerwań o małym opóźnieniu. W najgorszym przypadku czas odpowiedzi na przerwanie może wynosić najwyżej 20 cykli. Konfiguracja dwurdzeniowa bazuje na redundantnym procesorze Cortex-R4 w synchronizacji, z przesuniętym zegarem i logiką porównawczą. Takie rozwiązanie pozwala osiągnąć bardzo wysoką niezawodność i odporność na błędy. Warto jednak zauważyć, że pomimo wysokiego poziomu wydajności, ta seria rdzeni nie nadaje się do uruchamiania pełnych systemów operacyjnych, takich jak Linux czy Android, te zaś pozostają domeną serii Cortex-A.
Cortex-R52, R82 to najnowsze układy rodziny Cortex-R, które bazują na architekturze ARMv8-R. Szczególnym projektem jest rdzeń R82 – to pierwszy procesor czasu rzeczywistego firmy ARM, w którym zaimplementowano 64-bitową architekturę Armv8-R AArch64 i obsługę instrukcji A64. Osiąga wydajność nawet do 8,67 DMIPS/MHz, którą uzyskano m.in. dzięki szybkiej magistrali wewnętrznej AXI5 o szerokości nawet 256 bitów czy oddzielnej pamięci podręcznej L1 dla każdego rdzenia, podzielonej na pamięć danych oraz instrukcji z możliwością konfigurowania rozmiaru poszczególnych sekcji. Również pamięci TCM są wydzielone dla każdego rdzenia: ITCM dla instrukcji oraz DTCM dla danych. Obie TCM mają konfigurowalny rozmiar, który może wynosić do 1 MB. Najnowszy rdzeń może też zawierać 32-bitowy port LLPP lub 64-bitowy SSP połączony poprzez magistralę AXI5, który umożliwia ścisłą integrację urządzeń peryferyjnych wrażliwych na opóźnienia.
Cortex X jest najmłodszym typem rdzenia z grupy Cortex. Powstał w ramach programu CXC (Cortex-X Custom), w którym partnerzy programu – w ścisłej współpracy z zespołami inżynierów ARM – mogli kształtować CPU tak, aby spełniał ich specyficzne wymagania rynkowe.
Pierwszym rdzeniem programu CXC jest Cortex-X1, który zapewnia 30-procentową poprawę wydajności szczytowej w porównaniu z odpowiadającym mu procesorem Arm Cortex-A77. Oferowana przez nowy rdzeń krótkotrwała (impulsowa), podwyższona wydajność wpływa istotnie na poprawę responsywności podczas korzystania ze smartfonów i innych urządzeń z dużym ekranem. Ponadto Cortex-X1 oferuje także 2-krotną poprawę wydajności uruchamianych na nim algorytmów uczenia maszynowego (ML) w porównaniu z Cortex-A77.
Flagowym procesorem z serii Cortex-X (oraz całej serii Cortex w ogóle) jest zapowiedziany w 2024 roku potężny Cortex-X925. Pomimo zmiany nazwy jest to bezpośredni następca poprzedniej generacji – Cortex-X4, który można znaleźć w procesorach takich jak Qualcomm Snapdragon 8 Gen 3. Główne dane Cortex-X925 mówią o architekturze Arm v9.2, wyższych prędkościach taktowania przekraczających 3,6 GHz i większych pamięciach podręcznych – rdzeń procesora może mieć do 3 MB prywatnej pamięci podręcznej L2. Największą różnicą jest natomiast niemal podwojona liczba jednostek OoO Execution Window (Out-of-Order Execution Window), które umożliwiają wykonywanie instrukcji programu poza kolejnością. W efekcie możliwe jest bardziej efektywne wykorzystanie jednostek obliczeniowych procesora poprzez reorganizację kolejności wykonywania instrukcji, zgodnie z zależnościami danych, a nie ich pierwotnym ułożeniem w kodzie programu. Cortex-X925 ma osiągnąć o 15% wyższą wydajność w porównaniu z Cortex-X4, która wzrośnie dodatkowo do 36% po uwzględnieniu przejścia na produkcję w procesie technologicznym 3 nm. Wydajność w zakresie AI ma jeszcze większy potencjał – niektóre modele będą uruchamiane aż o 46% szybciej niż na Cortex-X4 (rysunek 18).
Pomimo wysokiej wydajności, Cortex-X925 został zaprojektowany tak, aby był energooszczędny. Projekt rdzenia obejmuje takie funkcje, jak dynamiczne skalowanie napięcia i częstotliwości – DVFS (Dynamic Voltage and Frequency Scaling), które umożliwia dostosowanie poziomów mocy i wydajności w zależności od obciążenia. Zapewnia to wydajne zagospodarowanie energii, co przekłada się na wydłużenie żywotności baterii i zmniejszenie emisji ciepła.
Cortex-X925 jest również zaprojektowany i zoptymalizowany pod kątem aplikacji AI. Zawiera odpowiednie akceleratory i osiąga wydajność nawet 80 TOPS (bilionów operacji na sekundę), co pozwala na obsługiwanie złożonych zadań z zakresu AI – od przetwarzania języka naturalnego, po widzenie komputerowe. Możliwości te są dodatkowo wspierane przez biblioteki Kleidi AI i Kleidi CV firmy Arm, które zapewniają programistom narzędzia potrzebne do tworzenia zaawansowanych aplikacji AI.
Kluczowym elementem rdzenia X925 oraz pozostałych układów tej generacji – A725 i A520 – jest kompatybilność z technologią DynamIQ, która pozwala na łączenie rdzeni o różnych konfiguracjach w jednym klastrze (rysunek 19). Dzięki temu możliwe jest dynamiczne zarządzanie zasobami rdzeni procesora w ramach klastra, aby dostosować je do różnorodnych wymagań aplikacji. DynamIQ w wersji DSU-120 obsługuje do 8 rdzeni CPU o różnej wydajności, np. rdzenie o wysokiej mocy obliczeniowej, rdzenie aplikacyjne i energooszczędne w jednym klastrze w konfiguracji 2+4+2. Centralnym komponentem klastra DynamIQ jest DSU (Dynamic Shared Unit). Zawiera współdzieloną pamięć podręczną poziomu L3, która działa jako szybki bufor dla rdzeni znajdujących się w klastrze, przyspieszając przetwarzanie danych i zmniejszając opóźnienia w dostępie do pamięci. Ponadto wszystkie zewnętrzne interfejsy systemu są dostarczane przez DSU.
Rdzeń Cortex-X925 można zastosować w samodzielnej konfiguracji DynamIQ, w której klaster DSU-120 DynamIQ obejmuje jeden lub więcej rdzeni X925. Rdzeń Cortex-X925 można również stosować jako rdzeń o wysokiej wydajności w heterogenicznym klastrze.
RISC-V
Architektura ISA ARM zdecydowanie dominuje na rynkach systemów wbudowanych i mobilnych ze względu na wysoką wydajność i energooszczędność. RISC-V, w przeciwieństwie do ARM, jest architekturą ISA typu open source (rysunek 16), więc można ją stosować bez opłat licencyjnych. Ponadto umożliwia bezproblemowe wprowadzanie optymalizacji i modyfikacji, co ułatwia rozwój procesorów i dostosowanie wydajności do różnych aplikacji. RISC-V oferuje zatem przede wszystkim wszechstronność, elastyczność, skalowalność i dzięki tym cechom zyskuje na popularności, stając się groźnym konkurentem dla marki ARM.
Aspekt open source architektury RISC-V zapewnia brak uzależnienia od dostawcy i minimalizuje koszty, co skutkuje bardziej opłacalną produkcją. Ponadto firmy zachęcają osoby spoza branży do aktywnego uczestnictwa w otwartym projekcie RISC-V i wprowadzania innowacji oraz niestandardowych rozwiązań. Taka współpraca pozwala na szybkie wdrażanie najnowocześniejszych technologii i spersonalizowanych procesorów do różnych obszarów aplikacyjnych.
ARM oferuje zaawansowane funkcje bezpieczeństwa, które muszą być wdrożone w celu zapewnienia niezawodności aplikacji. RISC-V oferuje zupełnie inne podejście – gwarantuje całkowitą przejrzystość architektury w celu dokładnego monitorowania i poszukiwania potencjalnych luk w zabezpieczeniach, zgodnie ze swoimi wymaganiami. Ten typ dostosowywania zabezpieczeń jest korzystny w wielu aplikacjach o wysokim poziomie bezpieczeństwa, w których producent potrzebuje całkowitej kontroli i dokładnego zrozumienia struktury sprzętowej.
Użytkownicy komercyjni wymagają, aby ISA było stabilne i w jakimś stopniu nadzorowane, zanim zostanie wdrożone. Dlatego w 2015 r. utworzono fundację RISC-V Foundation, której celem jest gromadzenie, utrzymywanie i publikowanie własności intelektualnej związanej z definicją RISC-V. W listopadzie 2019 r. fundacja RISC-V przeniosła swoją siedzibę do Szwajcarii, powołując się na obawy dotyczące amerykańskich przepisów handlowych. Od marca 2020 r. organizacja nosi nazwę RISC-V International.
Baza i rozszerzenia
Architektura ISA RISC-V ma modułową konstrukcję, składającą się z alternatywnych części bazowych i opcjonalnych rozszerzeń. Baza określa zestaw instrukcji, ich kodowanie, przepływ sterowania, rejestry i ich rozmiary, adresowanie, sterowanie logiką i przepływem danych. Rozszerzenia standardowe są tak określone, aby działały ze wszystkimi bazami standardowymi, a także ze sobą nawzajem, bez powodowania konfliktów. Aby nazwać kombinacje funkcji, które mogą być zaimplementowane, zdefiniowano pewien schemat. Najpierw określana jest baza zestawu instrukcji oraz szerokość bitowa rejestrów i wariant, np. RV32E, RV64I lub RV128I.
Następne litery określają zaimplementowane rozszerzenia (rysunek 17), są to m.in.:
- M – rozszerzenie standardowe do mnożenia i dzielenia liczb całkowitych;
- A – rozszerzenie standardowe do instrukcji atomowych;
- F – standardowe rozszerzenie do obliczeń zmiennoprzecinkowych pojedynczej precyzji;
- D – standardowe rozszerzenie do liczb zmiennoprzecinkowych podwójnej precyzji;
- Zicsr – instrukcje rejestru kontroli i statusu (CSR);
- G – skrót dla zestawu: I, M, A, F, D, Zicsr, Zifencei i rozszerzeń;
- Q – standardowe rozszerzenie do obliczeń zmiennoprzecinkowych o poczwórnej precyzji;
- L – rozszerzenie standardowe do liczb zmiennoprzecinkowych dziesiętnych;
- C – standardowe rozszerzenie do skompresowanych instrukcji;
- B – standardowe rozszerzenie do manipulacji bitami;
- J – standardowe rozszerzenie do języków tłumaczonych dynamicznie;
- T – standardowe rozszerzenie pamięci transakcyjnej;
- P – standardowe rozszerzenie do instrukcji SIMD;
- V – rozszerzenie standardowe do operacji wektorowych.
Implementacje RISC-V
Organizacja RISC-V prowadzi listę implementacji procesorów i układów SoC RISC-V. Oprócz gotowych podzespołów RISC-V jest chętnie implementowany w układach FPGA. Co ciekawe, z uwagi na sankcje, które uniemożliwiłyby Chinom dostęp do zastrzeżonych ISA, kraj ten planował przenieść większość swoich architektur procesorów i mikrokontrolerów na rdzenie RISC-V.
Wybrane układy z tym rdzeniem to m.in.:
- ESP32-C3 – jednordzeniowy, 32-bitowy mikrokontroler RISC-V (RV32IMC) od Espressif (rysunek 20);
- RV32IMAC, GD32V – mikrokontrolery od GigaDevice;
- PolarFire od Microchip – flagowa platforma FPGA, w ramach której gotowy procesor – bazujacy na RISC-V – jest budowany bezpośrednio w strukturze FPGA. Linia produktów PolarFire obejmuje wiele różnych komponentów (rysunek 21);
- Bluespec – oficjalny partner rozwojowy firmy Xilinx, obecnie wspiera implementacje 32-bitowych rdzeni RISC-V na układach FPGA firmy Xilinx. Ten SoC IP jest przeznaczony do aplikacji wymagających pojedynczego rdzenia procesora, uruchamiającego Linux na FPGA.
Podsumowanie
Na rynku mikrokontrolerów i procesorów aplikacyjnych od wielu lat panuje marka ARM. Architektura RISC-V daje dużo korzyści, ale też wiążą się z nią różne niepewności. Pomimo to wprowadza zupełnie inne podejście biznesowe i dzięki temu zyskuje popularność.
Kolejnym aspektem, którego nie wolno pominąć, są regulacje polityczne i handlowe oraz sankcje. Siedziba ARM znajduje się w Wielkiej Brytanii, Intel i AMD to firmy z USA, a fundacja RISC-V ma siedzibę w Szwajcarii – otwartość projektu i dostępność dokumentacji stawia tę technologię ponad podziałami politycznymi. Dlatego takie kraje jak Chiny czy Rosja zwracają się w stronę RISC-V.
Istnieją obawy, że rozpowszechnienie RISC-V spowoduje ogromną fragmentację i problemy ze zgodnością. Dlatego społeczność RISC-V aktywnie pracuje nad opracowaniem i utrzymaniem standardów.
Jednak decydujące znaczenie może mieć coś zupełnie innego. Typowym problemem każdej nowej technologii jest dostępność (oraz cena) narzędzi, w tym przypadku oprogramowania. Bez nowoczesnego i łatwo dostępnego IDE oraz bazy bibliotek, przykładów i obrazów systemów ograniczana jest użyteczność nowego rdzenia. RISC-V nadrabia zaległości w tym zakresie – jest już obsługiwany przez niektóre łańcuchy narzędzi, debuggery oraz systemy operacyjne, m.in. Linux.
Damian Sosnowski, EP
Bibliografia:
- https://tiny.pl/6qy8qt7b
- https://pl.wikipedia.org/wiki/Procesor
- https://pl.wikipedia.org/wiki/Koprocesor
- https://pl.wikipedia.org/wiki/Procesor_sygna%C5%82owy
- https://pl.wikipedia.org/wiki/Procesor_graficzny
- https://en.wikipedia.org/wiki/Microprocessor
- https://tiny.pl/wc_q2w8t
- https://tiny.pl/f3q-28pm
- https://pl.wikipedia.org/wiki/RISC-V
- https://pl.wikipedia.org/wiki/Mikroarchitektura_procesora
- https://pl.wikipedia.org/wiki/Architektura_zestawu_instrukcji
- https://pl.wikipedia.org/wiki/RISC
- https://pl.wikipedia.org/wiki/CISC
- https://en.wikipedia.org/wiki/Reduced_instruction_set_computer
- https://en.wikipedia.org/wiki/Complex_instruction_set_computer
- https://iitd-plos.github.io/col718/ref/arm-instructionset.pdf
- https://picockpit.com/raspberry-pi/arm-vs-risc-v-vs-x86/
- https://tiny.pl/8pzqjy13
- https://www.threatdown.com/glossary/what-is-arm64/
- https://tiny.pl/fjpndjr7
- https://www.theregister.com/2015/02/02/raspberry_pi_model_2/
- https://tiny.pl/zn_j5rr3
- https://tiny.pl/mh66tzts
- https://www.st.com/en/secure-mcus/st33k1m5c.html
- https://en.wikipedia.org/wiki/ARM_Cortex-A
- https://tiny.pl/xh-xhc78
- https://tiny.pl/q_3k6c8w
- https://tiny.pl/j3-z0z8y
- https://tiny.pl/8pzqjy13
- https://en.wikipedia.org/wiki/RISC-V