150 lines
5.7 KiB
TeX
150 lines
5.7 KiB
TeX
%*******************************************************************************
|
||
% * 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
|