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