Wykład 5 Architektura ARM Plan wykładu • ARM – co to jest? – od historii od dzisiaj • Wersje architektury – ARMv1 – ARMv7 • Rodziny obecnie w użyciu – ARM7 – Cortex-A9 • Listy instrukcji – ARM, Thumb, Thumb-2, NEON, Jazelle ARM - historia The ARM is a 32-bit reduced instruction set computer (RISC) instruction set architecture (ISA) developed by ARM Holdings ARM - historia • Architektura ARM powstała w latach 80-tych ubiegłego wieku • Została wymyślona przez firmę Acorn RISC Machine • Jest „następcą” procesora 6502 znanego z Commodore 64 • Prawdziwy „rozkwit” zaczął się pod koniec lat 90-tych ARM - historia • Dzięki swojej prostocie i wydajności znalazła „swoje miejsce” w aplikacjach typu telefony komórkowe • Obecnie około 90% stosowanych procesorów 32-bitowych typu RISC to procesory z jądrem ARM • Procesory ARM stosowane są od mało wydajnych układów sterujących do komputerów typu netbook ARM – główne cechy • Architektura 32-bitowa • Procesor o zredukowanej liczbie instrukcji RISC • Wspólna magistrala danych i programu (von Neumana) dla wersji prostszych • Rozdzielone magistrale dla wersji szybszych • Dostępny szeroki wachlarz wersji o różnym stopniu skomplikowania i różnej wydajności • Kolejka rozkazów ARM – Warianty architektury • ARM v1 (rodzina ARM1): – pierwsza wersja procesora ARM – adresowanie 26-bitowe – brak mnożenia/ koprocesora • ARM v2 (rodzina ARM2): – pierwsza wersja komercyjna – dodane instrukcje mnożenia 32-bit – dodane wsparcie dla koprocesora ARM – Warianty architektury • ARM v2a (rodzina ARM3): – pierwsze użycie pamięci cache (4kB) – do 12 MIPS przy 25 MHz • ARM v3 (rodzina ARM6 oraz ARM7): – adresowanie 32-bit – dodane magistrale do pamięci cache oraz koprocesora – dodany kontroler pamięci (ARM7500FE) – do 40 MIPS przy 56 MHz ARM – Warianty architektury • ARM v4 (rodzina ARM7TDMI, ARM8, ARM9): – 3-stage and 5-stage pipelining – Instrukcje Thumb – przewidywanie pętli – układy kontroli pamięci MPU lub MMU – duża wydajność przy stosunkowo prostej konstrukcji – do 200 MIPS przy 200 MHz (StrongARM) – wariant najpopularniejszy i ciągle wykorzystywany ARM – Warianty architektury • ARM v5 (rodzina ARM7TDMI, ARM9, ARM10): – 6-stage and 7-stage pipelining – instrukcje Thumb – instrukcje Jazelle – instrukcje rozszerzone DSP – wielopoziomowy cache – bardzo duża wydajność – do 1000 MIPS przy 1250 MHz (XScale) – wariant bardzo popularny i ciągle wykorzystywany ARM – Warianty architektury • ARM v6 (rodzina ARM11, Cortex-M0, Cortex-M1): – 8-stage and 9-stage pipelining – instrukcje Thumb-2 – instrukcje Jazelle – instrukcje rozszerzone DSP – SIMD – wielopoziomowy cache – duża wydajność – optymalizowany pod kątem danych audio i wideo ARM – Warianty architektury • ARM v7 (rodzina Cortex z wyłączeniem: Cortex-M0, Cortex-M1): – 13-stage pipelining – instrukcje Thumb-2 – instrukcje Jazelle – instrukcje rozszerzone DSP – sprzętowe mnożenie i dzielenie stało i zmiennoprzecinkowe – MultiCore (1-4 rdzeni) – SIMD (NEON) – do 16 instrukcji w jednym czasie – wielopoziomowy cache – ogromna wydajność (do 10000 MIPS!!!) – przyszłość architektury ARM dostępna już teraz ARM 7 TDMI ARM7TDMI • Główne cechy: – Obecnie podstawowa rodzina z grupy ARM – 32-bitowy RISC o małym poborze mocy – Architektura von Neumanna – 3-poziomowa kolejka – Dwa zbiory instrukcji: 32-bitowy ARM oraz 16-bitowy Thumb – 7 trybów pracy – Operacje na danych: •8-bitowych (byte) •16-bitowych (halfword) •32-bitowych (word) – TDMI jest skrótem od: Thumb, Debug, Multiplier, Interrupts ARM7TDMI Architektura głównego rdzenia ARM7TDMI Diagram funkcyjny ARM7TDMI – tryby pracy • User (usr): normalny tryb pracy • FIQ (fiq): tryb transmisji danych (fast irq, transfer typu DMA) • IRQ (irq): tryb obsługi przerwań • Supervisor (svc): tryb chroniony dla wsparcia systemów operacyjnych • Abort mode (abt): tryb błędu • System (sys): tryb użytkownika uprzywilejowanego • Undefined (und): tryb instrukcji niezdefiniowanej ARM7TDMI – rejestry • 37 rejestrów • dostępna ilość zależy od trybu pracy • R15 jest zawsze licznikiem programu • R13 jest zawsze wskaźnikiem stosu ARM7TDMI – rozkazy ARM • Istnieją dwie listy rozkazów: pełna (ARM) i uproszczona (Thumb) • Lista ARM jest zbiorem poleceń 32-bitowych – każde polecenie ma długość 32 bitów • Polecenia zajmują dużo miejsca w pamięci • Każde z poleceń może być wykonywane warunkowo • Wynik operacji może być od razu dostępny z przesunięciem • Istnieje 5 trybów adresowania • Każdy z trybów adresowania posiada kilka opcji ARM7TDMI – rozkazy ARM ARM7TDMI – rozkazy ARM ARM7TDMI – rozkazy Thumb • Lista Thumb jest zbiorem poleceń 16-bitowych – każde polecenie ma długość 16 bitów • Jest to podzbiór listy ARM • Polecenia zajmują mało miejsca w pamięci • Tylko niektóre z poleceń mogą być wykonywane warunkowo • Operacje na danych są w dalszym ciągu 32-bitowe • W liście Thumb wykorzystane są jedynie rejestry R0R7 • Tylko instrukcje specjalne wykorzystują rejestry R8R15 • Każda instrukcja ma odwzorowanie w liście ARM ARM7TDMI – rozkazy Thumb ARM7TDMI – rozkazy Thumb ARM7TDMI – Virtual Memory System • Blok VMSA służy do przydzielania rozdzielnych (wirtualnych) przestrzeni adresowych dla różnych aplikacji (procesów) • Procesy mają przydzielaną pamięć z wykorzystaniem układu MMU (Memory Management Unit) • W układzie MMU tłumaczenie adresów wirtualnych na fizyczne odbywa się poprzez tablice TLB (Translation Lookaside Buffers) ARM7TDMI – Virtual Memory System ARM7TDMI – Protected Memory System • Blok PMSA służy do przydzielania rozdzielnych (wirtualnych) przestrzeni adresowych dla różnych aplikacji (procesów) • Procesy mają przydzielaną pamięć z wykorzystaniem układu MPU (Memory Protection Unit) • Efekt działania PMSA podobny do VMSA ale prostsza konstrukcja sprzętu i oprogramowania • Brak adresów wirtualnych • Konkretne procesy mają dostęp tylko do określonych obszarów pamięci ARM7TDMI – Protected Memory System ARM7TDMI – Vector Floating Point • VFP jest koprocesorem arytmetycznym służącym do operacji zmiennoprzecinkowych pojedynczej i podwójnej precyzji • Istnieje kilka wersji: w ARM7TDMI – VFPv2 (VFP9), w Cortex’ach – VFPv3 (VFP10, VFP11) • Pełna kompatybilność z IEEE754 • Zrównoleglenie wykonywania operacji najbardziej czasochłonnych w celu zwiększenia wydajności • Trzy oddzielne kolejki instrukcji – więcej niż jedna instrukcja wykonywana naraz ARM7TDMI – Vector Floating Point • VFPv2 wspiera wykonywanie krótkich instrukcji wektorowych • Do 8 operacji na danych pojedynczej precyzji na raz • Do 4 operacji na danych podwójnej precyzji na raz • Krótkie instrukcje wektorowe są najbardziej użyteczne w aplikacjach graficznych i przetwarzania sygnałów • Pozwalają na zwiększenie wydajności przy jednoczesnym zmniejszeniu kodu Cortex-M Cortex-R Cortex-A Rodzina Cortex • Obecnie korporacja ARM silnie wprowadza na rynek rodzinę Cortex • Rodzina ta składa się z trzech podrodzin: – Cortex-M – rdzenie przewidziane do mikrokontrolerów i aplikacji typu cost-sensitive; Rdzenie wspierają instrukcje Thumb-2; – Cortex-R – rdzenie przewidziane do aplikacji systemów czasu rzeczywistego real-time systems; Rdzenie wspierają instrukcje ARM, Thumb oraz Thumb-2 – Cortex-A – rdzenie najbardziej złożone i wydajne, przewidziane do wydajnych urządzeń multimedialnych; Rdzenie wspierają instrukcje ARM, Thumb oraz Thumb-2 Cortex-M Cortex-M • Główne cechy: – Procesor 32-bitowy – Kolejka instrukcji 3 stopniowa – Lista instrukcji Thumb-2 – bardzo zwarty kod przy dużej wydajności – Wiele trybów i domen oszczędzania energii – Nested Vectored Interrupt Controller – dobrze zdefiniowane czasy i sposoby wywoływania przerwań – Wsparcie dla systemów RTOS – Wsparcie dla debuggerów (JTAG, SWD – Serial Wire Debug) Cortex-M0 • Główne cechy: – Najuboższa wersja procesorów ARM – Jednocześnie też najbardziej oszczędna – jedynie 85µW/MHz – Kompatybilność z wersją Cortex-M3 – Struktura składa się z zaledwie 12000 bramek – Tylko 56 instrukcji optymalizowanych pod kątem języka C – Wsparcie dla nisko-mocowej komunikacji bezprzewodowej: Bluetooth Low Energy (BLE), ZigBee, itp. – Wydajność 0.9 DMIPS/MHz – Instrukcja mnożenie 32x32 w jednym cyklu – Opóźnienie wywołania przerwań: 16 cykli Cortex-M1 • Główne cechy: – Rdzeń procesora przewidziany do osadzenia w strukturze FPGA – Wsparcie dla układów firm Actel, Altera oraz Xilinx – Łatwa migracja z układów FPGA (development) to ASIC (production) Cortex-M3 • Główne cechy: – Wprowadzony na rynek w 2004 roku – Przewidziany do najbardziej wydajnych mikrokontrolerów – Wysoka wydajność i bogactwo cech – Mały pobór prądu (12.5 DMIPS/mW) – Do 240 źródeł przerwań!!! – Wsparcie dla szeregu protokołów szeregowych – Wydajność 1.25DMIPS/MHz – Wsparcie dla operacji na bitach – Mnożenie 32x32 w jednym cyklu, dzielenie w 2-12 cyklach – Kolejka instrukcji (3 stopnie) plus przewidywanie skoków – Kontrola pamięci (MPU) – Prędkość działania: do 275 MHz /340 DMIPS Cortex-M4 • Główne cechy: – Najbogatsza wersja rodziny Cortex-M – Przewidziane do zastosowań nisko-mocowego przetwarzania sygnałów – Połączenie 32-bit mikrokontrolera i procesora DSP – Instrukcje DSP: • jednocyklowe 16,32-bit MAC • jednocyklowe 2x16-bit MAC • 8,16-bit arytmetyka SIMD • dzielenie sprzętowe (2 – 12 cykli) – Jednostka FPU o pojedynczej precyzji – Pozostałe cechy jak w Cortex-M3 – Prędkość działania: do 300 MHz /375 DMIPS Cortex-A9 Single core Cortex-A9 Cortex-A9 • Główne cechy: – Najbogatsza wersja rodziny Cortex-A – Następca wysokowydajnej rodziny ARM11 – Przewidziane do zastosowań w procesorach o dużej i bardzo dużej mocy obliczeniowej – Możliwe wersje jedno- i wielordzeniowe – Praca z zegarem do 2GHz – Możliwość bloków NEON oraz FPU – Prędkość działania: do 5000 DMIPS na rdzeń – Dostępne wersje optymalizowane pod kątem prędkości lub zużycia energii Cdn...