\documentstyle[german,verbatim,dina4,titlepage,timing,12pt]{article}
\setlength{\textwidth}{16.5cm}
\setlength{\parindent}{0pt}
\setlength{\parskip}{5pt plus 2pt minus 1 pt}
\frenchspacing

\begin{document}
\title{TIMING.STY\\Satz von Zeitdiagrammen f�r digitale Schaltungen}
\author{Ludwig May\\Jens Leilich}
\maketitle

\section{Motivation}

Wir standen bei unserer Studienarbeit vor dem Problem, Zeitdiagramme 
einiger Digitalschaltungen darstellen zu m�ssen. 
Als Alternative zu der herk�mmlichen Erstellung durch ein Zeichenprogramm 
kam uns die Idee, ein solches Diagramm mit Hilfe eines 
speziellen Metafont-Zeichensatzes durch die Aneinanderreihung von 
Buchstaben zu realisieren. Durch die Verwendung von Ligaturen sollten so 
alle sinnvollen �berg�nge einzelner Logikzust�nde automatisch gezeichnet 
werden.

Diesen Zeichensatz haben wir zun�chst gemeinsam entwickelt.

Das vorliegende \LaTeX\ Stylefile {\bf TIMING.STY} wurde von Ludwig alleine 
entwickelt, um die Benutzung des Zeichensatzes zu vereinfachen.

Durch die Besch�ftigung an der Berufsbildenden Schule Ludwigshafen wurde von 
Jens der Style und die Fonts weiterentwickelt, weil gewisse Features fehlten.

Es erlaubt die Erstellung und Beschriftung eines Zeitdiagramms. Die einzelnen 
Elemente des Diagramms werden dabei �ber ein Koordinatensystem angeordnet.
Eine Einheit der Zeitachse entspricht dabei der L�nge eines Buchstabens, 
eine Einheit der Y-Achse entspricht dem Abstand von zwei Signalverl�ufen.

\section{Makros}

Die im folgenden beschriebenen Makros k�nnen nur innerhalb der 
\verb|timing| Umgebung eingesetzt werden. Diese Umgebung ist eine 
Erweiterung der \verb|picture| Umgebung, es k�nnen also auch alle 
\verb|picture| Befehle verwendet werden (\verb|\unitlength=1sp|).

Die Umgebung wird durch den Befehl

\verb|\begin{timing}[|{\em Zeichensatz}\verb|]{|{\em Labelbreite}\verb|}|

eingeleitet.
Der Parameter {\em Labelbreite} gibt den zu reservierenden Platz f�r die 
Signalbezeichnung an.
Der Parameter {\em Zeichensatz} w�hlt den Zeichensatz aus.
\verb|1| ist ein schmaler Zeichensatz, der ca.\ 1mm breite Elemente enth�lt, 
\verb|2| ist ein breiterer Zeichensatz mit ca.\ 2mm breiten Elementen.
Die Version mit \verb|s| dahinter (\verb|1s| und \verb|2s|) verwendet 
schr�ge Flanken im Gegensatz zu den "`normalen"' Zeichens�tzen.
(Man glaubt nicht, wieviele Schwierigkeiten die Sch�ler mit schr�gen
Flanken haben.
Man sagt ihnen: "`Nehmt die Mitte"', aber sie raffen's nicht.)
Normalerweise wird der Zeichensatz \verb|2| verwendet.

Die Umgebung mu� durch

\verb|\end{timing}|

abgeschlossen werden. (M�ssen wir das erw�hnen ??)

Eine Diagrammzeile wird durch das Makro

\verb|\til{|{\em Zeile}\verb|}{|{\em Zeichenkette mit Symbolbuchstaben}\verb|}|

erzeugt. Die Symbolbuchstaben repr�sentieren den jeweiligen Signalzustand 
gem�� Tabelle~\ref{symtab}. Alternativ k�nnen die Makros 
\verb|\timingcounter| bzw. \verb|\conttimingcounter| als Argument 
�bergeben werden.
Bei Verwendung von Symbolbuchstaben sollte darauf geachtet werden, da� nach 
einem Symbolwechsel mindestens zwei aufeinanderfolgende Buchstaben gleich 
sind, um ein ordnungsgem��es Arbeiten des Ligaturmechanismus zu 
gew�hrleisten. Die Makros

\verb|\timingcounter{|{\em Zeitmarkenabstand}\verb|}{|{\em Startwert}\verb|}{|{\em Endwert}\verb|}{|{\em Zeitintervall}\verb|}| \hfill und

