s3e: fix build break
[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 Maschine.
6
7 \subsection{Einsatzgebiet}
8 Die 8-bit AVR ISA wird zum Beispiel in der megaAVR Serie verwendet, welche im
9 Embedded Bereich eingesetzt wird. Sie bietet eine breite Auswahl aus Peripherie
10 M\"oglichkeiten/Ger\"aten an. Dies macht sie verwendbar f\"ur eine breite Palette an Applikationen. Die Serie verf\"ugt unter anderem \"uber USB, LCD, CAN und LIN Interfaces, zus\"atzlich zu den Standards f\"ur SPI, UART oder I2C.
11 Au\ss erdem bietet es Features wie die Selbstprogrammierung des Flashes und damit sichere, g\"unstige Upgrades w\"ahrend des Betriebes an.
12
13 \subsection{Conditional Jumps}
14 Conditional Jumps sind bei dieser ISA immer getrennt vorhanden.
15 Es gibt ein Set aus drei Compare Instructionen, sowie eine Set f\"ur Branches.
16 Durch die Compares werden im Statusregister Bits gesetzt bzw. gel\"oscht, welche dann von den einzelnen Branches abgefragt werden k\"onnen.
17 Die Latenzzeiten die bei Jumps und Branches, sowie bei anderen Instructionen mit mehreren Zyklen, auftreten werden auf Hardwareebene behandelt und sind deshalb nicht auf dem ISA Level sichtbar.
18
19 \subsection{Ziele}
20 Laut der ersten Feature Zeile in den AVR PDFs liegt das Hauptaugenmerk auf
21 High-Performance und niedrigen Energieverbrauch.
22 Da die Komponenten haupts\"achlich 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\ss erdem werden bei den diversen Serien noch Sleep-Modi und andere Konzepte angeboten, die das Low-power Schema noch weiter unterst\"utzen.
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\"ugend Branches
30                 so, dass 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 aufgefallen ist mir:
34 \begin{itemize}
35         \item Es gibt keinen \texttt{add} immediate Befehl um eine Konstante zu einem Register hinzuzuf\"ugen, jedoch um eine Konstante zu einem Word hinzuzuf\"ugen.
36 \end{itemize}
37
38 \subsection{Listing}
39 Ich gehe von folgenden Vorbedingungen aus:
40 \begin{itemize}
41         \item \texttt{len} in \texttt{r24,r25}
42         \item das Array liegt im Datenspeicher ab \texttt{Y+0:Y+1}
43         \item Summe wird in \texttt{r24,r25} gespeichert
44 \end{itemize}
45 \begin{lstlisting}[caption=AVR Code]
46 subroutine:
47         //mov r28,"Adresse mit zu verwendenden Arraydaten"
48         //mov r29,"Adresse mit zu verwendenden Arraydaten"
49         add r24,r24
50         adc r25,r25
51         add r24,r28
52         adc r25,r29
53         mov r10,r24
54         mov r11,r25
55
56
57         ldi r20,0x00
58         ldi r21,0x00
59
60         cp  r10,r28
61         cpc r11,r29
62         breq exit
63
64 for:
65
66         ldd r24,Y
67         ldd r25,Y+1
68
69         add r20,r24
70         adc r21,r25
71
72         adiw r29:r28,2
73
74         cp  r28,r10
75         cpc r29,r11
76         brlt for
77
78         mov r24,r20
79         mov r25,r21
80 exit:
81         ret
82 \end{lstlisting}
83 Daraus ergibt sich:
84 \begin{itemize}
85         \item Anzahl Instructionen: 8
86         \item Anzahl Zyklen: wenn Branch \texttt{false} 11 sonst 12
87         \item Anzahl Bytes: 16
88 \end{itemize}