sim: labels and comments are now shown
[calu.git] / 1_isacmp / avr.tex
index 0748fdf3f1a1cf7512d24965ba74fb0322ce7fc4..5f1646457f5d1197c913b13ce9c74b09e02f4946 100644 (file)
@@ -2,91 +2,87 @@
 
 Das 8-bit AVR Instruction Set ist das von den meisten Atmel Microkontroller implementierte Instructions Set.
 Es ist eine RISC Architektur die vorallem auf 1 Zyklus Instructionen hin optimiert ist.
-Es handelt sich hierbei um eine Register basierende Maschiene.
+Es handelt sich hierbei um eine Register basierende Maschine.
 
 \subsection{Einsatzgebiet}
-Die 8-bit AVR ISA wird zum Beispiel in der megaAVR Serie verwendet, welche die breiteste Auswahl aus Peripherie M\"oglichkeiten/Ger\"aten anbietet. 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,UARToder I2C.
-Ausswerdem bietet es Features wie selbst programmierung f\"ur den Flash und sicherer, g\"unstige Upgrades w\"ahrend des Betriebs.
+Die 8-bit AVR ISA wird zum Beispiel in der megaAVR Serie verwendet, welche im
+Embedded Bereich eingesetzt wird. Sie bietet eine breite Auswahl aus Peripherie
+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.
+Au\ss erdem bietet es Features wie die Selbstprogrammierung des Flashes und damit sichere, g\"unstige Upgrades w\"ahrend des Betriebes an.
 
 \subsection{Conditional Jumps}
-Conditional Jumps sind bei dieser ISA immer getrennt vorhanden. 
-Es gibt ein Set an Jump Instructionen, sowie eines f\"ur Branches.
-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.
+Conditional Jumps sind bei dieser ISA immer getrennt vorhanden.
+Es gibt ein Set aus drei Compare Instructionen, sowie eine Set f\"ur Branches.
+Durch die Compares werden im Statusregister Bits gesetzt bzw. gel\"oscht, welche dann von den einzelnen Branches abgefragt werden k\"onnen.
+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.
 
 \subsection{Ziele}
-Laut der ersten Feature Zeile in den AVR PDFs liegt das hauptaugenmerk auf:
-
-High-performance, Low-power
-
+Laut der ersten Feature Zeile in den AVR PDFs liegt das Hauptaugenmerk auf
+High-Performance und niedrigen Energieverbrauch.
+Da die Komponenten haupts\"achlich im Embedded Bereich eingesetzt werden ist klar, dass ein niedriger Energieverbrauch besonders wichtig ist.
 Umgesetzt wird das ganze durch Instructionen die haupts\"achlich in einem Zyklus abgearbeitet werden.
+Au\ss erdem werden bei den diversen Serien noch Sleep-Modi und andere Konzepte angeboten, die das Low-power Schema noch weiter unterst\"utzen.
 
 \subsection{W\"unsche und gute Features}
 Folgende zwei Punkte finde ich besonders positiv:
 \begin{itemize}
-       \item Das getrennte Compare-Branch Konzept find ich sehr angenehm, da man die jeweiligen Optionen nach Wunsch kombinieren kann.
+       \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
+               so, dass ziemlich alles was gebraucht wird abgedeckt ist.
        \item Das man viele Bitoperationen (auch Vergleiche f\"ur Conditional Jumps) zur Verf\"ugung hat.
 \end{itemize}
-Negativ auffallen ist mir:
+Negativ aufgefallen ist mir:
 \begin{itemize}
-       \item Es gibt keinen add imidiate Befehl um eine Konstante zu einem Register hinzuzuf\"ugen.
+       \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.
 \end{itemize}
 
 \subsection{Listing}
 Ich gehe von folgenden Vorbedingungen aus:
 \begin{itemize}
-       \item len in r24,r25
-       \item Array im Datenspeicher unter Y+0:Y+1 bis Y+6:Y+7 abgelegt
-       \item Summe wird in r24,r25 gespeichert
+       \item \texttt{len} in \texttt{r24,r25}
+       \item das Array liegt im Datenspeicher ab \texttt{Y+0:Y+1}
+       \item Summe wird in \texttt{r24,r25} gespeichert
 \end{itemize}
-
-\begin{lstlisting}[caption=MCS-51 Code]
+\begin{lstlisting}[caption=AVR Code]
 subroutine:
-ld r28,"Adresse mit zu verwendenden Arraydaten"
-ld r29,"Adresse mit zu verwendenden Arraydaten"
+       //mov r28,"Adresse mit zu verwendenden Arraydaten"
+       //mov r29,"Adresse mit zu verwendenden Arraydaten"
+       add r24,r24
+       adc r25,r25
+       add r24,r28
+       adc r25,r29
+       mov r10,r24
+       mov r11,r25
 
-adiw r25:r24,1
-ld  r10,r24
-ld  r11,r25
-subi r29:r28,2
-ldi r1,0x01
-ldi r2,0x01
-ldi r20,0x00
-ldi r21,0x00
-cp  r10,r1
-cpc r11,r2
-brlt exit
 
-ldi r1,0x00
-ldi r2,0x00
+       ldi r20,0x00
+       ldi r21,0x00
 
+       cp  r10,r28
+       cpc r11,r29
+       breq exit
 
 for:
-adiw r2:r1,1 # 2 c 2 b
-adiw r29:r28,2
 
-ldd r24,Y # 2 c 2 b
-ldd r25,Y+1
+       ldd r24,Y
+       ldd r25,Y+1
+
+       add r20,r24
+       adc r21,r25
 
-add r20,r24 # 1 c 2 b
-adc r21,r25 # 1 c 2 b
+       adiw r29:r28,2
 
-cp  r1,r10 # 1 c 2 b
-cpc r2,r11 # 1 c 2 b
-brlt for # 1 c if false 2 c if true 2 b
+       cp  r28,r10
+       cpc r29,r11
+       brlt for
 
-ld r24,r20
-ld r25,r21
+       mov r24,r20
+       mov r25,r21
 exit:
-ret
+       ret
 \end{lstlisting}
-
 Daraus ergibt sich:
 \begin{itemize}
-       \item Anzahl Instructionen: 9
-       \item Anzahl Zyklen: wenn Branch false 13 sonst 14
-       \item Anzahl Bytes: 18
+       \item Anzahl Instructionen: 8
+       \item Anzahl Zyklen: wenn Branch \texttt{false} 11 sonst 12
+       \item Anzahl Bytes: 16
 \end{itemize}
-
-
-