Procesory s jádrem ARM Materiál je určen jako pomocný materiál pouze pro studenty zapsané v předmětu: A4M38AVS A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 1
ARM - historie ARM - RISC procesory původ britská firma Acorn, procesory - stolní počítače později vývoj vlastního procesoru ARM1 v r. 1985, ARM1-25 000 tranzistorů, 3 um technologie 4 MHz hod. sig. ARM2 ARM 3 Založena nová firma - Advaced RISC Machines Ltd. (majet. účast Apple, Acorn a VLSI) změna názvu architektury z Acorn RISC Machine na Advaced RISC Machine ARM 6, procesor ARM610 pro PDA (Personal Digital Assistent) firmy Apple ARM7 v r. 1993, používán v PDA PSION firmy Acorn ARM7 TDMI doplnění ladicí rozhraní (D,I debug. interface) rozšířené možnosti násobičky (M) Thumb instrukční sada (T) - navíc 16- bitové instrukce ARM7 TDMI nejlépe prodávaný procesor (jádro) u ARM ARM9 TDMI následovník ARM7, úpravy pipeline, ARM orientace na přenosná zařízení, mobilní telefony, rozvoj A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 2
l. materiál firmy ARM 3
ARM historie ARMV4, Cortex M ARM7 TDMI - architektura ARM v 4T ( pozor, trochu se plete) ARM7TDMI používán i ve formě microcontroller jednočipový mikropočítač firma Philips (nyní navazující NXP) LPC 2105 procesor ARM7TDI, paměti Flash, RAM, periferie, řadič přerušení vlastní varianta další firmy využívající ARM7TDMI: ATMEL, STMicroelectronics, Texas Instruments, Analog Devices,,. u ARM7TDMI v jádře - pouze dvě přerušení, firmy- vlastní implementace řadiče přerušení chybí dobrá podpora a spolupráce - řadič přerušení - jádro Firma ARM úprava architektury pro potřeby embedded microcontrolérů Architektura ARM v7m Cortex, (M značí microcontroller) Doplněn NVIC Nested Vectored Interrupt Controller ARM - Cortex M3 - architektura ARM v7m, náš procesor na cvičeních Architektura ARM v4t ovlivnila ARM v7m,, Heslo ISA instruction set architecture architektura mající danou sadu instrukcí - obecnější pojem - poněkud širší rozsah míněných procesorů A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 4
ARM, typ, ISA,- architektura ARM - RISC procesory (pojem RISC) ARM7TDMI 32- bitový procesor, data 32 bitová, (tedy registry 32 bitů) adresa 32 bitů, adresní prostor 2 32 = 4 GByte ARM instrukční kód konstantní délky 32 bitů v těchto 32 bitech uložen: kód vlastní instrukce, případně - registr, přímá data, adresa architektura typu Load, Store v instrukci jeden přenos dat mezi CPU a pamětí není operace typu read, modify, write? jak řešit do 32 bitů kód i adresu přímé adresování relativně s omezeným rozsahem adresování registrem v jedné instrukci pouze jedna operace s pamětí aritmetické a logické operace pouze s registrem A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 5
Pojem Word u ISA ARM The ARM je 32-bit architectura. V pojmy word, halfword použité v souvislosti s ARM: Word míní se 32 bitů (čtyři bajty) Halfword míní se 16 bitů (dva bajty) Byte míní se 8 bits ( jeden bajt) Většina ARM implementuje dvě instrukční sady 32-bit ARM Instruction Set 16-bit Thumb Instruction Set ARM CORTEX M3 instrukční sada Thumb 2 (jedna společná sada dohromady 16- i 32- bitové instrukce) (obsahuje Thumb a některé ARM) A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 6
Procesory s jádrem ARM, kódování instrukce Architektura ARM, postupný vývoj ARMv x Architektura ARM instrukce kódování 32 bitové Kódování instrukcí ve strojovém kódu ARM je pouze v jednom slovu 32 bitů, procesor načte kompletní kód instrukce naráz Za kódem instrukce ARM nenásledují další informace o datech či adrese skoku (jako to je např. u procesoru 8051 jedno, dvou, tří bajtové instrukce,signálových procesorů ADSP Blackfin a dalších) Všechny informace jsou součástí instrukčního kódu Instrukce operuje s jedním nebo více registry, V jedné instrukci je pouze jediný přístup k datům v paměti (není instrukce, kde by se dva operandy načítaly z paměti, nebo kde by se operand četl z paměti a do paměti by se ukládal) A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 7
Instrukční sady ARM a THUMB Kódování instr. ve stroj. kódu - ARM pouze v jednom slovu (word) 32 bitů nebo THUMB jednom polovičním slovu 16 bitů (halfword) (za kódem instrukce nenásledují další informace o datech či adrese skoku jako to je např. u 8051, jedno, dvou, tří bajtové instrukce) Pokud je potřeba v instrukci zadat adresu 32 bitů, není to součástí instrukce,ale použití pseudoinstrukce. Instrukce se odkazuje na další slovo v paměti vygenerované a uložené překladačem. A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 8
ARM7 TDMI, instrukce ARM a THUMB ARM7TDMI instrukční sada ARM - 32 bitů instrukční sada THUMB 16 bitů (úsporný kód, větší omezení na přímá data či adresy) procesory ARM: 16 bitové instrukce Thumb 32 bitové instrukce ARM (Přepínání v programu, jaká sada instrukcí se používá, procesor běží: v módu ARM (vykonává instrukce ARM 32 - bitové) v módu THUMB (vykonává instrukce THUMB 16 - bitové) Instrukce ARM a THUMB není možno míchat, Přechod do THUMB - skok na adresu, kde nejnižší bit adresy je A 0 = 1 (kód instrukce je 16- bitový, tak reálná adresa má A 0 =0, ale právě požadavek skoku na adresu s A 0 =1 signalizuje požadavek na skok s přepnutím do režimu THUMB používají se instrukce BX Rn, kde registr Rn obsahuje požadovanou adresu s příslušně nastaveným bitem D 0 = 0, nebo D 0 =1 odpovídajícímu adresovému bitu A 0 A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 9
Instrukční sada THUMB-2 v návaznosti na inst. ARM ARM Cortex-M3 - instrukční sada Thumb -2 Instrukce Thumb (16- bitové) jsou doplněny 32- bitovými instrukcemi sada označená jako Thumb - 2, ARM Cortex M3 používá sadu Thumb 2 bez přepínání, je tedy stále v režimu Thumb- 2 a případný pokus o přepnutí do režimu instrukcí ARM (32 bitových) vyvolá chybu, proto musí být při požadavku skoku vždy nejnižší bit adresy A 0 = 1 16 bitové instrukce Thumb omezené možnosti např. ve vzdálenosti adresy pro skok,. možnost Unified Assembler Language (UAL) společná syntaxe pro ARM a Thumb instrukce. Kód psaný s použitím UAL může být přeložen do ARM nebo Thumb instrukcí. A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 10
Instrukční sada THUMB-2 ARM CORTEX- M3, instrukční sada pouze Thumb- 2 obsahuje původní Thumb 16 bitové, doplněné 32 bitovými inst. nepodporuje sadu ARM Thumb efektivnější využití pam. programu, (také zrychlení při čtení z FLASH, čtení 32 bitů dvě instrukce, vysvětlení později) A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 11
Architektura ARM v6m, ARM v7m Architektura ARM V7 obecně, V7M- úprava M značí Microcontroller instrukční sada THUMB -2 materiál firmy ARM 12
l. materiál firmy ARM 13
l. materiál firmy ARM 14
l. A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 15
l. materiál firmy ARM 16
Jádro ARM Cortex M3 Firma ARM - nevyrábí vlastní procesory, pouze návrh jádra, Jádro v rámci licencí využívá mnoho výrobců (ST, NXP, TI, Atmel,..) ARM Cortex- M3 - definováno: vlastní jádro CPU řadič přerušení rozložení v adresním prostoru (kde- SRAM interní, externí, kde vnitřní sběrnice spolupráce s rozhraním pro ladění (debug) JTAG, SWD Výrobci individuálně doplňují paměti a různé periferie přístupné v daném adresním prostoru více na www.arm.com Dle materiálu firmy ARM 17
Srovnání ARM7TDMI a ARM Cortex-M3. Materiál firmy ARM 18
Srovnání jader architektury ARM Cortex v7a, v7r a v7m A- Aplikační, R Real time, M - Microcontroller Cortex-A8 Architecture v7a MMU AXI VFP & NEON support Cortex-R4 Architecture v7r MPU (optional) AXI Dual Issue Cortex-M3 Architecture v7m MPU (optional) AHB Lite & APB materiál firmy ARM 19
Cortex family Cortex-A8 Architecture v7a MMU AXI VFP & NEON support Cortex-R4 Architecture v7r MPU (optional) AXI Dual Issue Cortex-M3 Architecture v7m MPU (optional) AHB Lite & APB Materiály firmy ARM 20
ARM Cortex Processors (v7) ARM Cortex-A family (v7-a): Applications processors for full OS and 3 rd party applications ARM Cortex-R family (v7-r): Embedded processors for real-time signal processing, control applications ARM Cortex-M family (v7-m): Microcontroller-oriented processors for MCU and SoC applications (MCU Microcontroller unit- mikrořadič) (SoC System on a Chip) Pozn. ARM Cortex M0 - je architektura ARM V6M Cortex-A8 Cortex-R4 Cortex -M3 x1-4 Cortex-M1...2.5GHz x1-4 Cortex-A9 Cortex-A15 x1-4 Cortex-A5 1-2 R Heron Cortex-M4 SC300 Cortex-M0 12k gates... materiál firmy ARM 21
The ARM Cortex Family ARM Cortex Family Intelligent Computing Family of products from ARM based on the ARMv7 Architecture & Thumb -2 ISA Step up from ARM7 (v4) and ARM9 (v5) Performance Cortex-A8 Cortex-R4F Cortex-R4 Cortex-M3 Cortex-M1 (FPGA) ARM Cortex A Series - Applications CPUs focused on the execution of complex OS and user applications First Product: Cortex-A8 Executes ARM, Thumb-2 instructions ARM Cortex R Series - Deeply embedded processors focused on real-time environments First Product: Cortex-R4(F) Executes ARM, Thumb-2 instructions ARM Cortex M Series - Microcontroller cores focused on very cost sensitive, deterministic, interrupt driven environments First Product: ARM Cortex-M3 Executes Thumb-2 instructions materiál firmy ARM 22
Cortex-M3 ARMv7-M Architecture Thumb-2 only Fully programmable in C 3-stage pipeline von Neumann architecture Optional MPU AHB-Lite bus interface Fixed memory map 1-240 interrupts Configurable priority levels Non-Maskable Interrupt support Debug and Sleep control Serial wire or JTAG debug Optional ETM Cortex M3 Total 60k* Gates materiál firmy ARM 23
Registry ARM Cortex M3 - R0 R12 obecné registry Dolní registry (low reg.) R0 R7 přístupné všemi instrucemi s přístupem k registrům. Horní registry (high reg.) R8 R12 přístup pouze 32 bitovými instrukcemi s přístupem k registrům A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 24
Registry R13 až R15 u ARM Cortex-M3 Stack pointer Registr R13 -Stack Pointer (SP) ukazatel zásobníku. R13 dvě formy: hlavní SP (SP main) procesní SR (SP_process) Link register Registr R14 je užíván při volání podprogramů (subroutine Link Register - LR). Do LR se uloží návratová adresa z PC při instrukci při vykonání instrukcí Branch an Link (BL) or Branch and Link with Exchange (BLX). LR je využit také při návratu z obsluhy výjimky (exception return). R14 možno obsluhovat jako obecný registr Programový čítač (Program counter - PC) registr R15 Bit [0] je vždy, takže instrukce jsou zarovnány na hranice slova (4 Byte) nebo poloviční slova (2 Byte). Stavový reg. programu (Program Status Registers xpsr) stavových registr příznaků (Flags) A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 25
Adresní prostor ARM- CORTEX M3. A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 26
Procesory s jádrem ARM, instrukce skoku Dotaz? jak se řeší skoky, když adresní prostor je 32- bitový a současně se má celá instrukce kompletně zakódovat do 32 bitů? Skoky (kde je informace o cíli skoku součástí instrukčního kódu) jsou relativní (skok o danou vzdálenost dopředu, či dozadu tato vzdálenost je součástí instruk. kódu) vzhledem k aktuální adrese právě čteného instrukčního kódu Relativní skoky omezený rozsah skoku ( omezená vzdálenost ) Dotaz? jak se řeší delší skoky, když adresní prostor je 32- bitový a současně se má celá instrukce kompletně zakódovat do 32 bitů? Skok s větším rozsahem adresy (na větší vzdálenost ) s využitím adresy předem uložené v registru (32 bitů) (Pozn.: u ARM Cortex M3 musí být nejnižší bit adr. skoku uložené v registru = 1) Důvod nejnižší bit adresy A0 = 1 signalizuje činnost v režimu Thumb) A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 27
Příklad systému sběrnic - AMBA AHB High performance Bus- rychlá sběrnice, přenos paměť- procesor APB Heripheral Bus pomalejší sběrnice pro přenos- procesor periferie (pomalejší, ale nižší odběr, možnost dalšího zpomalení použitím nižší frekvence hod. signálu pro APB High Performance ARM processor APB UART High Bandwidth External Memory Interface AHB APB Bridge Timer Keypad High-bandwidth on-chip RAM DMA Bus Master PIO High Performance Pipelined Burst Support Multiple Bus Masters Low Power Non-pipelined Simple Interface materiál firmy ARM 28
STM32F10x s jádrem ARM Cortex-M3, vnitřní sběrnice I- bus čtení instrukční kód D - bus čtení Data Harwardská architektura - načítání kódu instrukce I (FLASH) a dat D (SRAM) Možnost čtení dat z pam FLASHH- můstek D- bus- Flash Bus Matrix - přepínání sběrnic, možnost několika současně běžících přenosů ( analogie mimoúrovňová křižovaka víceůrovńová Např. čtení instrukce z FLASH do proc., současně přenos z GPIO přes APB na AHP s pomocí řadiče DMA do SRAM) Řadič DMA (Direct Memory Access) pro rychlé přenosy dat bez účasti procesoru A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 29
Cortex-M3 Pipeline Cortex-M3 has 3-stage fetch-decode-execute pipeline Similar to ARM7 Cortex-M3 does more in each stage to increase overall performance Třístupňový pipeline - zpracování a vykonání instrukce Optimální program přímý bez skoků ( viz dále problém omezené rychlosti FLASH) 1 st Stage - Fetch 2 nd Stage - Decode 3 rd Stage - Execute Fetch Fetch (Prefetch) (Prefetch) AGU AGU Instruction Instruction Decode Decode & Register Register Read Read Address Address Phase & Phase & Write Back Write Back Data Phase Data Phase Load/Store & Load/Store & Branch Branch Multiply Multiply & Divide Divide Write Write Branch forwarding & speculation Branch Branch Shift Shift ALU & Branch ALU & Branch Execute stage branch (ALU branch & Load Store Branch) Materiály firmy ARM 30
Cortex-M3 Datapath- čtení kódu Instrukce a Dat I_HRDATA Instruction Decode D_HADDR Address Register Address Incrementer Write Data Register Read Data Register D_HWDATA D_HRDATA B I_HADDR Address Incrementer Address Register Register Bank A Writeback Mul/Div Barrel Shifter ALU ALU INTADDR Materiály firmy ARM 31
Paměť FLASH v mikrořadičích s jádrem ARM Paměti FLASH omezená rychlost přístupu (např. doba v STM32F10x - 35 ns) Běh procesorového jádra STM32F10x až na 72 MHz (perioda cca 14 ns) Doba přístupu k FLASH delší, než perioda hod. signálu procesoru (Vyšší typy STM32F207 (viz SCKit- cv. A4M38AVS), STM32F407 až 168 MHz) Jádro - rychlejší než paměť FLASH Jak řešit rozpor? Řešení - zařazení wait cyklů počkat ječte jeden cyklus hod. sig. - zpomalení běhu Zvýšení toku paralelní čtení inst. kódu a konstant z FLASH Načtení 2x 64 bitů = 128 bitů (obdobně např. i implementace jádra ARM7TDMI v LPC2148 firma NXP) - akcelerace prefetch,). Důsledek program běží nejrychleji bez skokův přímé linii. Skoky zpomalují běh programu. 64 bit Použití par.načítání z pam. FLASH (Analogie nestačím podávat kostky (po jedné kostce) z jedné palety Řešení naberu najednou a podávám po dvou? Ale- požadavek podávat nejednou z jiné palety ( skok ) to nachystané zahodím - časová ztráta než naberu první nové dvě z jiné palety) čtení 32 bit čtení 32 bit 32 bit A4M38AVS, 2014, J. Fischer, kat. měření, ČVUT - FEL, Praha 32
Akcelerátor pro čtení paměti FLASH, STM32F10x Jádro - rychlejší než paměť FLASH Akcelerace prefetch, načítání z FLASH paralelně). (Inst. kód Thumb - 2 je 32 bitů, Thumb je 16 bitů), obdobné řešení i ostatní výrobci implementace jádra ARM7, ARM. Cortex-M3 Skokem- ztrácí se výhoda tohoto řešení, Dle materiálu firmy STMicroelectronics 33