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 = postupný ústup ze slávy 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.) 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: charakteristika: 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í o malý počet jednoduchých instrukcí (10ky až cca 130) o krátka doba provedení instrukce (1 takt f CLK ) o pipelining (viz. dále) 1
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 f CLK vykonána (dokončena) jedna instrukce konflikty: o datový potřebná data dosud nejsou uložena 2
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 Flash (Kbytes) EEPROM (Kbytes) SRAM (Bytes) Max I/O Pins F.max (MHz) AT90CAN128 Automotive 128 4 4096 53 16 AT90PWM2 8 0.5 512 19 16 AT90PWM3 8 0.5 512 27 16 ATmega128 128 4 4096 53 16 ATmega1280 128 4 8192 86 16 ATmega1281 128 4 8192 54 16 ATmega16 16 0.5 1024 32 16 ATmega162 16 0.5 1024 35 16 ATmega165 16 0.5 1024 54 16 ATmega165P 16 0.5 1024 54 16 ATmega168 16 0.5 1024 23 20 ATmega168 Automotive 16 0.512 1024 23 16 ATmega169 16 0.5 1024 54 16 ATmega169P 16 0.5 1024 54 16 ATmega2560 256 4 8192 86 16 ATmega2561 256 4 8192 54 16 ATmega32 32 1 2048 32 16 ATmega325 32 1 2048 54 16 ATmega3250 32 1 2048 69 16 ATmega329 32 1 2048 54 16 ATmega3290 32 1 2048 69 16 ATmega406 40 0.512 2048 18 1 ATmega48 4 0.256 512 23 20 ATmega48 Automotive 4 0.256 512 23 16 ATmega64 64 2 4096 54 16 ATmega640 64 4 8192 86 16 ATmega644 64 2 4096 32 20 ATmega645 64 2 4096 54 16 ATmega6450 64 2 4096 69 16 3
ATmega649 64 2 4096 54 16 ATmega6490 64 2 4096 69 16 ATmega8 8 0.5 1024 23 16 ATmega8515 8 0.5 512 35 16 ATmega8535 8 0.5 512 32 16 ATmega88 8 0.5 1024 23 20 ATmega88 Automotive 8 0.512 1024 23 16 ATtiny11 1 -- -- 6 6 ATtiny12 1 0.064 -- 6 8 ATtiny13 1 0.064 64B + 32 reg 6 20 ATtiny15L 1 0.0625 -- 6 1.VI ATtiny2313 2 0.128 128 18 20 ATtiny24 2 0.128 128 12 20 ATtiny25 2 0.128 128 6 20 ATtiny25 Automotive 2 0.128 128 6 16 ATtiny26 2 0.125 128 16 16 ATtiny28L 2 -- 32 11 4 ATtiny44 4 0.256 256 12 20 ATtiny45 4 0.256 256 6 20 ATtiny45 Automotive 2 0.128 128 6 16 ATtiny84 8 0.512 512 12 20 ATtiny85 8 0.512 512 6 20 ATtiny85 Automotive 2 0.128 128 6 16 Jádro (AVR Core) Harvardská architektura, RISC optimalizováno pro běh programů v jazyce C blokové schéma 4
časování CPU 3-stupňová pipeline (Tx = 1/f CLK ) o většina instrukcí 1 takt (12x výkonnější než 8051 na stejném f CLK, výkon zhruba jako 80386) Zpracování operandů v aritmetických instrukcích jednocyklová instrukce 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
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
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 ALU o pro typy, které mají méně periferií, je tabulka příslušně zredukována o každá AVR jiné registry!!!!! 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
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