Architektura ARM

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania
Mikroprocesor w architekturze ARM firmy Conexant, używany głównie w routerach

Architektura ARM (Advanced RISC Machine, pierwotnie Acorn RISC Machine) – 32-bitowa oraz 64-bitowa (Apple A7, 2013 r.) architektura (model programowy) procesorów typu RISC.

Różne wersje rdzeni ARM są szeroko stosowane w systemach wbudowanych (ang. embedded systems) 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-bitowych CPU dla systemów wbudowanych. Najbardziej udanym projektem ARM był rdzeń ARM7TDMI szeroko stosowany w telefonach komórkowych. Moc obliczeniowa architektury ARM umożliwia instalacje na procesorze wykorzystującym tę technologię m.in. 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 takich systemów: Windows CE, FreeBSD, NUTOS(Ethernut) i wiele dystrybucji Linuksa opatrzonym hasłem embedded (Embedded Debian, Embedded Ubuntu).

Historia[edytuj | edytuj kod]

Projektowanie pierwszego procesora ARM rozpoczęło się w 1983 roku, jako projekt rozwojowy brytyjskiej firmy Acorn Computers Ltd. Grupa inżynierów kierowana przez Rogera Wilsona 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 4KB cache, co jeszcze bardziej poprawiło wydajność.

W późnych latach osiemdziesiątych firma Apple Computer rozpoczęła 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 nową firmę o nazwie Advanced RISC Machines (ARM Ltd.). Wynikiem tej współpracy był procesor ARM6, udostępniony w roku 1990. Firma Apple użyła 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.

Firma DEC zakupiła licencję na architekturę ARM i na jej podstawie zaprojektowała procesor StrongARM. Przy częstotliwości 233 MHz procesor ten pobierał tylko 1W mocy (najnowsze wersje StrongARM pobierają znacznie mniej). Projekt ten został następnie przejęty przez firmę Intel, na podstawie umowy procesowej między obiema firmami. Dla Intela 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[edytuj | edytuj kod]

Zgodnie z założeniami architektury RISC, rozkazy procesorów ARM są tak skonstruowane, aby wykonywały jedną określoną operacje 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.

Funkcja w języku C wyglądająca tak:

    while (i != j)
    {
       if (i > j)
           i -= j;
       else
           j -= i;
    }

W asemblerze procesora ARM będzie miała postać następującej pętli:

 
 loop    CMP    Ri, Rj       ; porównaj i z j, ustawiając flagi warunkowe:
                            ;   - "GT" dla (i > j) 
                            ;   - "LT" dla (i < j)    
                            ;   - "NE" dla (i != j)        
        SUBGT  Ri, Ri, Rj   ; jeśli "GT" (większa niż ang. greater than), wykonaj i := i - j;  
        SUBLT  Rj, Rj, Ri   ; jeśli "LT" (mniejsza niż ang. less than), wykonaj j := j - i; 
        BNE    loop         ; jeśli "NE" (nie równy 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.

Dostępne wersje[edytuj | edytuj kod]

Producenci[edytuj | edytuj kod]

Zobacz też[edytuj | edytuj kod]

Przypisy

  1. AMD wprowadza pierwszy procesor w architekturze ARM!. Chip, 2014-01. [dostęp 2014-01-29].
  2. Analog Microcontrollers (ang.). [dostęp 2014-07-17]. [zarchiwizowane z adresu 2014-07-12].
  3. CM4xx Mixed Signal Control Processors (ang.). [dostęp 2014-07-17]. [zarchiwizowane z adresu 2014-07-12].
  4. Atmel SMART ARM-based MCUs (ang.). [dostęp 2014-07-17]. [zarchiwizowane z adresu 2014-07-12].
  5. 32-bit Industrial Microcontroller based on ARM® Cortex™-M (ang.). [dostęp 2014-07-17]. [zarchiwizowane z adresu 2014-06-29].
  6. ARM9™ MPUs (ang.). [dostęp 2014-06-17]. [zarchiwizowane z adresu 2014-06-26].
  7. ARM Cortex™-M4 MCUs (ang.). [dostęp 2014-07-17]. [zarchiwizowane z adresu 2014-06-26].
  8. STM32 32-bit ARM Cortex MCUs (ang.). [dostęp 2014-07-17]. [zarchiwizowane z adresu 2014-07-12].
  9. SPEAr 32-bit eMPUs (ang.). [dostęp 2014-07-17]. [zarchiwizowane z adresu 2014-03-19].

Linki zewnętrzne[edytuj | edytuj kod]