[Addierer] Fixes

This commit is contained in:
Andre Meyering 2017-11-25 16:54:27 +01:00
parent 7944cfa221
commit b9ffd045b5
Signed by: Andre
GPG key ID: 5A1BBB0FB1D4716B

View file

@ -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}