Mikroprocesory ARM

Presentations

Mikroprocesory ARM

Obsah přednášky

Základní informace o ARM CPU

Jádro ARM

ARM + další rozšiřující moduly

Obchodní model ARM vs.Intel/AMD

Přednosti architektury ARM

Stručná historie vývoje architektury ARM

Výpočetní výkon čipů s architekturou CISC

Projekt Acorn RISC Machine

Jádra ARM1/ARM2

Výsledek - analýza+benchmarky

Výpočetní výkon však není vše

Důsledky použití architektury RISC

ARM family, architecture, core

ARM family, architecture, core

Architektury a čipy ARM

ARMv1     26/32 bitů  ARM1
ARMv2     26/32 bitů  ARM2, ARM3
ARMv3     26/32 bitů  ARM6, ARM7
ARMv4     26/32 bitů  ARM8
ARMv5     32 bitů     ARM7EJ, ARM9E, ARM10E
ARMv6     32 bitů     ARM11
ARMv6-M   32 bitů     Cortex-M0, Cortex-M0+, Cortex-M1
ARMv7-M   32 bitů     Cortex-M3
ARMv7E-M  32 bitů     Cortex-M4, Cortex-M7
ARMv7-R   32 bitů     Cortex-R4, Cortex-R5, Cortex-R7
ARMv7-A   32 bitů     Cortex-A5, Cortex-A7, Cortex-A8,
                      Cortex-A9, Cortex-A12,
                      Cortex-A15, Cortex-A17
ARMv8-A   32/64 bitů  Cortex-A53, A57 a A72

Architektury a čipy ARM - využití

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

Rodina ARM2

Rodina ARM2 (pokr.)

Rodina ARM3

Rodina ARM6

Rodina ARM7

Rodina StrongARM

ARM ve funkci mikrořadiče

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

Cortex-M0+

MCU a Thumb?

Cortex-M7

ARM pro spotřební elektroniku

ARM pro real-time aplikace

Mikroprocesory ARM s 64bitovou architekturou

Změna označování

Proč AArch64?

Rodina ARMv8-A

ARM32 z pohledu programátora

Instrukční sady procesorů ARM

Instrukční sada A32

Typy instrukcí

Vlastnosti ISA typické pro ARM

Velmi často používaný příklad

int gcd(int a, int b) {
   while (a != b) {
      if (a > b) a = a - b;
      else       b = b - a;
   }
   return a;
}

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

Využití příznaků

 gcd
        CMP      r0, r1
        SUBGT    r0, r0, r1
        SUBLT    r1, r1, r0
        BNE      gcd

Výsledky

Instrukční sada Thumb (T32)

Instrukční sada Thumb (T32)

Instrukční sada Thumb (T32)

Instrukční sada Thumb-2

Instrukční sada Thumb-2

IT

IT

CMP r0, r1
ITE EQ
MOVEQ r0, r2 ; větev "then"
MOVNE r0, r3 ; větev "else"

Instrukční sada A64

AArch64 z pohledu programátora

Operace

Multiply/divide

Skoky a rozeskoky

Instrukce s podmínkou

Podpora pro operace s FP

Crypto

Rozšíření instrukčních sad

FPA (ARM Floating Point Accelerator)

VFP

VFP

Advanced SIMD Architecture

NEON

NEON Intrinsic

gcc   -mcpu=cortex-a9 -mfpu=neon ...
clang -mcpu=cortex-a9 -mfpu=neon ...
-mtune=cortex-a5 (a8, a9)
#include <arm_neon.h>
(typ)x(lanes)_t - uint8x4_t
(typ)x(lanes)x(počet_registrů)_t - uint8x2x4_t
...
uint16x4_t vadd_u16(uint16x4_t x, uint16x4_t y);
uint16x2_t vmlal_u32(uint64x2_t x, uint32x2_t, uint32x2_t);

NEON Intrinsic

Raspberry Pi

Raspberry Pi: SoC