[Kapitel] Inhalt vom 23.10.17 ergänzt

This commit is contained in:
Andre Meyering 2017-10-26 13:11:35 +02:00
parent aa3112eafa
commit 8e6684e5f9
5 changed files with 168 additions and 12 deletions

BIN
Bilder/Serielladdierer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
Bilder/casc_cla_pa.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

View file

@ -474,16 +474,168 @@ Bestimmung des \enquote{Aufwands}. Aufwand kann sein:
\end{itemize} \end{itemize}
\textsf{\textbf{Warum Zeitaufwand?}} \newline \textsf{\textbf{Warum Zeitaufwand?}} \newline
Es wird der Zeitaufwand betrachtet, da Gatter Schaltzeiten haben, typischerweise \circa{10 Pikosekunden}. 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 Gatterlaufzeiten}/\acs{GLZ}). Es wird der Zeitaufwand betrachtet, da Gatter Schaltzeiten haben, typischerweise \circa{10 Pikosekunden}. 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}}).
\textsf{\textbf{Hardwareaufwand des 4~Bit RC-PA}} \newline \textsf{\textbf{Hardwareaufwand des 4~Bit RC-PA}}
für \acs{HA}: 2 Transistoren für $c_{out}$ und 6 Transistoren für s $\Rightarrow$ 8 Transistoren \newline
für \acs{VA}: 2 HA und 2 Transistoren für $c_{out}$ $\Rightarrow$ $2\cdot8+2=18$ Transistoren \noindent\begin{tabular}{@{}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 HA und 2 Transistoren für $c_{out}$ & $\Rightarrow$ $2\cdot8+2=18$ Transistoren
\end{tabular}
\textit{Benötigt werden:} \newline \textit{Benötigt werden:} \newline
1 HA = 8 Transistoren \newline 1 HA = 8 Transistoren \textit{plus}
$(n-1)$ VA = $(n-1) \cdot 18~\text{Transistoren} = (18n-18) \text{Transistoren}$ $(n-1)$ VA = $(n-1) \cdot 18~\text{Transistoren} = (18n-18) \text{Transistoren}$ \newline
\quad $\Rightarrow$ insgesamt also: 8 + (18n - 18) = 18n - 10 Transistoren = $O(n)$
$\Rightarrow$ insgesamt: 8 + 18n - 18 = 18n - 10 Transistoren = $O(n)$
Dies heißt, dass der \acs{HW}-Aufwand linear mit der Breite der Summanden steigt. Dies ist gut, denn besseres (also weniger Aufwand) ist kaum zu erwarten. Dies heißt, dass der \acs{HW}-Aufwand linear mit der Breite der Summanden steigt. Dies ist gut, denn besseres (also weniger Aufwand) ist kaum zu erwarten.
\textsf{\textbf{Zeitaufwand des 4~Bit RC-PA}} \newline
für \acs{HA}: max. 2 Gatterlaufzeiten (\enquote{Tiefe 2}, siehe \autoref{fig:halbaddierer}) \newline
für \acs{VA}: max. 4 Gatterlaufzeiten
Beim \acs{RC-PA} liegen die einzelnen $s_i$ nach unterschiedlicher Zeit an. \newline
$s_i$ wird nach $(i+1)\cdot 2$ \acs{GLZ} erreicht. Das längste $s_i$ ist bei $n$~Bit-RC-PA $i=n-1$ und damit ergibt sich ein Zeitaufwand bei $n$-Bit-\acs{RC-PA} von $2n$\acs{GLZ}!
Dies ist ein schlechter Zeitaufwand bei einem Paralleladdierer! Zu erwarten wäre $O(1)$.
\textit{Auswirkung}: Beim Wechsel von 32- auf 64-Bit-CPU hätte sich die Taktfrequenz halbiert. Daraus lässt sich folgern, dass kein 64-Bit-\acs{RC-PA} in der CPU verbaut ist.
\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 0 auf 1 ändern, erreicht.
Diese Zeit muss aber trotzdem abgewartet werden.
\end{Hinweis}
\subsection{Paralleladdierer (4-Bit-Carry-Look-Ahead-Paralleladdierer CLA-PA)}
Idee: Der $c_{in}$-Eingang wird nicht von vorausgehenden \acs{VA} (oder \acs{HA}) übernommen, sondern durch ein \enquote{magisches CLA-Schaltnetz} nachberechnet. Genauer: Für die Berechnung von $c_{in}$ müssen alle Eingänge $a_j, b_j, j < i$ berücksichtigt werden.
\begin{figure}[ht]
\centering
\begin{tikzpicture}[font=\sffamily]
\foreach \a in {0,...,3} {
% Calculate the index
\def\b{{\pgfmathparse{3-\a} % Evaluate the expression
\pgfmathprintnumber[ % Print the result
fixed,
fixed zerofill,
precision=0
]{\pgfmathresult}}}
\node at (\a*3 - 0.75,2) {$a_{\b}$};
\draw (\a*3 - 0.75,1.7) -- (\a*3 - 0.75,1);
\node at (\a*3,2) {$b_\b$};
\draw (\a*3,1.7) -- (\a*3,1);
\draw[black, thick] (-1 + \a*3,-1) rectangle (\a*3 + 1,1);
\ifnum\a<3
\draw (\a*3 + 0.55,2.2) rectangle (\a*3 + 0.95,1.7);
\node at (\a*3 + 0.75,1.9) {?};
\node at (\a*3 + 1.2,1.4) {$c_{in_\b}$};
\draw (\a*3 + 0.75,1.7) -- (\a*3 + 0.75,1);
\node[font=\huge\sffamily] at (\a*3, 0) {VA};
\fi
\ifnum\a>2
\node[font=\huge\sffamily] at (\a*3, 0) {HA};
\fi
\node at (\a*3 + 0.25,-2) {$s_\b$};
\draw (\a*3 + 0.25,-1.7) -- (\a*3 + 0.25,-1);
}
\node at (-0.5,-2) {$s_4$};
\node[font=\small\sffamily] at (-1,-2.5) {\enquote{Überlauf}};
\draw (-0.5,-1.7) -- (-0.5,-1);
\end{tikzpicture}
\caption{CLA-Paralleladdierer -- Schaltnetz}% und Schaltsymbol}
\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 & &
\end{align*}\todo{Überprüfen, ob korrekt aufgeschrieben.}
Aber: Für die Berechnung der $c_{in_i}$ kann jeweils eine \acs{DNF}, \acs{DMF} oder jede andere DxF (wie auch eine KxF) verwendet werden. \newline
$\Rightarrow$ diese haben jeweils nur genau (bzw. maximal) 2~\acs{GLZ} Zeitaufwand.
Insgesamt hat jedes $s_i$ beim \acs{CLA-PA} genau 6~\acs{GLZ} Zeitaufwand (außer $s_0$ 2~\acs{GLZ}, $s_1$ 5~\acs{GLZ}).
$\Rightarrow$ konstanter Zeitaufwand $O(1)$
\textsf{\textbf{Hardwareaufwand des 4~Bit CLA-PA}} \newline
Aufwand für $c_{in_i}$-Berechnung: Annahme Schaltnetz wäre Realisierung der \acs{DNF}.\newline
für $c_{in_i}$ gibt es insgesamt $2i$ Eingänge\newline
$\Rightarrow$ insgesamt max $2^{2i}$ verschiedene Vollkonjunktionen, welche in der \acs{DNF} auftreten können.\newline
Jede dieser Vollkonjunktionen wird mit $2i$ Transistoren realisiert.\newline
$\Rightarrow$ falls alle Vollkonjunktionen verwendet werden müssten, wäre der Hardwareaufwand $2^{2i}\cdot 2i$ Transistoren.
In der Realität werden natürlich nicht alle Vollkonjunktionen benötigt, sondern ein (vermutlich halbwegs konstanter) Anteil $0 < k < i$.
$\Rightarrow$ damit ist der Aufwand für $c_{in_i} = O(i\cdot4^i) = O(i\cdot2^i)$
damit ist der Aufwand für $n$-Bit-\acs{CLA-PA}: $O(n^2\cdot2^n)$
Der Hardwareaufwand steigt beim $n$-Bit-\acs{CLA-PA} überexponentiell mit $n$.
Beim Wechsel von $32$-Bit auf 64-Bit-\acs{CLA-PA} wäre der halb-billionenfache Aufwand an Transistoren nötig gewesen. \textit{Das ist viel zu viel}. % Der Hardwareaufwand von 64~Bit im Gegensatz zu 32~Bit wäre viel zu groß und damit wird auch dieser Paralleladdierer nicht in der CPU verwendet.
\begin{tabular}{@{}l@{}c@{}c@{}l}
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$)
\end{tabular}\todo{Vergleichen: Siehe Notizen, etc.}
Addierer für 32-Bit: Aufsplitten in acht 4-Bit-\acs{CLA-PA}
\begin{figure}[h!]
\centering
\includegraphics[width=13cm]{Bilder/casc_cla_pa.png}
\caption{Kaskadierbare 4-Bit-CLA-PA}
\label{fig:casc_cla_ca}
\end{figure}\todo{Als Tikz übernehmen}
$\Rightarrow$ hintereinander geschaltet nach RC-Prinzip \newline
$\Rightarrow$ damit ist das $n$ der nicht-\acs{CLA-PA} noch klein $\Rightarrow$ erträglicher Hardwareaufwand
\subsection{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} nötig. Daher ist der \acf{SA} ein Schaltwerk, kein Schaltnetz! \autoref{fig:serielladdierer} zeigt das Schaltwerk eines Serielladdierer.
\begin{figure}[h!]
\centering
\includegraphics[width=13cm]{Bilder/Serielladdierer.png}
\caption{Serielladdierer}
\label{fig:serielladdierer}
\end{figure}\todo{Als Tikz übernehmen}
\textsf{\textbf{Zeitaufwand ($N$-Bit-SA})}: $n$ Taktzyklen $\Rightarrow$ $O(n)$
Ist dies wie beim \acs{RC-PA}? \newline
Jein, denn 1 Taktzyklus ist deutlich mehr als doppelt solang wie die Berechnung des \acs{VA} (Sicherheitsmargen!).\newline
(\zB 1 Taktzyklus > \circa{10}\acs{GLZ}) \newline
$\Rightarrow$ fünffache Berechnungszeit des \acs{RC-PA}
\textsf{\textbf{Hardwareaufwand ($N$-Bit-SA})}
1 \acs{VA}: 18 Transistoren \newline
2 \acs{D-FF}. $2\cdot 6=12$ Transistoren. Siehe Grafik rechts:
3. $n$-Bit-\acs{SR}: Siehe Grafik links
Takterzeugung (im folgenden nicht näher betrachtet)
\begin{figure}[h!]
\centering
\includegraphics[width=15cm]{Bilder/Serielladdierer_2.png}
\caption{Schieberegister und D-Flip-Flop}
\label{fig:serielladdierer_2}
\end{figure}
\begin{Achtung}
Die Takterzeugung muss in der Klausur für den \acl{SA} auf jeden Fall genannt werden, auch wenn er hier nicht weiter betrachtet wird!
\end{Achtung}

