[Addierer] Fixes
This commit is contained in:
parent
7944cfa221
commit
b9ffd045b5
1 changed files with 43 additions and 42 deletions
|
@ -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}
|
||||
|
||||
|
|
Loading…
Reference in a new issue