IMTEE
Přednáška č. 5
RISC a CISC architektura = dva rozdílné přístupy ke konstrukci CPU
CISC (Complex Instruction Set Computer) •
vývojově starší
•
přístup: „pomoci konstrukci překladače z VPP co nejpodobnějšími instrukcemi s příkazy VPP“: o volání podprogramů o cykly (DJNZ apod.) o komplexní větvení (CJNE apod.) o výpočty s operandy v paměti během jednoho cyklu (ADD A, Adr)
•
Základní znaky: o komplikovaný instrukční soubor (100ky instrukcí) o komplexní instrukce =
složitý návrh čipu → cena
zpracování instrukce → nutné více kroků řadiče → dlouhý instrukční cyklus
kratší program (nutné méně instrukcí) → méně přístupů od paměti, úspora nákladů na uP systém (60.léta 20 stol.)
•
postupný ústup ze slávy
•
Zástupci: 8051, první x86 (až do 80486)
RISC (Reduced Instruction Set Computer) •
protipól CISC
•
? Jak zvýšit výkon procesoru
•
1970 u IBM – výzkum, výsledky: o velký počet instrukcí = složité optimalizace o programátor ani překladače nejsou schopni využít všechny instrukce z ISA u CISC CPU o až 50% instrukcí nelze využít optimálně o v „průměrných“ programech:
•
většina „výkonných instrukcí“ (aritmetika, cykly – obvodově nejsložitější) → velmi malé zastoupení
nejčastější instrukce – přesuny, skoky, porovnání
charakteristika: o malý počet jednoduchých instrukcí (10ky až cca 130) o krátka doba provedení instrukce (1 takt fCLK) o pipelining (viz. dále)
1
IMTEE
Přednáška č. 5 o velký počet GPR (všeobecné registry) → > 32
•
RISC = malý počet tranzistorů na čipu CPU, oproti CISC lze: o menší spotřeba CPU o více registrů, vyrovnávací paměť (cache) o integrace více periférií o základní filozofie → všechny operace se provádějí v registrech („load-store architektura“ – data je nutné do registrů nahrát a pak vyzvednout) – komunikace s pamětí → pouze přesuny do a z registrů
•
dnes nejrozšířenější architektura CPU o 8b uC → Atmel AVR, Michrochip PIC o 32b uC – ARM (Acorn RISC Machine, až 75% trhu – PALM, PDA, MP3, Smart Phones…), Motorola Freescale o „stolní PCU“ – x86 od Intel Pentium výše, IBM Power PC o DSP – Analog Devices, Texas Instruments
•
umožňuje pokročilejší metody zpracování instrukcí (moderní CPU – Intel Pentium apod.) – Dynamic Execution o paralelní zpracování instrukcí (Paralel processing) o předpovídání větvení (branch prediction) o zpřeházené zpracování instrukcí (out-of-order execution) o Příklad – Intel Pentium III
Pipelining
•
= překrývání instrukcí, zřetězené zpracování instrukcí
•
základní princip zrychlení práce CPU typu RISC
•
v případě jednoduchého ISA → lze zpracování instrukce paralelizovat
•
zpracování jedné instrukce o každá jednotka řadiče provede část operace o jednotky procují současně (paralelně) cykly IF ID OF IE WB 1 A 2 B A 3 C B A 4 D C B A 5 E D C B A
•
triviální případ: jedna instrukce = čtení, druhá dekódování …
•
ideální případ → jeden takt fCLK → vykonána (dokončena) jedna instrukce
•
konflikty: o datový – potřebná data dosud nejsou uložena 2
IMTEE
Přednáška č. 5 o skokový – adresu skoku zatím nelze určit o řešení:
•
počkat (nejednodušší) → nutno zahodit obsah pipeline
delayed branch („předběžné“ zpožděné) skoky – viz DSP později
různý počet stupňů pipeline o MCU, DSP obvykle 3 o Pentium 4 – 20 až 31
Mikrokontroléry Atmel AVR •
nejmodernější architektura 8bit MCU
•
vznik kolem r. 1995
•
dnes cca 50 typů MCU – různá pouzdra, periferie, výkon o rodina ATtiny – „malé“ MCU o rodina ATmega – „velké“ MCU
•
podpora ladění přímo na čipu (On-Chip Debugging, přes rozhraní JTAG)
Device AT90CAN128 Automotive AT90PWM2 AT90PWM3 ATmega128 ATmega1280 ATmega1281 ATmega16 ATmega162 ATmega165 ATmega165P ATmega168 ATmega168 Automotive ATmega169 ATmega169P ATmega2560 ATmega2561 ATmega32 ATmega325 ATmega3250 ATmega329 ATmega3290 ATmega406 ATmega48 ATmega48 Automotive ATmega64 ATmega640 ATmega644 ATmega645 ATmega6450
Flash (Kbytes)
EEPROM (Kbytes)
SRAM (Bytes)
Max I/O Pins
F.max (MHz)
128 8 8 128 128 128 16 16 16 16 16 16 16 16 256 256 32 32 32 32 32 40 4 4 64 64 64 64 64
4 0.5 0.5 4 4 4 0.5 0.5 0.5 0.5 0.5 0.512 0.5 0.5 4 4 1 1 1 1 1 0.512 0.256 0.256 2 4 2 2 2
4096 512 512 4096 8192 8192 1024 1024 1024 1024 1024 1024 1024 1024 8192 8192 2048 2048 2048 2048 2048 2048 512 512 4096 8192 4096 4096 4096
53 19 27 53 86 54 32 35 54 54 23 23 54 54 86 54 32 54 69 54 69 18 23 23 54 86 32 54 69
16 16 16 16 16 16 16 16 16 16 20 16 16 16 16 16 16 16 16 16 16 1 20 16 16 16 20 16 16
3
IMTEE ATmega649 ATmega6490 ATmega8 ATmega8515 ATmega8535 ATmega88 ATmega88 Automotive ATtiny11 ATtiny12 ATtiny13 ATtiny15L ATtiny2313 ATtiny24 ATtiny25 ATtiny25 Automotive ATtiny26 ATtiny28L ATtiny44 ATtiny45 ATtiny45 Automotive ATtiny84 ATtiny85 ATtiny85 Automotive
Přednáška č. 5 64 64 8 8 8 8 8 1 1 1 1 2 2 2 2 2 2 4 4 2 8 8 2
2 2 0.5 0.5 0.5 0.5 0.512 -0.064 0.064 0.0625 0.128 0.128 0.128 0.128 0.125 -0.256 0.256 0.128 0.512 0.512 0.128
Jádro (AVR Core) •
Harvardská architektura, RISC
•
optimalizováno pro běh programů v jazyce C
•
blokové schéma
4
4096 4096 1024 512 512 1024 1024 --64B + 32 reg -128 128 128 128 128 32 256 256 128 512 512 128
54 69 23 35 32 23 23 6 6 6 6 18 12 6 6 16 11 12 6 6 12 6 6
16 16 16 16 16 20 16 6 8 20 1.VI 20 20 20 16 16 4 20 20 16 20 20 16
IMTEE
•
Přednáška č. 5
časování CPU – 3-stupňová pipeline (Tx = 1/fCLK)
o většina instrukcí → 1 takt (12x výkonnější než 8051 na stejném fCLK, výkon zhruba jako 80386) •
Zpracování operandů v aritmetických instrukcích– jednocyklová instrukce
5
IMTEE
Přednáška č. 5
o čtení obou zdrojových operandů z pracovních registrů o provedení potřebné operace o výsledek zpět do registrů. •
instrukce 16 bitů o Zrychlení načtení instrukcí (většina instrukcí načtena během 1 strojového cyklu) - výhoda o Zvětšení požadavků na paměť - nevýhoda
Paměťový prostor •
paměť programu
•
paměť dat
o GPR namapován do RAM → 0x00–0xFh (32 adres) o IO registry – odpovídá SFR u 8051 → 0x20h–0x5F (64 adres)
SREG (PSW)
SP
datové registry I/O zařízení (porty)
řídící registry periférií AVR
o zbytek (od adresy 96) = dostupná paměť RAM → 0x60–? (dle typu, 1–8kB)
přístup → 2 instrukční cykly
Pracovní registry
6
IMTEE
Přednáška č. 5
•
Téměř všechny instrukce pracující s registry → jednocyklový přístup (existují vyjímky).
•
Některé instrukce → přístup jen k R16 až R31.
•
Posledních 6 registrů –lze použít ve dvojici jako ukazatele adresy pro nepřímé adresování paměti dat (potom páry X, Y a Z) o příklad registr X
•
Všechny registry = ACC → šetří přesuny do RAM (usnadňuje implementaci C kompilátoru) – jsou zdrojem i cílem při ALU operacích
Paměť programu
•
typu FLASH, In-System Programmable Memory - přeprogramovatelná v cílovém zařízení (pomocí SPI nebo JTAG rozhraní), velikost dle typu (1 až 256 kB)
•
organizovaná jako N x 16b, N je závislé na typu uC
•
šířka PC závisí na velikosti paměti u daného typu uC (ATmega32 – 16kB, PC = 14b)
•
velikost interní FLASH dle typu AVR (1 až 256 kB)
•
nelze připojit externí paměť programu
Prostor I/O registrů
•
Všechny I/O porty a registry periferií jsou umístěny v oblasti 64 I/O registrů
•
Přístup: o jako do paměti SRAM pomocí instrukcí LD a ST o prvních 32 → instrukce IN (čtení) a OUT (zápis), které spolupracují s 32 pracovními registry.
7
IMTEE
Přednáška č. 5
•
rozsah adres 0x0000 až 0x001F → bitově adresovatelná (využití instrukcí SBI, CBI, SBIS, SBIC).
•
Příklad konkrétního uspořádání I/O registrů u ATmega32
o pro typy, které mají méně periferií, je tabulka příslušně zredukována o každá AVR → jiné registry!!!!!
ALU •
pracuje v přímém spojení s 32 univerzálními registry
•
podporuje aritmetické a logické operace mezi registry, registrem a konstantou nebo pracuje se samotným registrem
•
ALU operace jsou rozděleny na tři druhy o aritmetické o logické o bitové
•
Výsledek operace v ALU ovlivňuje bity ve stavovém registru SREG (jako PSW u 8051)
•
AVR typu ATmega obsahují hardwarovou násobičku (násobení pak trvá pouze 2 takty)
Stavový registr •
8-bitový registr SREG
•
= PSW u 8051
•
bity lze testovat a využít např. pro podmíněné větvení programu, skoky (instrukce BREQ, BRNE, BRTS, BRTC atd.)
8
IMTEE
Přednáška č. 5
•
instrukce SEx a CLx pro nastavování jednotlivých bitů do 1 či do 0 (např. SEI, CLI, SET, CLT atd.)
•
BIT7 - I – Global Interrupt Enable o Globální povolení všech přeušení (I = 1). Globální zákaz všeh přerušení (I = 0) o Podrobněji později
•
BIT6 – T – Bit Copy Storage o Uživatelsky nastavitelný bit pomocí instrukcí BST a BLD.
•
BIT5 – H – Half Carry Flag o přenos mezi 3. a 4. bitem (BCD aritmetika).
•
BIT4 – S – Sign Bit, S = N ⊕ V o ⊕ = XOR, určuje znaménko výsledku.
•
BIT3 – V – Two’s Complement Overflow Flag o Příznak přetečení dvojkového doplňku.
•
BIT2 – N – Negative Flag o Příznak záporného výsledku aritmetických nebo logických operací.
•
BIT1 – Z – Zero Flag o Příznak Z indikuje nulový výsledek aritmetických nebo logických operací.
•
BIT0 – C – Carry Flag o Indikuje přenos při aritmetických a logických operacích.
Zásobník, Stack Pointer •
Zásobník o velikost omezena pouze velikostí SRAM. o roste směrem k nižším adresám o musí být nastaven do volné RAM (nad 0x60) – obvykle až na konec
•
SP → 16b – (SPH, SPL) o musí být vždy inicializován na začátku programu
9