diff --git a/Kapitel/03_Rechenwerk.tex b/Kapitel/03_Rechenwerk.tex index 182cf96..eddba18 100644 --- a/Kapitel/03_Rechenwerk.tex +++ b/Kapitel/03_Rechenwerk.tex @@ -17,7 +17,7 @@ \end{paracol} \begin{Hinweis} - Herr Röthig meint mit \enquote{einstellig} und \enquote{mehrstellig} die Anzahl der Zahlen und nicht die Stellenanzahl einer einzelnen Zahl. Im Beispiel oben werden zwei Zahlen addiert und daraus ergeben sich zwei weitere Zahlen als Ergebnis. + Herr Röthig meint hier mit \enquote{einstellig} und \enquote{mehrstellig} die Anzahl der Zahlen und nicht die Stellenanzahl einer einzelnen Zahl. Im Beispiel oben werden zwei Zahlen addiert und daraus ergeben sich zwei weitere Zahlen als Ergebnis. \end{Hinweis} \section{Schaltnetzsysnthese -- Wiederholung / Grundlegendes} @@ -32,7 +32,8 @@ \subsection{Schaltungsanalyse} \index{Schaltungsanalyse} Eine Schaltungsanalyse ist die Bestimmung des \enquote{Aufwands}. Dabei kann der Aufwand sein: -\begin{itemize}[noitemsep] + +\begin{itemize} \item \enquote{Hardware-Aufwand} (in Anzahl an Transistoren) \item Zeitaufwand (in \acl{GLZ}) \end{itemize} @@ -41,7 +42,7 @@ Eine Schaltungsanalyse ist die Bestimmung des \enquote{Aufwands}. Dabei kann der Es wird der Zeitaufwand betrachtet, da Gatter Schaltzeiten haben, welche typischerweise \circa{10 Pikosekunden} betragen. Insgesamt werden bei einem Signaldurchgang auf dem \acs{IC} sehr viele Gatter durchlaufen. Damit sind die Schaltzeiten um Größenordnungen größer als die reine Laufzeit der Signale auf dem Leiter angegeben (letztere wird vernachlässigt, Zeitverzögerung wird in \enquote{Anzahl \acfp{GLZ}} angegeben). \section{Halbaddierer} \index{Halbaddierer} -Vollzieht die Addition von zwei einstelligen Binärzahlen $a$ und $b$ zu einer zweistelligen Binärzahl $c_{out}s$ (Übertrag und Summe). Schaltsymbol und Schaltnetz des Halbaddierers werden in \autoref{fig:halbaddierer} dargestellt. +Ein Halbaddierer vollzieht die Addition von zwei einstelligen Binärzahlen $a$ und $b$ zu einer zweistelligen Binärzahl $c_{out}s$ (Übertrag und Summe). Schaltsymbol und Schaltnetz des Halbaddierers werden in \autoref{fig:halbaddierer} dargestellt. Die folgende Tabelle zeigt den Gedankenweg, wie ein Halbaddierer funktioniert. \begin{center} @@ -265,15 +266,15 @@ Der \acs{RC-PA} ist ein mehrstelliger Addierer für Binärzahlen. In den folgend \label{fig:paralleladdierer_rc} \end{figure} -\begin{Hinweis} +\begin{Hinweis}[frametitle={Hinweis: Schaltnetz}] Ein $n$-Bit \acs{RC-PA} ist ein Schaltnetz, kein Schaltwerk! Eine zeichnerische Anordnung mit Verbindungen nur nach unten ist nämlich möglich. \end{Hinweis} \subsection{Hardwareaufwand des 4~Bit RC-PA} \noindent\begin{tabular}{@{}l@{}ll} - für \acs{HA}: & 2 Transistoren für $c_{out}$ und 6 Transistoren für $s$ & $\Rightarrow$ 8 Transistoren \\ - für \acs{VA}: & 2 \acs{HA} und 2 Transistoren für $c_{out}$ & $\Rightarrow$ $2\cdot8+2=18$ Transistoren + Aufwand für einen \acs{HA}: & \quad 2 Tr. für $c_{out}$ und 6 Tr. für $s$ & $\Rightarrow$ 8 Transistoren \\ + Aufwand für einen \acs{VA}: & \quad 2 \acs{HA} und 2 Transistoren für $c_{out}$ & $\Rightarrow$ $2\cdot8+2=18$ Transistoren \end{tabular} \textit{Für den 4~Bit \acs{RC-PA} werden benötigt:} @@ -288,19 +289,20 @@ Dies heißt, dass der \acs{HW}-Aufwand linear mit der Breite der Summanden steig \subsection{Zeitaufwand des 4~Bit RC-PA} -für \acs{HA}: max. 2 \acfp{GLZ} (\enquote{Tiefe 2}, siehe \autoref{fig:halbaddierer} auf \autopageref{fig:halbaddierer}) \newline -für \acs{VA}: max. 4 \acfp{GLZ} +Aufwand für \acs{HA}: max. 2 \acfp{GLZ} (\enquote{Tiefe 2}, siehe \autoref{fig:halbaddierer} auf \autopageref{fig:halbaddierer}) \newline +Aufwand für \acs{VA}:\, max. 4 \acfp{GLZ} Beim \acs{RC-PA} liegen die einzelnen $s_i$ nach unterschiedlicher Zeit an. $s_i$ wird nach $(i+1)\cdot 2$ \acs{GLZ} erreicht. -Das längste $s_i$ ist bei $n$-Bit-\acs{RC-PA} $i=n-1$ und damit ergibt sich ein Zeitaufwand bei $n$-Bit-\acs{RC-PA} von $2n$~\acs{GLZ}! +Das längste $s_i$ ist beim $n$-Bit-\acs{RC-PA} $i=n-1$ und damit ergibt sich ein Zeitaufwand bei $n$-Bit-\acs{RC-PA} von $2n$~\acl{GLZ}! Dies ist ein schlechter Zeitaufwand bei einem Paralleladdierer, denn zu erwarten wäre $O(1)$! \newline \textit{Auswirkung}: Beim Wechsel von 32- auf 64-Bit-\acs{CPU} hätte sich die Taktfrequenz halbiert. Daraus lässt sich folgern, dass kein 64-Bit-\acs{RC-PA} in der \acs{CPU} verbaut ist. +\medskip \begin{Hinweis} Anmerkung zum \acs{RC-PA}: Die $2n$ \acs{GLZ} Zeitaufwand werden nur im \enquote{schlimmsten Fall} bei einer ununterbrochene Kette von $c_{out}$-Ausgängen, welche sich \textbf{alle} im Laufe der Berechnung von \texttt{0} auf \texttt{1} ändern, erreicht. - Diese Zeit muss aber trotzdem abgewartet werden. + Diese Zeit muss aber trotzdem abgewartet werden! \end{Hinweis} \section{Paralleladdierer (4-Bit-Carry-Look-Ahead-Paralleladdierer CLA-PA)} \index{Paralleladdierer!CLA-PA} @@ -343,23 +345,23 @@ Dies ist ein schlechter Zeitaufwand bei einem Paralleladdierer, denn zu erwarten \node[font=\small\sffamily] at (-1,-2.5) {\enquote{Überlauf}}; \draw (-0.5,-1.7) -- (-0.5,-1); \end{tikzpicture} - \caption{Carry-Look-Ahead-Paralleladdierer -- Schaltnetz} + \caption{Carry-Look-Ahead-Paralleladdierer -- \enquote{magisches} Schaltnetz} \label{fig:paralleladdierer_cla} \end{figure} Aber wie sieht das Schaltnetz (und die boolesche Formel) für die Berechnung von $c_{in_i}$ aus? \begin{align*} - \text{\acs{HA}}:~ c_{out} & = a\wedge b & \\ - s_{out} & = a\overline{b}\vee\overline{a}b & \\ - \text{\acs{VA}}:~ c_{out} & = (a\wedge b)\vee(c_{in}\wedge(a\overline{b}\vee\overline{a}b)) & \\ - & & \\ - c_{in_1} = c_{out_0} & = a_0\wedge b_0 & \textit{\qquad \acs{HA}} \\ - c_{in_2} = c_{out_1} & = (a_1\wedge b_1)\vee(\textcolor{Blue}{c_{in_1}} \wedge (a_1\overline{b}_1\vee\overline{a}_1b_1)) & \textit{\acs{VA}} \\ - & =(a_0\wedge b_1)\vee(\textcolor{Blue}{a_0\wedge b_0} \wedge(a_1\overline{b}_1\vee\overline{a}_1b_1)) & \textit{Einsetzen} \\ - c_{in_3} = c_{out_2} & = (a_2\wedge b_2)\vee(\textcolor{OliveGreen}{c_{in_2}} \wedge(a_2\overline{b}_2\vee\overline{a}_2b_2)) & \textit{\acs{VA}} \\ - & = (a_2\wedge b_2)\vee \textcolor{OliveGreen}{((a_0\wedge b_1)\vee(a_0\wedge b_0\wedge(a_1\overline{b}_1\vee\overline{a}_1b_1))} \wedge & \textit{Einsetzen} \\ - & \hspace{4mm} (a_2\overline{b}_2\vee\overline{a}_2b_2)) & \\ - \cdots & & + \text{\acs{HA}}:~ c_{out} & = a\wedge b & \\ + s_{out} & = a\overline{b}\vee\overline{a}b & \\ + \text{\acs{VA}}:~ c_{out} & = (a\wedge b)\vee(c_{in}\wedge(a\overline{b}\vee\overline{a}b)) & \\ + & & \\ + c_{in_1} = c_{out_0} & = a_0\wedge b_0 & \textit{\qquad \acs{HA}} \\ + c_{in_2} = c_{out_1} & = (a_1\wedge b_1)\vee(\textcolor{Blue}{c_{in_1}} \wedge (a_1\overline{b}_1\vee\overline{a}_1b_1)) & \textit{\acs{VA}} \\ + & =(a_0\wedge b_1)\vee(\textcolor{Blue}{a_0\wedge b_0} \wedge(a_1\overline{b}_1\vee\overline{a}_1b_1)) & \textit{Einsetzen} \\ + c_{in_3} = c_{out_2} & = (a_2\wedge b_2)\vee(\textcolor{OliveGreen}{c_{in_2}} \wedge(a_2\overline{b}_2\vee\overline{a}_2b_2)) & \textit{\acs{VA}} \\ + & = (a_2\wedge b_2)\vee \textcolor{OliveGreen}{((a_0\wedge b_1)\vee(a_0\wedge b_0\wedge(a_1\overline{b}_1\vee\overline{a}_1b_1))} \wedge & \textit{Einsetzen} \\ + & \hspace{4mm} (a_2\overline{b}_2\vee\overline{a}_2b_2)) \cdots & \\ + \cdots & & \end{align*} \subsection{Zeitaufwand} @@ -373,15 +375,14 @@ Für den Aufwand für die $c_{in_i}$-Berechnung gilt die Annahme, das Schaltnetz \begin{itemize}[noitemsep] \item[$\Rightarrow$] Für jedes $c_{in_i}$ gibt es insgesamt $2i$ Eingänge. - \item[$\Rightarrow$] Insgesamt gibt es max. $2^{2i}$ verschiedene Vollkonjunktionen, welche in der \acs{DNF} auftreten können. \newline + \item[$\Rightarrow$] Insgesamt max. $2^{2i}$ verschiedene Vollkonjunktionen, welche in der \acs{DNF} auftreten können. \newline Jede dieser Vollkonjunktionen wird mit $2i$ Transistoren realisiert. \item[$\Rightarrow$] Falls alle Vollkonjunktionen verwendet werden müssten, wäre der Hardwareaufwand \newline - $2^{2i}\cdot 2i$ Transistoren.\todo{Evtl. nicht korrekt. Die 15er haben da was anderes...} + $2^{2i}\cdot 2i$ Transistoren $= 2i\cdot 4^{i} = O(n\cdot 4^{n})$. \end{itemize} -In der Realität werden natürlich nicht alle Vollkonjunktionen benötigt, sondern ein (vermutlich halbwegs konstanter) Anteil $0 < k < i$. Damit ist der Aufwand für $c_{in_i} = O(i\cdot4^i)$ und somit der Aufwand für $n$-Bit-\acs{CLA-PA}: $O(n^2\cdot2^n)$ +In der Realität werden natürlich nicht alle Vollkonjunktionen benötigt, sondern ein (vermutlich halbwegs konstanter) Anteil $0 < k < i$. Damit ist der Aufwand für $c_{in_i} = O(i\cdot4^i)$ und somit der Aufwand für $n$-Bit-\acs{CLA-PA}: $O(n\cdot n\cdot4^n)=O(n^2\cdot4^n)$ -\newpage % Für das Layout \begin{Achtung} Im folgenden wird fälschlicherweise von einem Aufwand $O(n^2\cdot 2^n)$ ausgegangen. Richtig wäre $O=(n^2\cdot 4^n)$. Herr Röthig hat die $O$-Notation falsch vereinfacht. Der 2015er Jahrgang hat dies \enquote{noch falscher} gemacht und zu $O(4^n)$ vereinfacht. \end{Achtung} @@ -393,8 +394,6 @@ Beim Wechsel von $32$-Bit auf 64-Bit-\acs{CLA-PA} wäre der 16~Trillionen-fache Bei $n=4$: \quad $4^2\cdot 2^4=$~ & $16\cdot 16$~ $=$ & $256$ & ~Transistoren \\ Bei $n=8$: \quad $8^2\cdot 2^8=$~ & $64\cdot 256=$ & ~ \circa{$16384$} & ~Transistoren (64-fache von $n=4$) $\Rightarrow$ \textit{zu viel für die \acs{CPU}} \end{tabular} -\todo{Vergleichen: Siehe Notizen, etc.} - \subsection{Kombination mehrerer kleinen \acsp{CLA-PA}} @@ -472,7 +471,7 @@ $\Rightarrow$ damit ist das $n$ der nicht-\acs{CLA-PA} noch klein $\Rightarrow$ \newpage % Für das Layout \section{Serielladdierer} \index{Serielladdierer} -\textit{Idee}: Angelehnt an die Verfahrensweise des Menschen sollen die Stellen der beiden Summanden nacheinander (und nicht gleichzeitig) addiert werden. Dadurch wird nur \textbf{ein} \acs{VA} und mehrere \acf{SR} benötigt. Daher ist der \acf{SA} ein Schaltwerk, kein Schaltnetz! \autoref{fig:serielladdierer} zeigt das Schaltwerk eines Serielladdierer. +\textit{Idee}: Angelehnt an die Verfahrensweise des Menschen sollen die Stellen der beiden Summanden nacheinander (und nicht gleichzeitig) addiert werden. Dadurch wird nur \textbf{ein} \acf{VA} und mehrere \acf{SR} benötigt. Daher ist der \acf{SA} ein Schaltwerk, kein Schaltnetz! \autoref{fig:serielladdierer} zeigt das Schaltwerk eines Serielladdierer. \begin{figure}[h!] \centering @@ -483,7 +482,7 @@ $\Rightarrow$ damit ist das $n$ der nicht-\acs{CLA-PA} noch klein $\Rightarrow$ \subsection{Zeitaufwand ($n$-Bit-SA)} -Der Zeitaufwand für einen $n$-Bit-\acs{SA} beträgt $n$ Taktzyklen, also $O(n)$ +Der Zeitaufwand für einen $n$-Bit-\acl{SA} beträgt $n$ Taktzyklen, also $O(n)$ \textit{Ist dies wie beim \acs{RC-PA}?} \newline Jein, denn $1$ Taktzyklus dauert deutlich mehr als doppelt solang wie die Berechnung des \acs{VA} (Sicherheitsmargen!). Beispiel: 1 Taktzyklus > \circa{10}~\acs{GLZ} $\Rightarrow$ fünffache Berechnungszeit des \acs{RC-PA} @@ -491,14 +490,14 @@ Jein, denn $1$ Taktzyklus dauert deutlich mehr als doppelt solang wie die Berech \subsection{Hardwareaufwand ($N$-Bit-SA)} \begin{tabular}{@{}l@{}l} - 1 \acs{VA} & $=18$ Transistoren \\ - 2 \acs{D-FF} = $2\cdot 6$ & $=12$ Transistoren. \textit{(siehe \autoref{fig:serielladdierer_2} rechts)} \\ - 3 $n$-Bit-\acs{SR} & $=4\cdot 6n = 18n$ Transistoren \textit{(siehe \autoref{fig:serielladdierer_2} links)} \\ - Takterzeugung~~ & \textit{(im folgenden nicht näher betrachtet)} \\ - gesamt & $18n+30$ Transistoren + 1 \acs{VA} & $=18$ Transistoren \\ + 2 \acs{D-FF} = $2\cdot 6$ & $=12$ Transistoren. \hspace*{12.5mm} \textit{(siehe \autoref{fig:serielladdierer_2} rechts)} \\ + 3 $n$-Bit-\acs{SR} & $=4\cdot 6n = 18n$ Transistoren \textit{(siehe \autoref{fig:serielladdierer_2} links)} \\ + Takterzeugung~~ & \textit{(im folgenden nicht näher betrachtet)} \\ + \textbf{gesamt} & $18n+30$ Transistoren \end{tabular} -Zum Vergleich: \acs{RC-PA}: $18n-10$, \dash der \acs{SA} braucht 40 Transistoren mehr (bei längerer Bearbeitungszeit)! +Zum Vergleich: \acs{RC-PA}: $18n-10$, \dash der \acl{SA} braucht 40 Transistoren mehr (bei längerer Bearbeitungszeit)! \begin{figure}[h!] @@ -512,17 +511,19 @@ Zum Vergleich: \acs{RC-PA}: $18n-10$, \dash der \acs{SA} braucht 40 Transistoren Die Takterzeugung muss in der Klausur für den \acl{SA} auf jeden Fall genannt werden, auch wenn sie hier nicht weiter betrachtet wird! \end{Achtung} - \subsection{Hardwareoptimierung des Serielladdierers} \begin{figure}[ht] \centering - \includegraphics[width=12cm]{Bilder/Serielladdierer_3.png} + \includegraphics[width=13cm]{Bilder/Serielladdierer_3.png} \caption{Serielladdierer mit Hardwareoptimierung} \label{fig:serielladdierer_hw_optimierung} \end{figure} -Wie in \autoref{fig:serielladdierer_hw_optimierung} zu sehen ist, wird ein Schieberegister weniger benötigt $\Rightarrow 12n+36$ Transistoren +Wie in \autoref{fig:serielladdierer_hw_optimierung} zu sehen ist, wird ein Schieberegister weniger benötigt \newline +\hspace*{3mm}$\Rightarrow 12n+36$ Transistoren + +\newpage % Für's Layout \subsubsection{Vergleich eines RC-PA mit dem verbesserten SA} \begin{table} @@ -534,19 +535,19 @@ Wie in \autoref{fig:serielladdierer_hw_optimierung} zu sehen ist, wird ein Schie 3 & 44 & 72 \\ 4 & 62 & 84 \end{tabular} - \caption{Vergleich von Hardwareaufwand eines \acs{RC-PA} mit dem verbesserten \acs{SA}} + \caption{Vergleich des Hardwareaufwand eines \acs{RC-PA} mit dem verbesserten \acs{SA}} \label{tbl:vergleich_rcpa_sa} \end{table} Tabelle \autoref{tbl:vergleich_rcpa_sa} vergleicht einen \acs{RC-PA} mit dem verbesserten \acs{SA}. Break-Even (\enquote{\textit{Gewinnschwelle}}): $18n -10 = 12n + 36 \Rightarrow 46 = 6n \Rightarrow n = 7\frac{2}{3} $ \newline -\hspace*{5mm} $\Rightarrow$ Ab 8-Bit lohnt sich der \acs{SA} +\hspace*{3mm} $\Rightarrow$ Ab 8-Bit lohnt sich der \acs{SA} \textbf{Mögliche Anwendung eines \acl{SA}}: \begin{itemize}[noitemsep] \item nicht im Rechenwerk der \acs{CPU} (aufgrund der Geschwindigkeit)! - \item aber möglicherweise in \enquote{Embedded System}, falls \zB Sensordaten sowieso seriell angeliefert werden + \item aber möglicherweise in \enquote{embedded system}, falls \zB Sensordaten sowieso seriell angeliefert werden \item[$\Rightarrow$] eventuell sind sogar weitere Hardware-Einsparungen möglich! \end{itemize}