790d08fdd96f283bcc6fbb59315846f370a7d20b
[calu.git] / 1_isacmp / avr.tex
1 \section{AVR}
2
3 Das 8-bit AVR Instruction Set ist das von den meisten Atmel Microkontroller implementierte Instructions Set.
4 Es ist eine RISC Architektur die vorallem auf 1 Zyklus Instructionen hin optimiert ist.
5 Es handelt sich hierbei um eine Register basierende Maschiene.
6
7 \subsection{Einsatzgebiet}
8 Die 8-bit AVR ISA wird zum Beispiel in der megaAVR Serie verwendet, welche im Embedded Bereich eigesetzt. Sie bietet eine breite Auswahl aus Peripherie M\"oglichkeiten/Ger\"aten an. Dies macht sie verwendbar f\"ur eine breite Palette an Applicationen. Die Serie verf\"ugt unter anderem \"uber USB,LCD,CAN und LIN Interfaces, zus\"atzlich zu den Standards f\"ur SPI,UART oder I2C.
9 Ausswerdem bietet es Features wie selbst programmierung f\"ur den Flash und sicherer, g\"unstige Upgrades w\"ahrend des Betriebs. Die Serie wird 
10
11 \subsection{Conditional Jumps}
12 Conditional Jumps sind bei dieser ISA immer getrennt vorhanden. 
13 Es gibt ein Set aus 3 Compare Instructionen, sowie eine Set f\"ur Branches.
14 Durch die Compares werden im Statusregister Bit gesetzt bzw. gel\"oscht, welche dann von den einzelnen Branches abgefragt werden k\"onnen.  
15 Die Latenzzeiten die auftreten f\"ur Jumps und Branches, sowie f\"ur andere mehr Zyklen Instructionen werden auf Hardwareebene behandelt und sind deshalb nicht auf den ISA Level sichbar.
16
17 \subsection{Ziele}
18 Laut der ersten Feature Zeile in den AVR PDFs liegt das Hauptaugenmerk auf:
19
20 High-performance, Low-power
21
22 Da die Komponenten hauptsächlich im embedded Bereich eingesetzt werden ist klar, dass ein niedriger Energieverbrauch besonders wichtig ist. 
23 Umgesetzt wird das ganze durch Instructionen die haupts\"achlich in einem Zyklus abgearbeitet werden.
24 Außerdem werden bei den diversen Serien noch Sleep-Modi und andere Konzepte angeboten, die das Low-power Schema noch weiter unterstützen.
25
26 \subsection{W\"unsche und gute Features}
27 Folgende zwei Punkte finde ich besonders positiv:
28 \begin{itemize}
29         \item Das getrennte Compare-Branch Konzept find ich sehr angenehm, da man die jeweiligen Optionen nach Wunsch kombinieren kann und es gibt auch genügend Branches
30                 so, dass man ziemlich alles was gebraucht wird abgedeckt ist.
31         \item Das man viele Bitoperationen (auch Vergleiche f\"ur Conditional Jumps) zur Verf\"ugung hat.
32 \end{itemize}
33 Negativ auffallen ist mir:
34 \begin{itemize}
35         \item Es gibt keinen add imidiate Befehl um eine Konstante zu einem Register hinzuzuf\"ugen.
36 \end{itemize}
37
38 \subsection{Listing}
39 Ich gehe von folgenden Vorbedingungen aus:
40 \begin{itemize}
41         \item len in r24,r25
42         \item Array im Datenspeicher unter Y+0:Y+1 bis Y+6:Y+7 abgelegt
43         \item Summe wird in r24,r25 gespeichert
44 \end{itemize}
45
46 \begin{lstlisting}[caption=AVR Code]
47 subroutine:
48 mov r28,"Adresse mit zu verwendenden Arraydaten"
49 mov r29,"Adresse mit zu verwendenden Arraydaten"
50
51 adiw r25:r24,1
52 mov  r10,r24
53 mov r11,r25
54 subi r29:r28,2
55 ldi r1,0x01
56 ldi r2,0x01
57 ldi r20,0x00
58 ldi r21,0x00
59 cp  r10,r1
60 cpc r11,r2
61 brlt exit
62
63 ldi r1,0x00
64 ldi r2,0x00
65
66
67 for:
68 adiw r2:r1,1 # 2 c 2 b
69 adiw r29:r28,2
70
71 ldd r24,Y # 2 c 2 b
72 ldd r25,Y+1
73
74 add r20,r24 # 1 c 2 b
75 adc r21,r25 # 1 c 2 b
76
77 cp  r1,r10 # 1 c 2 b
78 cpc r2,r11 # 1 c 2 b
79 brlt for # 1 c if false 2 c if true 2 b
80
81 mov r24,r20
82 mov r25,r21
83 exit:
84 ret
85 \end{lstlisting}
86
87 Daraus ergibt sich:
88 \begin{itemize}
89         \item Anzahl Instructionen: 9
90         \item Anzahl Zyklen: wenn Branch false 13 sonst 14
91         \item Anzahl Bytes: 18
92 \end{itemize}
93
94
95
96