You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ARMv1 proof of concept, funkční hned první "várka"
ARMv2 Acorn Archimedes, 1982
ARMv3
ARMv4 StrongARM
ARMv5
ARMv6 Starší (univerzální) čipy, dnes RPI apod.
ARMv6-M Mikrořadič
ARMv7-M Mikrořadič
ARMv7E-M Mikrořadič
ARMv7-R Real-time aplikace
ARMv7-A netbooky, smartphony, tablety, čtečky, desktop
ARMv8-A servery
Rodina ARM1
Architektura ARMv1
Jádro ARM1
První implementace jádra ARM
Bez HW násobičky
Bez MMU a bez cache
Proof of concept
Nebyl použit v žádném komerčním produktu
Rodina ARM2
Architektura ARMv2
Jádro ARM2
První komerčně používané čipy ARM
Novinky architektury ARMv2
Oproti ARM1 byla přidána HW násobička
Základní parametry
Typická frekvence 8 MHz
Výkon přibližně 4 MIPS
Rodina ARM2 (pokr.)
Architektura ARMv2a
Založeno na ARMv2 (původně jádro ARM2)
Nyní jádro A250
Novinky architektury ARMv2a
Jádro A250
Integrovaná jednotka MMU
Nové instrukce
Grafický I/O procesor
Základní parametry
Frekvence až 12 MHz
Výkon průměrně 7 MIPS
Rodina ARM3
Stále architektura ARMv2a
Jádro ARM3
Postupně rostoucí hodinová frekvence
ARM250: 12 MHz
ARM3: 25 MHz
Operační paměť se stává úzkým hrdlem architektury
Řešení typické pro RISC: použití cache
4 kB cache v případě jádra ARM3 (D+I)
Základní parametry
Frekvence až 25 MHz
Výkon průměrně 12 MIPS
Rodina ARM6
Architektura ARMv3
Novinky rodiny ARM6
Podpora pro plně 32bitové adresování
(dříve 24, 26 bitů)
Volitelná cache podle jádra (0, 4 kB)
Základní parametry
Frekvence až 33 MHz
Výkon průměrně 28 MIPS
V některých zařízeních stále používán
Rodina ARM7
Velmi úspěšná rodina čipů ARM
Novinky rodiny ARM7
JTAG (ARM7DI)
Snazší ladění, hw breakpointy...
Thumb 16bit (u čipů s „T“ v názvu)
ARM7-TDMI
MMU (v závislosti na čipu)
Cache 8 kB (v závislosti na čipu)
Rodina StrongARM
Architektura ARMv4
Společnost DEC + Adv. ARM Machines
Později prodáno firmě Intel
Náhrada za i860 a i960
StrongARM → XScale
Zaměření čipu
PDA
Set-top boxy
(Apple MessagePad 2000)
(Acorn Computers RISC PC)
Hodinové frekvence 100..233 MHz
ARM ve funkci mikrořadiče
Cortex-M0
Cortex-M0+
Cortex-M1
Cortex-M3
Arduino Due
Cortex-M4
Cortex-M7
Jádra v řadě Cortex-Mx
Jádro Architektura
Cortex-M0 ARMv6-M Von Neumann
Cortex-M0+ ARMv6-M Von Neumann
Cortex-M1 ARMv6-M Von Neumann
Cortex-M3 ARMv7-M Harvardská
Cortex-M4 ARMv7E-M Harvardská
Cortex-M7 ARMv7E-M Harvardská
Jádra v řadě Cortex-Mx (pokr.)
Jádro Dělička DSP Thumb Thumb-2
Cortex-M0 ne ne kromě 3 instrukcí částecně
Cortex-M0+ ne ne kromě 3 instrukcí částecně
Cortex-M1 ne ne kromě 3 instrukcí částecně
Cortex-M3 ano ne kompletně kompletně
Cortex-M4 ano ano kompletně kompletně
Cortex-M7 ano ano kompletně kompletně
Cortex-M0
Jádro "naprogramované" ve Verilogu
ARM čipy s nejnižší cenou, rozměry, výkonem, příkonem
Malá plocha čipu
Nejmenší čip má rozměry 1,6x2 mm
Pipeline se třemi řezy
Instrukční sada
Thumb (chybí jen tři instrukce)
částečně Thumb-2
Nikoli A32!
M0 je skutečný mikrořadič
Náhrada za některé 8bitové a 16bitové MCU
von Neumannova architektura
Násobička
jednocyklová (high perf. čipy)
32cyklová (čipy s nižší cenou a příkonem)
Power management
Režim sleep (CLK=0 Hz)
Režim deep sleep (vypnutí flash paměti apod.)
Cortex-M0+
Kompatibilní s M0
Ještě menší spotřeba
Pipeline se dvěma řezy (tři v M0)
MCU a Thumb?
Je strojový kód RISCových procesorů skutečně prostorově neefektivní?
PIC16 a PIC18
14bitové a 16bitové instrukce
osmibitové operandy
8051
8, 16, 24 bitů/instrukci
většinou jen osmibitové operandy
Thumb
16 a 32 bitů/instrukci
32bitové operandy
Cortex-M7
Nejvýkonnější řada DSP
Superskalární, 6řezová pipeline
Prediktor skoků
MAC s 16/32bitovými operandy v jednom cyklu
HW dělička (2-12 cyklů)
Floating point
single
double
SIMD
D-cache až 64kB
I-cache až 64kB
TCM
Tightly Coupled Memory
ECC
Režimy Sleep a Deep Sleep
ARM pro spotřební elektroniku
Cortex-A
32bitové CPU
2005 Cortex-A8
2007 Cortex-A9
2009 Cortex-A5
2010 Cortex-A15
2011 Cortex-A7
2013 Cortex-A12
2014 Cortex-A17
64bitové CPU
2012 Cortex-A53
2012 Cortex-A57
2015 Cortex-A72
ARM pro real-time aplikace
Cortex-R4
Cortex-R5
Cortex-R7
Poměrně výkonná jádra
Cortex-R4 1,4 GHz
DSP
HW dělička
SIMD
FPU
Mikroprocesory ARM s 64bitovou architekturou
32bitů -> 64bitů
Pravděpodobně největší změna v architektuře procesorů ARM v celé jejich historii
Velké odlišnosti, nutnost překladu pro novou architekturu
Změna označování
Původní architektura: AArch32 (málokdy využíváno)
Nová architektura: AArch64
Proč AArch64?
Nové možnosti nasazení těchto procesorů
"Od topinkovačů po superpočítače" :-)
Požadavky zákazníků
Nutnost dobrého načasování
Konec roku 2011
Větší virtuální paměťový prostor
Nativní práce s 64bitovými hodnotami
Zjednodušení pro vývojáře i autory překladačů/VM
Čistý návrh load/store RISC
Jen několik instrukcí obsahuje podmínku
Větší množina dostupných registrů
Rodina ARMv8-A
Zaručena zpětná kompatibilita s ARMv7-A
Podporuje AArch32 i AArch64
Současné čipy ARMv8-A
Cortex-A53
Cortex-A57
Cortex-A72
ARM32 z pohledu programátora
Architektura typu Load-Store
Pro efektivní práci nutný velký počet registrů
Omezení přístupů do pomalé paměti
Alokace registrů → optimalizující překladač
Řešení
27/37 registrů
30 pracovních, PC, CPSR, 5xSPSR
15 registrů viditelných r0..r14
r13 Stack Pointer
r14 Link Register
Šířka registrů 32 bitů
Rozdělení do banků, které se překrývají
Pro každý stav procesoru zvláštní bank
Instrukční sady procesorů ARM
A32
32bitové instrukce, 32bitové operandy
Thumb (T32)
16bitové instrukce
Thumb-2
Mix 16 a 32bitových instrukcí
A64
32bitové instrukce, 64bitové operandy
Instrukční sada A32
Původní instrukční sada procesorů ARM
Konstantní šířka instrukcí 32bitů
Šířka zpracovávaných dat taktéž 32 bitů
Problém s načítáním konstant
Musí se řešit na každé architektuře RISC
Typy instrukcí
Load-store (jeden registr)
Load-store (více registrů)
Aritmetické operace
Logické a bitové operace
Skoky a změna režimu procesoru
Práce se stavovými registry CPSR a SPSR
Práce se semafory
Instrukce koprocesoru(ů)
Vlastnosti ISA typické pro ARM
Vykonání instrukce na základě příznaků
N - negative
V - overflow
Z - zero
C - carry
Q - sticky (ARMv5 a výše)
Lze odstranit některé skoky
Lze zvolit, které příznaky se mají nastavit
U mnoha instrukcí lze druhý operand
Posunout
Zrotovat
Velmi často používaný příklad
intgcd(inta, intb) {
while (a!=b) {
if (a>b) a=a-b;
elseb=b-a;
}
returna;
}
Klasický přístup
gcd CMP r0, r1
BEQ end
BLT less
SUB r0, r0, r1
B gcd
less
SUB r1, r1, r0
B gcd
end