\verb|\conttimingcounter{|{\em Zeitmarkenabstand}\verb|}{|{\em Startwert}\verb|}{|{\em Endwert}\verb|}{|{\em Zeitintervall}\verb|}|

erzeugen eine Ziffernskala. \verb|\conttimingcounter| wird nach einer 
Unterbrechung benutzt und erzeugt zus�tzlich den n�tigen Zwischenraum.


\begin{table}
\def\timtest#1{{\timon #1- \timons #1- \timtw #1- \timtws #1}}
\centering
\begin{tabular}{|l|l|l|}
\hline
\rule[-4mm]{0pt}{12mm}L & 0 - Pegel                           & 
{\tt HLLLLH} \quad $\to$ \quad \raisebox{-2mm}{\timtest{HLLLLH }} \\
\hline
\rule[-4mm]{0pt}{12mm}H & 1 - Pegel                           &
{\tt LHHHHL} \quad $\to$ \quad \raisebox{-2mm}{\timtest{LHHHHL }} \\
\hline
\rule[-4mm]{0pt}{12mm}F & unbekannter Pegel                   &
{\tt LFFFFH} \quad $\to$ \quad \raisebox{-2mm}{\timtest{LFFFFH }} \\
\hline
\rule[-4mm]{0pt}{12mm}L & 0 - Pegel zum Zeichnen              & 
{\tt hllllh} \quad $\to$ \quad \raisebox{-2mm}{\timtest{hllllh }} \\
\hline
\rule[-4mm]{0pt}{12mm}H & 1 - Pegel zum Zeichnen          &
{\tt lhhhhl} \quad $\to$ \quad \raisebox{-2mm}{\timtest{lhhhhl }} \\
\hline
\rule[-4mm]{0pt}{12mm}H & Leere Zeile zum Zeichnen          &
{\tt ......} \quad $\to$ \quad \raisebox{-2mm}{\timtest{...... }} \\
\hline
\rule[-4mm]{0pt}{12mm}V & Bus-Leitungen mit g�ltigen Daten    &
{\tt ZVVVVU} \quad $\to$ \quad \raisebox{-2mm}{\timtest{ZVVVVU }} \\
\hline
\rule[-4mm]{0pt}{12mm}X & Bus-Leitungen mit Zustandswechsel &
{\tt VVVXVV} \quad $\to$ \quad \raisebox{-2mm}{\timtest{VVVXVV }} \\
\hline
\rule[-4mm]{0pt}{12mm}U & Bus-Leitungen mit ung�ltigen Daten  &
{\tt ZUUUUV} \quad $\to$ \quad \raisebox{-2mm}{\timtest{ZUUUUV }} \\
\hline
\rule[-4mm]{0pt}{12mm}Z & Bus-Leitungen auf Tristate          &
{\tt VZZZZU} \quad $\to$ \quad \raisebox{-2mm}{\timtest{VZZZZU }} \\
\hline
\rule[-4mm]{0pt}{12mm}T & Kopfzeile mit Zeitmarke             &
{\tt TtttTt} \quad $\to$ \quad \raisebox{-0mm}{\timtest{TtttTt }} \\
\hline
\rule[-4mm]{0pt}{12mm}t & Kopfzeile ohne Zeitmarke            &
{\tt TtTtTt} \quad $\to$ \quad \raisebox{-0mm}{\timtest{TtTtTt }} \\
\hline
\rule[-4mm]{0pt}{12mm}B & Fu�zeile mit Zeitmarke              &
{\tt BbbbBb} \quad $\to$ \quad \raisebox{-0mm}{\timtest{BbbbBb }} \\
\hline
\rule[-4mm]{0pt}{12mm}b & Fu�zeile ohne Zeitmarke             &
{\tt BbBbBb} \quad $\to$ \quad \raisebox{-0mm}{\timtest{BbBbBb }} \\
\hline
\rule[-4mm]{0pt}{12mm}- & Unterbrechungszeichen               &
{\tt UUU-UU} \quad $\to$ \quad \raisebox{-2mm}{\timtest{UUU-UU }} \\
\hline
\end{tabular}
\caption{M�gliche Symbolbuchstaben in 3 Zeichens�tzen {\tt 1/1s/2/2s}}
\label{symtab}
\end{table}

Die Signalbezeichnung f�r eine Diagrammzeile wird mit dem Makro

\verb|\tin{|{\em Zeile}\verb|}{|{\em Name}\verb|}|

zugeordnet.

F�r Bemerkungen innerhalb des Signalverlaufs dient 

