Różne wersje rdzeni ARM są szeroko stosowane w systemach wbudowanych i systemach o niskim poborze mocy, ze względu na ich energooszczędną architekturę.
Procesory z architekturą ARM są jednymi z najczęściej stosowanych procesorów na świecie. Używa się ich między innymi w dyskach twardych, telefonach komórkowych, routerach, kalkulatorach, a nawet w zabawkach dziecięcych. Obecnie zajmują one ponad 75% rynku 32-bitowychCPU dla systemów wbudowanych. Najpopularniejszym projektem ARM był rdzeń ARM7TDMI szeroko stosowany w telefonach komórkowych. Moc obliczeniowa architektury ARM umożliwia instalacje na procesorze systemu operacyjnego, z zaimplementowanymi mechanizmami wielowątkowości, z możliwością wykorzystania zawartego w systemie stosu TCP/IP czy systemu plików (np. FAT32). Powstało wiele systemów wykorzystujących tę technologię, m.in. Windows CE, FreeBSD, NUTOS(Ethernut), dystrybucje Linuksa opatrzone hasłem embedded (Embedded Debian, Embedded Ubuntu).
Historia
Projektowanie pierwszego procesora ARM rozpoczęło się w 1983 roku, jako projekt rozwojowy brytyjskiej Acorn Computers Ltd. Grupa inżynierów kierowana przez Sophie Wilson i Steve’a Furbera rozpoczęła projektowanie jądra będącego ulepszoną wersją procesora MOS 6502 firmy MOS Technology. Acorn produkował w tym czasie komputery w oparciu o mikroprocesor MOS 6502, więc celem projektu było opracowanie nowego potężniejszego mikroprocesora programowalnego w podobny sposób.
Pierwsza wersja testowa, nazywana ARM1, opracowana została w 1985 roku, a rok później ukończono wersję produkcyjną ARM2.
ARM2 wyposażony był w 32-bitową szynę danych, 26-bitową przestrzeń adresową oraz w szesnaście 32-bitowych rejestrów. Był to w tym czasie najprostszy szeroko stosowany 32-bitowy mikroprocessor, zawierający tylko 30 tysięcy tranzystorów. Prostota wynikała głównie z braku mikrokodu i, jak w większości procesorów w tym czasie, braku cache. ARM2 miał z tego powodu bardzo niski pobór mocy i jednocześnie szybkość przetwarzania większą od procesora Intel 80286.
Następna wersja ARM3 produkowana była z 4 KB cache, co jeszcze bardziej poprawiło wydajność.
W późnych latach osiemdziesiątych XX w. przedsiębiorstwoApple Computer rozpoczęło współpracę z Acorn Computers w projektowaniu nowszej wersji jądra ARM. Projekt był na tyle istotny, że Acorn wydzielił grupę projektową tworząc w 1990 roku Advanced RISC Machines (ARM Ltd.).
Wynikiem tej współpracy był procesor ARM6, udostępniony w roku 1990. Apple użył opartego na ARM6 procesora ARM610 w palmtopie (PDA) o nazwie Apple Newton.
Jądro procesora ARM6 zawiera około 35 tysięcy tranzystorów i jest tylko niewiele większe od jądra ARM2 (30 tysięcy tranzystorów). Dzięki swej prostocie jądro ARM może być łączone z dodatkowymi blokami funkcjonalnymi, tworząc w jednej obudowie, mikroprocesor dostosowany do konkretnych wymagań.
Jest to możliwe, gdyż podstawą działalności ARM Ltd. jest sprzedaż licencji na zaprojektowane jądra.
Dzięki temu powstały także mikrokontrolery oparte na architekturze ARM.
DEC zakupiło licencję na architekturę ARM i na jej podstawie zaprojektowało procesor StrongARM. Przy częstotliwości 233 MHz procesor ten pobierał tylko 1 W mocy (najnowsze wersje StrongARM pobierają znacznie mniej). Projekt ten został następnie przejęty przez Intel, na podstawie umowy między przedsiębiorstwami. Dla Intel była to szansa na zastąpienie przestarzałej architektury i960 nową architekturą StrongARM. Na podstawie StrongARM Intel zaprojektował bardzo wydajny mikroprocesor o nazwie XScale.
Architektura
Zgodnie z założeniami architektury RISC, rozkazy procesorów ARM są tak skonstruowane, aby wykonywały jedną określoną operację i były przetwarzane w jednym cyklu maszynowym.
Interesującą zmianą w stosunku do innych architektur jest użycie 4-bitowego kodu warunkowego na początku każdej instrukcji. Dzięki temu każda instrukcja może być wykonana warunkowo. Ogranicza to przestrzeń dostępną, na przykład, dla instrukcji przeniesień w pamięci, ale z drugiej strony nie ma potrzeby stosowania instrukcji rozgałęzień dla kodu zawierającego wiele prostych instrukcji warunkowych. Klasycznym przykładem jest implementacja algorytmu Euklidesa wyznaczania największego wspólnego dzielnika.
W asemblerze procesora ARM będzie miała postać następującej pętli:
loopCMPRi,Rj; porównaj i z j, ustawiając flagi warunkowe:; - "GT" dla (i > j) ; - "LT" dla (i < j) ; - "NE" dla (i != j) SUBGTRi,Ri,Rj; jeśli "GT" (większa niż ang. greater than), wykonaj i := i - j; SUBLTRj,Rj,Ri; jeśli "LT" (mniejsza niż ang. less than), wykonaj j := j - i; BNEloop; jeśli "NE" (nie równe ang. not equal), wykonaj skok do etykiety 'loop'
W powyższym kodzie nie widać rozgałęzień dla instrukcji if oraz else.
Inną unikatową cechą zestawu instrukcji procesora ARM jest łączenie operacji przesunięcia i obrotu bitów w rejestrze z instrukcjami arytmetycznymi, logicznymi, czy też przesłania danych z rejestru do rejestru. Dzięki temu wyrażenie języka C „a += (j << 2);” może zostać przetłumaczone przez kompilator w pojedynczą instrukcję asemblera.
Przedstawione cechy powodują, że typowy program zawiera mniej linii kodu niż w przypadku innych procesorów RISC. W rezultacie jest mniejsza liczba operacji pobrania/zapisania argumentów instrukcji, więc potokowość jest bardziej efektywna. Pomimo że procesory ARM są taktowane zegarem o stosunkowo niskiej częstotliwości są konkurencyjne w stosunku do znacznie bardziej złożonych procesorów.