View file

@ -16,7 +16,7 @@
\title{\Was} \title{\Was}
\begin{document} \begin{document}
\selectlanguage{ngerman} \selectlanguage{ngerman}
\newcounter{savepage} % Counter resetten \newcounter{savepage} % Counter resetten
\pagenumbering{Roman} % große, römische Seitenzahlen \pagenumbering{Roman} % große, römische Seitenzahlen
@ -29,8 +29,7 @@
\setcounter{savepage}{\value{page}} % Neuer Counter \setcounter{savepage}{\value{page}} % Neuer Counter
\pagenumbering{arabic} % Normale Arabische Zahlen \pagenumbering{arabic} % Normale Arabische Zahlen
% Mitschriften % Mitschriften
\input{Kapitel/00_Vorwort.tex} \input{Kapitel/00_Vorwort.tex}
\input{Kapitel/01_Einstieg.tex} \input{Kapitel/01_Einstieg.tex}
@ -40,17 +39,22 @@
\chapter{Abkürzungsverzeichnis} \chapter{Abkürzungsverzeichnis}
\begin{acronym}[xxxxxx] \begin{acronym}[xxxxxx]
\acro{CLA-PA}{Carry-Look-Ahead-Paralleladdierer}
\acro{CPU}{central processing unit} \acro{CPU}{central processing unit}
\acro{D-FF}{D-Flip-Flop}
\acro{DMF}{Disjunktive Minimalform} \acro{DMF}{Disjunktive Minimalform}
\acro{DNF}{Disjunktive Normalform} \acro{DNF}{Disjunktive Normalform}
\acro{IC}{Integrated Circuit} \acro{IC}{Integrated Circuit}
\acro{GLZ}{Gatterlaufzeit} \acro{GLZ}{Gatterlaufzeit}
\acrodefplural{GLZ}[GLZs]{Gatterlaufzeiten}
\acro{HA}{Halbaddierer} \acro{HA}{Halbaddierer}
\acro{HW}{Hardware} \acro{HW}{Hardware}
\acro{RC-PA}{Ripple-Carry-Paralleladdierer} \acro{RC-PA}{Ripple-Carry-Paralleladdierer}
\acro{SA}{Serielladdierer}
\acro{SR}{Schieberegister}
\acro{VA}{Volladdierer} \acro{VA}{Volladdierer}
\end{acronym} \end{acronym}
\newpage \newpage
\listoffigures % Abbildungsverzeichnis \listoffigures % Abbildungsverzeichnis
\newpage \newpage