\verb|\tnote{|{\em Zeile}\verb|}{|{\em X-Position}\verb|}{|{\em Bemerkung}\verb|}|

Die Darstellung der Zeitbeziehungen zwischen einzelnen Signalverl�ufen 
erfolgt durch die folgenden Makros:

\begin{tabular}{ll} 
Pfeil nach rechts & \verb|\rarw{|{\em Zeile}\verb|}{|{\em X-Position}\verb|}{|{\em L�nge}\verb|}{|{\em Text}\verb|}| \\
Pfeil nach links  & \verb|\larw{|{\em Zeile}\verb|}{|{\em X-Position}\verb|}{|{\em L�nge}\verb|}{|{\em Text}\verb|}| \\
senkrechte Linie & \verb|\sline{|{\em Anfangszeile}\verb|}{|{\em X-Position}\verb|}{|{\em Endezeile}\verb|}| \\
\end{tabular}

Bei Zeile (bei den Pfeilen) verwenden Sie �blicherweise einen um $0.6$ 
verminderten Wert.
Bei der Linie meint X-Position die Position, hinter der die Linie sein soll;
das erste Zeichen hat die Nummer 1.

Die Linienbreite der senkrechten Linien kann dabei wie in der 
\verb|picture| Umgebung durch \verb|\linethickness| festgelegt werden.

Weiterhin existiert ein Faktor, der den Abstand zwischen zwei 
Signalverl�ufen bestimmt. \verb|\timescalefactor| kann durch 
\verb|\newcommand| auf einen beliebigen Wert gesetzt werden. Defaultwert 
ist 2.

%
% Evtl. n�tige Anpassung fuer Ausrichtung senkrechter Linien
%	\timadjust
%


\section{Ausblick}

Die beschriebenen Makros haben ein besseres Ergebnis in der Darstellung 
von Zeitdiagrammen gebracht, als wir gehofft haben. Da sie an unserem 
Institut an der THD einiges Interesse hervorgerufen haben, m�chten wir
sie der Allgemeinheit ebenfalls nicht vorenthalten.

Ein Problem besteht in der unterschiedlichen Ausrichtung der senkrechten 
Linien durch verschiedene Druckertreiber. Wenn diese Linien nicht mittig 
auf den Signal"-�ber"-g�ngen sitzen, sollte zun�chst versucht werden, den 
Wert \verb|max_drift| des Druckertreibers auf 0 zu setzen (nicht bei allen 
Treibern m�glich; bei den dvidrv-Treibern f�r em\TeX\ ist die Option 
\verb|/fd0| anzugeben). Kann dadurch keine Abhilfe geschaffen werden, 
besteht die M�glichkeit, durch den Befehl 
\verb|\renewcommand{\timadjust}{|{\em Dimension}\verb|}| vor dem Beginn 
einer \verb|timing| Umgebung eine Verschiebung der Linien zu erreichen. 

F�r eine Verbesserung in diesem oder auch anderen Punkten bestehen alle 
Freiheiten. Eine weitere Unterst�tzung von Ludwigs Seite wird es 
wahrscheinlich nicht geben, da er, wie die meisten Menschen heutzutage, 
wenig Zeit habe und sich das Interesse dieser Makros und des Zeichensatzes 
nur auf ein paar Datentechniker und VLSI-Spezialisten beschr�nken d�rfte.
Jens wird wohl darauf achten, da� ddas Paket up to date bleibt und evtl.\ 
weitere Features einbauen, wenn es ihm sinnvoll erscheint.

F�r eventuelle positive R�ckmeldungen an folgende Adressen w�rden wir uns 
freuen:

\begin{center}
\parbox{5cm}{
Ludwig May\\
Friedrichstrasse 23b \\
64293 Darmstadt}
\parbox{5cm}{
Jens Leilich\\
Oppauer Stra�e 90\\
67069 Ludwigshafen}
\end{center}

Jens Leilich ist au�erdem unter folgender email-Adresse zu erreichen:

\verb|Jens_Leilich@lu.maus.de|
oder �ber BTX 0621667821-1.

Spenden sind nat�rlich auch willkommen :-).

\newpage

\section{Beispiel}

\def\nicht#1{$\overline{\mbox{#1}}$}
\input{prozt1}
{\hfill Bild~1 : Beispieldiagramm \hfill}

\clearpage\newpage

Definition f�r das Beispieldiagramm aus Bild~1 :

\begin{scriptsize}
\verbatiminput{prozt1}
\end{scriptsize}

\end{document}
