AVR - kútik

Na rôznyh fórach sa často stretávam s otázkou, čím sa vlastne odlišujú jednotlivé typy 8-bitových mikroprocesorov okrem veľkosti a typu pamäte a typu púzdra. Pretože sa v poslednom čase zaoberám predovšetkým AVR-rodinou firmy Atmel, pokúsim sa dať čiastočnú odpoveď na túto otázku z pohľadu AVR-architektúry.

16-bitový výkon za cenu 8-bitového procesora?

Úvod do AVR

Hlavné charakteristiky AVR rodiny jednočipových mikroradičov sú:
 
  • 89 (AT90S1200) resp. 118 - 121 jednoslovových inštrukcií
  • veľká väčšina inštrukcií sa vykonáva len v jednom cykle
  • taktovacia frekvencia 0 - 12 MHz
  • šírka inštrukcie 16 bitov 
  • 8 - bitová dátova zbernica 
  • 512 - 64k slov pre integrovanú FLASH pamäť programu
  • 32 General Purpose Register
  • 3 úrovňový hw-zásobník resp. Stackpointer v SRAM
  • priame, nepriame a relatívne adresovanie
  • interný analógový komparátor
  • 8-bitový čítač/časovač s programovateľným 10-bitovým preddeličom 
  • 16-bitový čítač/časovač s Capture Compare módom
  • 1-3 PWM kanály
  • 8-kanálový 10-bitový A/D prevodník
  • 5-48 vstupno/výstupných liniek
  • watchdog časovač s interným RC oscilátorom
  • programovateľné poistky proti neoprávnenému vyčítaniu 
  • napájanie 2,7-6 Voltov, spotreba 5,5 mA (ATmega103, 4MHz, 3V, 25C)

AVR architektúra

AVR rodina jednočipových mikroprocesorov firmy Atmel je vyrobená High-Speed CMOS technológiou s FLASH pamäťou programu, ISP a vyznačuje sa implementáciou RISC inštrukčného súboru. Oproti iným mikroprocesorom so spoločnou zbernicou pre pamäť a dáta (von Neumannova architektúra) je AVR-architektúra charakteristická použitím dvoch oddelených zberníc a pamäťových oblastí pre program a dáta (Harvardská architektúra). Tým je možné nasadenie adresovej a dátovej zbernice s rôznozu šírkou. AVR majú 8-bitovú zbernicu pre dáta a 16-bitovú pre inštrukcie (program). Širšou zbernicou pre program je možné prakticky skoro všetky inštrukcie implementovať ako jednoslovové (16-bitový Opcode). Jednostupňová pipeline umožňuje, aby sa počas výkonu inštrukcie nasledovná inštrukcia prenášala z pamäte.  V porovnaní s inými mikroprocesormi sa rozsah taktovacích frekvencií 0-12MHz javí pomerne nízky. Ak sa však zohľadní, že kmitočet oscilátora sa vnútorne nedelí a  väčšina inštrukcií (až na skokové a Load/Store inštrukcie) sa vykoná  počas jedného taktovacieho impulzu - znamená to, výkon až 12 MIPS (Million Instructions per Second)

Porovnanie poctu potrebnych taktov na vykonanie dvoch instrukcii

Obr. 1  Porovnanie počtu potrebných taktov na vykonanie dvoch inštrukcií pre známe typy procesorov.

Programové počítadlo (PC) je podľa AVR-typu a teda aj veľkosti programovej pamäte široké 9-16 bitov a nachádza sa v I/O priestore. Počas prerušenia alebo skoku do podprogramu sa jeho obsah odkladá do zásobníka-stacku. AT90S1200 disponuje 3-úrovňovým HW-zásobníkom. Všetky ostatné typy majú zásobník v SRAM a tento je adresovaný prostredníctvom Stack-Pointera (SP). Stack pointer je široký 16 bitov a nachádza sa takisto v I/O priestore.

Pamäť a registre

Programová pamäť AVR-rodiny je typu FLASH a je široká 16 bitov. Výrobca garantuje minimálne 1000 cyklov mazania/programovania.
Jednotlivé typy sa odlišujú veľkosťou pamäte programu, ktorá sa pohybuje v rozsahu 512 x 16 bitov až 65536 x 16 bitov, veľkosťou pamäte dát typu EEPROM (medzi 64 Byte - 2kByte) a veľkosťou SRAM pamäte dát (medzi 158 Byte až 4kByte). Pre periférie je vyhradených 64 I/O pamäťových miest, ktoré sa dajú ovládať inštrukciou OUT. Alternatívne je tento I/O priestor dostupný v dátovej pamäti na adresách $20 -$5F.
Jadro procesora pozostáva z ALU (Arithmetic Logic Unit) ktorá je spojená priamo s 32 všeobecnými registrami (GPR, General Purpose Unit). Tieto registre sú približne to, čo je pri iných mikroprocesoroch akumulátor. Všetkých 32 registrov je mapovaných v adresovom poli pamäte dát.
Ako ukazovateľ funguje u AT90S1200 posledný, u ostatných typov posledné tri páre registrov. Vysoký počet univerzálnych registrov vyplynul z požiadavky na generovanie efektívneho kódu HLL (High Level Language) kompilátormi.
Aritmeticko-logická jednotka je schopná prevádzať sčítanie, odčítanie, bitové posuny a logické operácie. Tak sa dá napríklad sčítať obsah registrov R1 a R2 pri  následnom uchovaní výsledku v jednom z nich len jedným príkazom s dobou výkonu jeden takt!

Následne je uvedený príklad na demonštrovanie efektivity kódu.
Príklad má vykonávať funkciu: A = ((A .and. 84h) + (B.eor.C).or.80h
 
AVR code CISC code
EOR B,C MOV ACC,C
ANDI A,#84h EOR ACC,B
ADD A,B MOV TMP,ACC
ORI B,#80h MOV ACC,A
AND ACC,#84h
ADD ACC,TMP
OR ACC,#80h
MOV A,ACC
8 bytes  12-16 bytes
4 clocks 48-96 clocks

V závislosti na výsledku aritmeticko-logických operácií nastavuje ALU príznaky v stavovom registri (SREG).

Prístup k dátam a teda aj k obsahu registrov je možný prostredníctvom 5 rôznych spôsobov adresovania. Bližšie o tom nabudúce.
 
 

Vypracoval Marian Ďuriš. Dátum poslednej aktualizácie 24.07.2001
Návrhy, pripomienky, komentáre a otázky? Kontaktujte nás

PSH - mikro sa s projektom Komunikácia medzi AVR a  PDA s PalmOS prostredníctvom IrDA protokolu zúčastňnuje:

Circuit Cellar Design Logic 2001

Návrat na začiatok stránky
Úvod