\begin{document} \title{CSD–Zahlendarstellung} \author{Rafael Deliano} \maketitle \begin{multicols}{2} \begin{abstract} Die Multiplikation von festen Koeffizienten, wie sie besonders bei digitalen Filtern benötigt wird, kann im 2er--Komplementformat durch Shift\&Add erfolgen. Dabei sind offensichtlich Koeffizienten günstig, bei denen nur eine geringe Zahl von Bits gesetzt ist. Ein Zahlenformat, das die Zahl der gesetzten Bits minimiert, indem es zusätzlich zu Addition auch Subtraktion verwendet, wird also die Multiplikation beschleunigen. \end{abstract} \section{Das allgemeine SD--Format} ("`Signed Digit"') ist ternär und hat als Grundelemente $-1,0,+1$. In der Literatur wird für die negative Eins eine Überstreichung bevorzugt (Abbildung \ref{bild1}). Da das aber viele DTP--Systeme nicht vertragen, ist ein Kompromiss die Unterstreichung. ASCII--fähig, aber in Zusammenhang mit negativem Vorzeichen problematisch, ist das Verwenden nur der Vorzeichen. Hier wird die Variante mit "`T"' bevorzugt. \begin{figure} \begin{center}\includegraphics{2007-01/csd-bild1}\caption{\label{bild1} Schreibweisen} \end{center} \end{figure} Es sind im SD--Format unterschiedliche Varianten in der Zahlendarstellung möglich. Der Spezialfall CSD ("`Canonical Signed Digit"') \cite{reitwiesner} hat die Eigenschaften: eine minimale Anzahl von 1 bzw. $-1$ und es sind immer Nullen zwischen diesen Ziffern (Abbildung \ref{bild2}). \begin{figure} \begin{center}\includegraphics[width=\columnwidth]{2007-01/csd-bild2}\caption{\label{bild2} Zahlendarstellung} \end{center} \end{figure} Interesse für derartige Rechenwerke war schon zu Zeiten der Röhrencomputer vorhanden. Damals wurden ternäre Codes noch als mögliche Alternative zur heute durchwegs üblichen binären Logik angesehen. Bald aber aus Mainframes verdrängt. In den 70ern für Signalverarbeitung wiederentdeckt \cite{peled} und dann auch 1979 im allerersten DSP, dem Intel 2920 verwendet. Danach speziell in bitseriellen VLSI--Schaltungen, heute zusätzlich vereinzelt auch in FPGAs eingesetzt. \section{Controller} Für variable Koeffizienten im SD--format gäbe es zwar "`Booth's modified algorithm"', eine Variante des gängigen Booth--Multiplizierers \cite{emb}, aber besonders auf Controllern ist nur die Multiplikation fester Koeffizienten im CSD--Format von Interesse. In VLSI--Schaltungen werden die Shifts durch geeignete Verdrahtung ausgeführt, nur die Additionen bzw. Subtraktion benötigen Schaltungen. Auf Controllern sind die Shifts explizit nötig (Abbildung \ref{bild3}). Man kann aus einer Shiftkette mehrere Multiplikationen ableiten (Abbildung \ref{bild4}). Die transponierte Form von kaskadierten Biquads (Abbildung \ref{bild5}) oder FIRs (Abbildung \ref{bild6}) sind hier günstig. \begin{figure} \begin{center}\includegraphics[scale=0.75]{2007-01/csd-bild3}\caption{\label{bild3} Implementierung auf Controller} \end{center} \end{figure} \begin{figure} \begin{center}\includegraphics[scale=0.75]{2007-01/csd-bild4}\caption{\label{bild4} Mehrere Multiplikationen aus einer Shiftkette} \end{center} \end{figure} \begin{figure} \begin{center}\includegraphics[scale=0.8]{2007-01/csd-bild5}\caption{\label{bild5} Kaskadierte transportierte Biquads} \end{center} \end{figure} \begin{figure} \begin{center}\includegraphics[scale=0.8]{2007-01/csd-bild6}\caption{\label{bild6} Transponiertes FIR--Filter} \end{center} \end{figure} \section{Programm} Der ursprüngliche Reitwiesner--Algorithmus (Abbildung \ref{bild7}) wandelt eine vorzeichenlose 2er--Komplementzahl $x$ seriell auf CSD--Format $y$ um. Ein Carrybit $c$ wird als Zwischenspeicher verwendet. Die Benutzung der Tabelle ist anhand eines Rechenbeispiels (Abbildung \ref{bild8}) leicht nachvollziehbar. Das entsprechende Programm (Listing 1) ist trivial, druckt dann aber als Schönheitsfehler LSB links aus. \begin{figure} \begin{center}\includegraphics{2007-01/csd-bild7}\caption{\label{bild7} Tabelle für Umwandlung} \end{center} \end{figure} \begin{figure} \begin{center}\includegraphics{2007-01/csd-bild8}\caption{\label{bild8} Beispiel für Verwendung von Tabelle} \end{center} \end{figure} \begin{thebibliography}{9} \bibitem{emb} emb (2) \bibitem{reitwiesner} Reitwiesner "`Binary Arithmetic"' in: Advances on Computers Vol 1. Academic Press 1960 \bibitem{peled} Peled "`An architecture for digital signal processors"' IEEE Electronics and Aerospace Systems Convention IEEE EASCON 1975 \end{thebibliography} \listinginput[1]{1}{2007-01/csd.fs} \end{multicols} \end{document}