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 R0- R7 Tylko instrukcje specjalne wykorzystują rejestry R8- R15 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...