%*******************************************************************************
% * Copyright (c) 2006-2013
% * Institute of Automation, Dresden University of Technology
% *
% * All rights reserved. This program and the accompanying materials
% * are made available under the terms of the Eclipse Public License v1.0
% * which accompanies this distribution, and is available at
% * http://www.eclipse.org/legal/epl-v10.html
% *
% * Contributors:
% *   Institute of Automation - TU Dresden, Germany
% *      - initial API and implementation
% ******************************************************************************/

\documentclass[
  print,          % print optimized version of the thesis, standard option
                  % alternative:
%  screen,        % makes the thesis better readable on screens (onesided, coloured links)
                  % use only 'print' OR 'screen'
                  % ATTENTION: 'screen' changes size of text area slightly. Always optimize document WITH
                  % 'print' option first for printing (size of graphics etc.) and convert afterwards
                  % in screen optimized version!
  listoffigures,  % includes list of figures
  listoftables,   % includes list of tables
  listoflistings, % includes list of listings
  abbrevations,   % includes index of symbols and abbrevations
  bibNumeric,     % citation style (IfA standard), alternatives: bibNumeric, bibHarvard
  langDE          % define the language (default: langDE)
]{ifathesis}
\ifaThesis{Belegarbeit}
\ifaAuthor{Jörg Thalheim}
\ifaAuthorBirthday{03.01.1992}
\ifaAuthorBirthplace{Großröhrsdorf}
\ifaAuthorCourse{Informationssystemtechnik}
\ifaAuthorYearOfMatriculation{2011}
\ifaKeywords{Praktikum, Schaltungsentwurf, Verilog} % Keywords included in pdf-file. Could be found e.g. by Windows file search.
\ifaTitleDE{Schaltkreis- und Systementwurf}
\ifaTitleEN{}
\bibliography{bibliography}

\ifaSupervisorA{Jens-Uwe Schlüßler}
\ifaProfessor{Prof. Dr.-Ing. habil. René Schüffny}
\ifaDayOfSubmission{\today}
\ifaTopicDescriptionPDF{parts/00_Aufgabenstellung.pdf}
\ifaAppendix{example_files/appendix}
\ifaAbstractDE{example_files/00_abstract_de__invalid}
\ifaAbstractEN{example_files/00_abstract_en__invalid}
\usepackage{tabularx}
\usepackage{graphicx}

% Keine Kapitelnummerierung
\makeatletter
\renewcommand{\thesection}{
  \ifnum\c@chapter<1 \@arabic\c@section
  \else \thechapter.\@arabic\c@section
  \fi
}
\makeatother

\begin{document}

\section{Einleitung}
Aufgabe des Praktikums \emph{Schaltkreis- und Systementwurf} ist es einen integrierten Schaltkreis (ASIC) für
einen numerischen Algorithmus zu entwickeln. Der Schaltkreis ist mit der
Enwicklungsumgebung \emph{Cadence} zu erstellen. Dabei ist den Arbeitsschritten der Aufgabenstellung
\cite{aufgabenstellung} zu folgen. Die Schaltung ist durch Simulation zu verifizieren.
Der folgende Bericht enthält die geforderte Dokumentation nach Kapitel 5.1
\cite{dokumentation} der Aufgabenstellung.

\section{Beschreibung des Algorithmus}
Der hier selbst gewählte Algorithmus ist Ziehen der Quadratwurzel mithilfe des
Heron’sche Näherungsverfahren (auch Babylonverfahren genannt). Es ist benannt
nach dem Altgriechen Heron von Alexandria, der es zum 1. Mal beschrieb. Es ist
vermutlich das älteste Nährungsverfahren für die Quadratwurzel. Wegen seines
einfachen Aufbaus, war es ein beliebter Algorithmus für die Implementierung in
Software bevor Hardwareimplementierung sich verbreitet haben.

Die Iterationsvorschrift des Verfahren lautet:

\begin{align}
  x_{n+1} & =\frac{x_n + \frac{a}{x_n}}{2} \\
  lim_{n \rightarrow \infty} x_n & = \sqrt{a}
\end{align}

wobei $a$ der Ausgangswert ist, aus welchem die Wurzel berechnet werden soll und
$x_n$ der sich von Iterations zu Iterations an die Quadratwurzel annähernde
Wert.

Herleiten lässt sich die Folge aus dem Newton-Verfahren zur Bestimmung der
Nullstellen ($x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}$):

\begin{align}
  x^2         &= a \\
  f(x)        &= x^2 - a \\
  f'(x)       &= 2x \\
  x_{n + 1}   &= x_n - \frac{f(x_n)}{f'(x_n)} \\
              &= x_n - \frac{x_n^2 - a}{2x_n} \\
              &= x_n - \frac{x_n - a/x_n}{2} \\
              &= \frac{x_n + a/x_n}{2}
\end{align}

Wobei in diesem Praktikum die Quadratwurzel von mehreren hintereinander im
Speicher abgelegten Zahlen berechnet wird.

\section{Implementierung in C}
Der Prototyp des Algorithmus erfolgte in der Programmiersprache C nach dem
C99-Standard.

\ifalisting{Implementierung in C}{lst:implementierung}{c}{code/sqrt.c}{true}

Wie auch in der zu realisierenden Schaltung erwartet die Funktion im
Speicherfeld die Operanden für die Quadratwurzel-Berechnung. Wobei das 1. Feld
die Anzahl der Operanden angibt (siehe Speicherbelegung \ref{tbl:speicherbelegung}).

\subsection{Speicherbelegung und Zahlenformat}

Es wird angenommen, das jeder Speicherplatz 32 Bit breit ist.
Jedes Datenfeld wird als vorzeichenlose Festkommazahl interpretiert.
Die Anzahl der Nachkommastellen lässt sich sowohl in der Schaltung
(heron\_comma\_fix) als auch in
der C-Implementierung (siehe Zeile \ref{comma}) leicht anpassen, wobei
vorrausgesetzt wird, dass die Anzahl durch 2 teilbar sein muss. Für die
Verifikation wurden 8. Kommastellen festgesetzt.

\begin{table}
\begin{tabularx}{\textwidth}{X|X}
  Speicherplatz & Beschreibung \\\hline
  MEM[0]        & Anzahl der Operanden (N) \\
  MEM[1]        & 1. Operand \\
  MEM[2]        & 2. Operand \\
  $\ldots$      & $\dots$ \\
  MEM[N]        & N. Operand
\end{tabularx}
\caption{Speicherbelegung}
\label{tbl:speicherbelegung}
\end{table}

\subsection{Datenflussgraph}
\begin{figure}[ht]
  \centering
  \includegraphics[width=0.6\textwidth]{graph.pdf}
  \label{fig1}
\end{figure}

\subsection{Datenpfad}

\end{document}

% vim:spelllang=de
