Architektura procesorów ARM
Transkrypt
Architektura procesorów ARM
Programowanie mikroprocesorów jednoukładowych Architektura procesorów ARM Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 1 / 30 Plan I Podział procesorów Tryby User mode System mode Supervisor mode Abort mode Undefined mode IRQ mode FIQ mode Hyp mod Monitor mode Vector Table Memory Management Stosowane technologie Płyta prototypowa Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 2 / 30 Rdzenie x 7 9 10 11 y z 1 2 3 4 5 6 7 0 2 6 8 Mariusz Naumowicz Opis ARM7 core version ARM9 core version ARM10 core version ARM11 core version Cache, write buffer and MMU Cache, write buffer and MMU, Process ID support Physically mapped cache and MMU Cache, write buffer and MPU Cache, write buffer and MPU, error correcting memory No cache, write buffer AXI bus, physically mapped cache and MMU Stadard cache size Reduced cache size Tightly Coupled Memory As for ARM966 Programowanie mikroprocesorów jednoukładowych Przykład ARM7 ARM9 ARM10 ARM11 ARM710 ARM920 ARM1136 ARM940 ARM1156 ARM966 ARM1176 ARM920 ARM1022 ARM1156 ARM968 23 listopada 2016 3 / 30 Atrybuty Atrybut D E Opis Wsparcie debuggowania przez JTAG, automatyczny atrybut dla ARMv5 i wyższych Wsparcie DSP, automatyczny atrybut dla ARMv6 i wyższych F I J M T -S Sprzętowe wsparcie dla instrukcji zmiennoprzecinkowych dzięki koprocesorowi VFP. Wsparcie sprzętowe dla breakpoint i watchpoint, automatyczny atrybut dla ARMv5 i wyżs Wsparcie dla Jazelle Java acceleration technology Wsparcie dla długich instrukcji mnożenia, automatyczny atrybut dla ARMv5 i wyższych Wsparcie dla zestawu instrukcji Thumb, automatyczny atrybut dla ARMv5 i wyższych procesor używa resyntezowalną elektronikę. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 4 / 30 Rejestry procesora ARM User R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 Mariusz Naumowicz Supervisor R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 SCV R14 SCV R15 Abort R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 abt R14 abt R15 Undefined R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 und R14 und R15 IRQ R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 IRQ R14 IRQ R15 Programowanie mikroprocesorów jednoukładowych FIQ R0 R1 R2 R3 R4 R5 R6 R7 R8 FIQ R9 FIQ R10 FIQ R11 FIQ R12 FIQ R13 FIQ R14 FIQ R15 23 listopada 2016 5 / 30 Tryby I User Mode I System Mode I Supervisor Mode I Abort Mode I Undefined Mode I IRQ Mode I FIQ Mode I Hyp Mode I Monitor Mode Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 6 / 30 User mode Zazwyczaj uruchamia programy. W tym trybie pamięć jest chroniona (pod warukiem, że procesor posiada jednostkę MMU lub MPU). Większość programów i aplikacji całkowicie działa w tym trybie. Jeżeli program musi używać innego trybu musi wykorzystać SVC. Zewnętrze zdarznia takie jak np. przerwania mogą także zmieniać tryb. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 7 / 30 System mode Tryb ten może być uruchomiony jedynie przez wywołanie specyficznej instrukcji, która ustawi odpowiedni bit w rejestrze CSPR. Tryb ten wykorzystuje rejestry trybu User mode i używa ich do uruchomienia zadań, które wymagają uprzywilejowanego dostępu do pamięci i koporcesorów bez ograniczeń wywołujących wyjątki. Często wykorzystywany ejst do obłsugi zagnieżdżonych wyjątków oraz wywołań SVC. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 8 / 30 Supervisor mode Supervisor mode jest uprzywilejowanym trybie który jest uruchmiany wtedy gdy CPU jest resetowany oraz kiedy zostaje wykonana instrukcja SVC. Jądra systemów są uruchamiane w tym trybie w celu konfiguracji urządzeń wymagających urzpwilejowanych stanów, przed uruchomieniem aplkacji, które nie wymagają uprzywilejowanych stanów. Niektóre programy typu bare metal zazwyczaj całkowicie korzystają z tego trybu. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 9 / 30 Abort mode Abort mode jest uprzywilejowanym trybem wywoływany jest wtedy gdy występią wyjątki Prefetch ABort lub Data Abort. Oznacza to, że procesor nie miał dostępu do jakiś zasobów pamięciowych z jakiegoś powodu. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 10 / 30 Undefined mode Undefined mode jest uprzywilejowanym trybie, który występuje gdy nastąpi wyjątek Undefined Instruction. Normalnie występuje gdy rdzeń ARMa poszuje instrukcji w złym miejscu (uszkodzoy PC) lub jest pamięć jest uszkodzona. Zdarza się także gdy ARM nie wspiera specyficznej intrukji, dla przykładu gdy wykonuje intrukjcę VFP na rdzeniu nie bosługjących instrukcji VFP. Niezidentyfikowana instrukcja jest wyłapywana i uruchamiana programowo, poprzez emulację VFP. Undefined mode może również wystąpić przy błędzie koprocesora koprocesor jest obecny ale nieuruchomiony. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 11 / 30 IRQ mode IRQ mode jest uprzywilejowanym trybem uruchamianym podczas akceptacji przerwania IRQ przez procesor. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 12 / 30 FIQ mode FIQ mode jest uprzywilejowanym trybem uruchamianym podczas uruchamiania obsługi przerwania FIQ. W trybie tym rejestry r8 do r12 są zchowywane, oznacza to, że są dostępne do użytku bez wcześniejszego zapisywania ich zawartości. Przy powroci to poprzedniego trybu, zawartość rejestrów jest przywracany do ich orginalnego stanu. Posiadanie prywatnych rejestrów pozwala na oszczędzenie czasu podczas przełączania kontekstu. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 13 / 30 Hyp mod Hyp mode został wprowadzony w ARMv7-A dla prcesorów Cortex-A15 (oraz późniejszych) wprowadzając sprzętową wspracie wirtualizacji. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 14 / 30 Monitor mode Monitor mode jest specjalnym trybem używanym do debuggowania, but with the advantage of not stopping the core entirely. The major advantage is the possibility for other modes to be called — in monitor mode, the core can be interrogated by the debugger but still respond to critical interrupt routines. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 15 / 30 Vector Table I Tabela ta jest częścią pamięci zarezerwowaną dla procesora szukającego informacji podczas wejścia w specyficzny tryb pracy. Klasyczny model jest używany w wersjach przed Cortexami oraz obecnych Cortex-A/R. W miejscu o adresie 0 zawiera kilka adresów do podprogramów uruchamiających dany tryb. Typowa tablica wektorów wygląda następująco: 1 2 3 4 5 6 7 8 00000000 00000004 00000008 0000000C 00000010 00000014 00000018 0000001C LDR LDR LDR LDR LDR NOP LDR LDR PC , PC , PC , PC , PC , =R e s e t =Undef =SVC =P r e f A b o r t =DataAbort PC , =IRQ PC , =FIQ W procesorach Cortex-M wygląda to trochę inaczej. Wektor zawiera adresy a nie instrukcje. Pierwsze wpisy w tablicy wektorów w Cortex-M mogą wyglądać następująco: Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 16 / 30 Vector Table II 1 2 3 4 5 6 7 __Vectors DCD DCD DCD DCD DCD DCD DCD __initial_sp Reset_Handler NMI_Handler HardFault_Handler MemManage_Handler BusFault_Handler UsageFault_Handler ; ; ; ; ; ; ; Top o f S t a c k Reset Handler NMI H a n d l e r Hard F a u l t H a n d l e r MPU F a u l t H a n d l e r Bus F a u l t H a n d l e r Usage F a u l t H a n d l e r To oznaczna, że Cortex-M może wykorzystywać całą przestrzeń pamięci, a nie tylko pamięć ograniczoną do wykonywania komend skoku. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 17 / 30 Memory Management I Zarządzanie pamięcią jest wykonywana przy pomocy Memory Management Unit (MMU), która umożliwia kontrolowania mapowania pamięci pomiędzy adresami wirtualnymi, a adresami fizyczymi, pozwalającymi na przezroczysty dostęp do różnych części pamięci. Adres generowany przez procesor ARM nazywany jest adresem wirtualnym. The MMU wtedy adresuje ten adres na adres fizyczny dając procesorowi dostęp do pamięci. Pamięci może być mapowana "płasko", czyli adres wirtualny jest wtedy równy adresowi fizycznemu. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 18 / 30 JTAG Debug (D) The Joint Test Action Group (JTAG) była grupą formującą się w 1985, której głównym celem było opracowanie metody testowania układów po wyprodukowaniu. Od tego czasu wielopowłokowe obowdy durkowane stawały się normą, a testowanie było ekstramalnie skomplikowane ponieważ większość ścieżka była niedostępna do pomiarów. JTAG był spełnioną obietnicą do testowania obwodów i wykrywania wadliwych połączeń. W 1990, Intel wypuścił na rynek procesor 80486, ze zintegrowanym wsparciem JTAG, został on szybko zaadoptowany do innych rozwiązań. Jednakże JTAG irginalnie był zaprojektowany do testowania kart komputerowych, w późniejszym czasie rozpoczęły się pracę nad innym zastosowaniem, szczegónie debuggowaniem. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 19 / 30 Enhanced DSP (E) I Z czasem jak ARM stawały się coraz popularniejsze w cyforwych urządzeniach multimedialnych, konieczne stało się przyspiszenie intrukcji procesora ARM przez dodanie instrukcji DSP, równie konieczne jak instrukcji SIMD. Cyfrowe przetwarzanie sygnału (DSP) jest metematyczną manipulacją informacji modyfikującą bądź polepszającą ja w jakiś sposób. Celem DSP jest zazwyczaj pomiar, filtrowanie, i/lub kompresja/dekomprecja rzeczywistych sygnałów świata analogowego. Dla przykładu, DPS jest używane w odtwarzaczach muzyki, nie tylko konwertując skompresowane dane cyfrowy w muzykę analogową, ale także konwertuje analogowy dzwięk do formatu cyfrowego w studiach muzycznych. Typowymi aplikacjami są kompresja audio cyfrowe przetwarzanie obrazu, przetwarzanie mowy oraz ogólna komunikacja cyfrowa. Użycie instrukcji SIMD pozwala na osiągnięcie 75 procentowego wzrostu wydajności. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 20 / 30 Vector Floating Point (F) Vector Floating Point został wprowadzomy w celu wspierania i przetwarzania sprzętowego liczb zmienno przecinkowych połowicznej, pojedycznej i podwójenj precyzji. Nazwa jednostki wzięła się z tego, że była ona przeznaczona do operacji wektorowych w systemach autonomicznych związanych z ruchem i kontrolą. Pierwszą wersją była wersja VFPv1, szybko zastąpiona przez VFPv2 w rdzeniach ARMv5TE, ARMv5TEJ, i ARMv6. VFPv3 jest opcjonalnie dostępna w ARMv7-A i ARMv7-R, używana nietylko w instrukcjach ARM ale także w Thumb i ThumbEE. Syntezowalna wersja jest dostępne pod nazwą VFP9-S, jako koprocesor w rodznie ARM9E. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 21 / 30 EmbeddedICE (I) EmbeddedICE jest potężnym środowiskiem przeznaczonym do debbugowania, rdzenie wspierające technologię EmbeddedICE zawierają makrokomórkę wewnątrz rdzenia. Makrokomórka EmbeddedICE zawiera dwie jednostki watchpoint czasu rzeczywistego real-time, które zatrzymują wykonywania instrukcji przez rdzeń. Jednostki watchpoint mogą być programowane w taki sposó, aby przerwać działania zgodnie z jakimś warunkiem, kiedy wartość odpowiada wartości szyny adresowej lub czyny danych, bądź innych sygnałów. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 22 / 30 Jazelle (J) Jazelle DBX (Direct Bytecode eXecution) technologia umożliwiająca uruchamianie kodu Java przez procesor ARM. Pierwsza implementacja tej technologi została wprowadzona w architekturze ARMv5TEJ, wraz z pierwszym procesorem ARM 926EJ-S. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 23 / 30 Long Multiply (M) Warianty M rdzenia ARM posiadają rozubodwane sprzętowe mnożenie. Wprowdza to trzy udoskonalnie względem poprzednika: I Użycie 8-bitowego algorytmu Booth’a, oznaczjącego przyspieszenie wykonywania mnożenia szybciej w maksymlanie 5 cyklach I Zastosowanie metody szybszego zakończenia, oznaczjące szybsze zkaończenie mnożenia dzięki zastosowaniu specyficznych warunków I 64-bitowe mnożenie dwóch liczb 32-bitowych stało się możliwe dzięki zapisowi rezultatów w parze rejestrów. Technologia stała się standardem rdzeni ARM dla wersji ARMv4 i wyższych, a w ARM9 wprowdzono szybszy 2 cykłowy układ mnożący. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 24 / 30 Płyta prototypowa SAM3U-EK Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 25 / 30 Komponenty i interfejsy I I układ SAM3U4E I 12 MHz rezonator I 32.768 KHz rezonator I opcjonalne złącze SMB I PSRAM I NAND Flash I Bateria zegara I kolorowy, dotykowy wyświetlacz TFT 2.8 cala I port UART I port USART I złacza we/wy audio I obsługa interfejsu SD/MMC Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 26 / 30 Komponenty i interfejsy II I akcelerometr 3-D I sensor temperatury I przyciski Reset oraz Wake-Up I programowalne przyciski Lewo oraz Prawo I port High Speed USB I port JTAG I regulacja zasialania na płycie I Dwie programowalne diody LED I Dioda LED zasilania I złącza BNC do sygnałów dla ADC I potencjometr podłączony do ADC I złącze ZigBee I 3x32 bit złącze PIO (PIOA, PIOB, PIOC) Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 27 / 30 Procesor I ARM Cortex-M3 revision 2.0 running at up to 96 MHz I Memory Protection Unit (MPU) I zestaw instrukcji Thumb-2 I 256 KB Flash, 128 bitowa szyna I 48 KB wbudanej pamięci SRAM I 16 KB ROM z wbudowanymi procedurami bootowania (UART, USB) Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 28 / 30 GameBoy Advanced I I I I I ARM7tdmi 16.78 MHz 240x160 15bit kolorowy LCD 6 kanałowy dźwięk 10 przycisków 14 przerwań sprzętowych Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 29 / 30 References C. Simmonds. Mastering Embedded Linux Programming. Packt Publishing, 2015. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 23 listopada 2016 30 / 30