[Kapitel] Inhalt vom 23.10.17 ergänzt
This commit is contained in:
parent
aa3112eafa
commit
8e6684e5f9
5 changed files with 168 additions and 12 deletions
BIN
Bilder/Serielladdierer.png
Normal file
BIN
Bilder/Serielladdierer.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
BIN
Bilder/Serielladdierer_2.png
Normal file
BIN
Bilder/Serielladdierer_2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
BIN
Bilder/casc_cla_pa.png
Normal file
BIN
Bilder/casc_cla_pa.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 67 KiB |
|
@ -474,16 +474,168 @@ Bestimmung des \enquote{Aufwands}. Aufwand kann sein:
|
|||
\end{itemize}
|
||||
|
||||
\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
|
||||
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
|
||||
\textsf{\textbf{Hardwareaufwand des 4~Bit RC-PA}}
|
||||
|
||||
\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
|
||||
1 HA = 8 Transistoren \newline
|
||||
$(n-1)$ VA = $(n-1) \cdot 18~\text{Transistoren} = (18n-18) \text{Transistoren}$
|
||||
|
||||
$\Rightarrow$ insgesamt: 8 + 18n - 18 = 18n - 10 Transistoren = $O(n)$
|
||||
1 HA = 8 Transistoren \textit{plus}
|
||||
$(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)$
|
||||
|
||||
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}
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
\setcounter{savepage}{\value{page}} % Neuer Counter
|
||||
\pagenumbering{arabic} % Normale Arabische Zahlen
|
||||
|
||||
|
||||
% Mitschriften
|
||||
\input{Kapitel/00_Vorwort.tex}
|
||||
\input{Kapitel/01_Einstieg.tex}
|
||||
|
@ -40,14 +39,19 @@
|
|||
|
||||
\chapter{Abkürzungsverzeichnis}
|
||||
\begin{acronym}[xxxxxx]
|
||||
\acro{CLA-PA}{Carry-Look-Ahead-Paralleladdierer}
|
||||
\acro{CPU}{central processing unit}
|
||||
\acro{D-FF}{D-Flip-Flop}
|
||||
\acro{DMF}{Disjunktive Minimalform}
|
||||
\acro{DNF}{Disjunktive Normalform}
|
||||
\acro{IC}{Integrated Circuit}
|
||||
\acro{GLZ}{Gatterlaufzeit}
|
||||
\acrodefplural{GLZ}[GLZs]{Gatterlaufzeiten}
|
||||
\acro{HA}{Halbaddierer}
|
||||
\acro{HW}{Hardware}
|
||||
\acro{RC-PA}{Ripple-Carry-Paralleladdierer}
|
||||
\acro{SA}{Serielladdierer}
|
||||
\acro{SR}{Schieberegister}
|
||||
\acro{VA}{Volladdierer}
|
||||
\end{acronym}
|
||||
|
||||
|
|
Loading…
Reference in a new issue