REFERAT-MenüDeutschGeographieGeschichteChemieBiographienElektronik
 EnglischEpochenFranzösischBiologieInformatikItalienisch
 KunstLateinLiteraturMathematikMusikPhilosophie
 PhysikPolitikPsychologieRechtSonstigeSpanisch
 SportTechnikWirtschaftWirtschaftskunde  



Spezielle Hardware fur Digitale Filter



Spezielle Hardware

für

Digitale Filter


1. Allgemeines


Digitale Filter können entweder off-line ('Filterung' eines gespeicherten Datensatzes) oder on-line (Echtzeit­verarbeitung der ankommenden Datensätze) ausgeführt wer­den. Bei off-line Verarbeitung sind die Ansprüche an die Hardware gering, es kann problemlos ein herkömmlicher Computer mit geeignetem Programm eingesetzt werden. Die on-line Verarbeitung wird bereits bei relativ geringen zu verarbeitenden Frequenzen zeitkritisch (bei 20kHz: Ab­tastung mit 40 kHz => 25 us Verarbeitungszeit für einen Abtastpunkt). Diese Geschwindigkeit ist aufgrund der um­fangreichen Rechenoperationen für einen Abtastpunkt für einen herkömmlichen uP nicht mehr erreichbar. Hier werden spezielle Ausführungen benötigt.



Früher wurde bei off-line Verarbeitung prinzipiell 'diskrete' Logik verwendet, heute werden vielfach spezielle Prozessoren für digitale Signalverarbeitung verwendet.


2. Filter mit 'diskreter' Logik


2.1 Multiplizierer


Zur Erreichung hoher Verabeitungsgeschwindigkeiten sind schnelle arithmetische Einheiten notwendig. Hierbei sind speziell die Multiplizierer beachtenswert, da sie meist auf mehrfaches Addieren zurückgeführt werden, und deshalb wesentlich mehr Rechenzeit benötigen, als die Addierer.

Die einfachste Möglichkeit wäre ein Multiplizierer aus einem Addierer und Schieberegistern.








Bild 2.1 Addier-Schiebe-Multiplizierer


Bei diesem Aufbau wird mit Clock 1 der eine Faktor in einem Schieberegister bitweise weitergeschoben. Wenn an den Gattern eine 1 ansteht, wird zum Akkumulator (Ergeb­nis) der Wert des anderen Faktors dazuaddiert. Nach jedem Additions- oder Nichtadditionsvorgang wird der Akkumulator um eine Stelle nach rechts geschoben (Erniedrigung des Stellenwerts).

Dieser Multiplizierer ist zwar vom Aufbau her sehr ein­fach, aber sehr langsam.

Eine schnellere Möglichkeit ist der Array-Multiplizierer, der gänzlich aus Addierern aufgebaut ist.






Bild 2.2 Array-Multiplizierer


Auch dieser Multiplizierer ist noch nicht sehr zeit­­effizient, da er mit Ripple-Carry arbeitet, d. h. der am weitesten links befindliche Addierer liefert erst dann eine gültige Summe, wenn alle Addierer weiter rechts fertig sind.




Bild 2.3 Schnellerer Array-Multiplizierer

Dieser Multiplizierer arbeitet mit diagonalem Carry, sodaß die Summen von niedrigeren Stufen gleichzeitig zu den Addierern auf den höheren Stufen gelangen. Dieses Prinzip heißt Carry-Save und ist auch auf andere als Array-Multiplizierer anwendbar. Die höchste Berechnungszeit ergibt sich hierbei entweder aus 8 Carry-Zeiten, oder 5 Summier-Zeiten, je nach dem welches länger dauert. Im Gegensatz dazu benötigt der Multiplizierer von Bild 2.2 mindestens 2 x 5 Carry-Zeiten + 8 Summier-Zeiten.

Eine weitere Möglichkeit zum Aufbau eines Multiplizierers wäre eine Baum-Struktur, mit der sich die Anzahl der Summier-Zeiten stark verringern ließe. Bild 2.4 zeigt den prinzipiellen Aufbau eines solchen n x 16 Bit-Multiplizie­rers, wobei jedes Plus-Symbol n Bit repräsentiert. Bei diesem Aufbau sind nur 4 Summier-Zeiten nötig. Es wird hier die selbe Anzahl von Addierern verwendet, aber es arbeiten mehr parallel.



Bild 2.4 Multiplizierer mit Baum-Struktur




Bild 2.5 Realisierung eines 6 x 8 Bit-Multiplizierers

mit Baum-Struktur

Bild 2.5 zeigt die Realisierung eines 6 x 8 Bit-Multipli­zierers mit Baum-Struktur, wobei die Carries reihenweise verarbeitet werden. Dadurch benötigt jede Reihe die ge­samte Carry-Ripple-Zeit. Da 4 Reihen vorhanden sind, wird für die gesamte Multiplikation 4 x die Carry-Ripple-Zeit einer Reihe benötigt. Dadurch ist diese Methode nicht so effizient, wie die in Bild 2.3 gezeigte, außer wenn die Summier-Zeit sehr hoch ist. Es ist jedoch auch beim Multi­plizierer mit Baumstruktur der Übergang auf Diagonal-Carry möglich.





Bild 2.6 Array-Multiplizierer mit Diagonal-Carry und

Baumstruktur


Diese Kombination von Baumstruktur und diagonale Weiter­gabe des Carrys ist die wahrscheinlich schnellste Möglich­keit einen Multiplizierer auszuführen.

Die Diskussion der anderen Möglichkeiten des Aufbaus eines Multiplizierers ist aber trotz des eindeutigen Geschwin­digkeitsvorteils der letztgenannten Methode notwendig, da der Aufwand an ICs bei den einzelnen Methoden stark unter­schiedlich ist.

2.2 Ausführung von digitalen Filtern ohne Rückführung     (Finite Duration Impuls Response - FIR)



Bild 2.7 Prinzipschaltbild eines Filters ohne Rückführung


Man könnte dieses Prinzipschaltbild praktisch direkt in eine Schaltung übernehmen, es wären dann aber 6 Multipli­zierer und 7 Addierer nötig, was einen sehr hohen Hard­ware-Aufwand bedeuten würde. Dieses System wird später noch beschrieben.

Die hardwaremäßig einfachste Struktur besteht aus einem ROM zur Speicherung der Koeffizienten, einem Schiebe­register für die Amplitudenwerte, einem Multiplizierer und einem Addierer-Akkumulator.



Bild 2.8 Struktur, Programm und Zustände eines einfachen

Filters ohne Rückführung

Hierbei sind die letzten 6 digitalisierten Amplitudenwerte in einem Schieberegistersatz, bei dem jede Stufe ein ganzes Wort faßt, gespeichert.

Zunächst wird x(n-6) mit dem Koef­fizienten a_6 verknüpft. Das Ergebnis wird im Akkumulator abgelegt. Mit dem ersten Takt wird x(n-6) aus dem Schieberegister herausgeschoben, und x(n-5) steht am Multiplizierer an. Gleichzeitig wurde der aktuelle Ampli­tudenwert in das Schieberegister herein­genommen. x(n-5) wird mit a_5 multipliziert und zum Akku­mulator dazuaddiert. Mit dem nächsten Takt wird das Schieberegister wieder um 1 weitergeschoben, wobei aber x(n-5) nicht aus dem Register hinausgeschoben wird, sondern an den Anfang des Registers zurückgeführt wird. Dieser Vorgang findet nun solange statt, bis x(n)a_0 zum Akkumulator dazuaddiert und an die erste Stelle des Schieberegisters geschoben ist. Dann steht im Akkumulator der richtige Ausgangswert, und der nächste Auswertezyklus kann beginnen.

In der Schaltung aus Bild 2.8 wurde aber noch keine Rück­sicht auf die Verfügbarkeit geeigneter Schieberegister genommen. Die hier dargestellte Methode würde entweder mehrere parallele 1 Bit Schieberegister mit einer relativ einfachen Logik benötigen, oder ein RAM mit einer relativ komplizierten Logik. Es ist aber relativ einfach möglich, auf einem IC tausende von seriell angeordneten Speicher­zellen anzuordnen. Hierbei würde dann aber eine serielle Verarbeitung der einzelnen Wörter nötig.




Bild 2.9. Schaltung aus Bild 2.8. mit rein serieller

Speicherung


In diesem Fall wäre jeder Amplitudenwert seriell ge­­speichert, obwohl es nur für x(n-6) explizit dargestellt ist. Die Multiplikationsroutine sollte hierbei nach der Addier-Schiebe-Methode durchgeführt werden, da die Daten bereits in serieller Form vorliegen. Hierbei würden die Amplitudenwerte zur Ansteuerung der Register verwendet, da diese Faktoren ohnehin geschoben werden müssen. Diese Methode ist sehr einfach für positive Zahlen, benötigt aber für vorzeichenbehaftete Zahlen, die nicht in 2er-Komplementdarstellung gespeichert sind eine relativ komplizierte Logik, weshalb meist die 2er-Komplement-Dar­stellung gewählt wird.

Wie bereits bei der Diskussion erwähnt wurde, ist dieser Multiplizierer relativ langsam, weshalb diese Methode in dieser Ausführung bald an die Grenzen ihrer Möglichkeiten gelangt. Wenn die Schiebezeit pro Bit 100ns beträgt (=> Addierzeit des oberen Addierers < 100ns), die Wortgröße   16 Bit beträgt, und 16 Amplitudenwerte verarbeitet werden müssen (Filter 16.Ordnung), dann ist die höchste verar­beitbare Datenrate


R=1 / (Wortgröße x Ordnung des Filters x Schiebezeit)=

=10_9 / (16 x 16 x 100) = 39062.5 Hz


Mit dieser Datenrate könnten höchstens Frequenzen bis etwa 20kHz verarbeitet werden (Abtasttheorem).

Die Datenrate kann vergrößert werden, indem man Parallel­verarbeitung einführt.

Durch Verwendung mehrerer Schieberegister kann die Ge­schwindigkeit proportional vergrößert werden, ebenso durch Verwendung mehrerer Arithmetikeinheiten (AE)




Bild 2.10 Struktur, Programm und Zustände eines

FIR-Filters mit 2 AE's

Diese Schaltung wäre nicht ganz doppelt so schnell wie die in Bild 2.9 dargestellte, wenn man die gleichen AE's voraus­setzt. Hier würden x(n) bis x(n-3) und x(n-4) bis x(n-6) getrennt und gleichzeitig bearbeitet, und an­schließend die beiden Ergebnisse addiert werden.


2.2.1 Kaskadiertes FIR-Filter


Die selbe Basisstruktur wie in Bild 2.10. kann auch für kaskadierte FIR-Filter verwendet werden. Bild 2.11 zeigt ein Beispiel für ein dreistufiges Filter, wobei jedes Filter 4. Ordnung ist, und Bild 2.12 zeigt die Realisie­rung mit einer AE.






Bild 2.11 Kaskadiertes FIR-Filter







Bild 2.12 Realisierung mit einer AE


Der einzige Trick, der hierbei benötigt wird, ist das Retten der Ausgänge jeder Sektion, um sie zu geeigneter Zeit in das Schieberegister einzuspeisen.

Für größere Geschwindigkeitsansprüche kann das Filter aus Bild 2.11 ebenfalls durch Parallelverarbeitung beschleu­nigt werden. Hierbei gibt es eine besonders ins Auge springende Möglichkeit: Die Realisation jeder Filter­stufe mit einer eigenen AE.


Bild 2.13 Programm und Zustände für Filter aus Bild 2.12




Bild 2.14 Struktur, Programm und Zustände des Filters von

Bild 2.11 mit 3 AE's


2.2.2 Vollparallele Form eines FIR-Filters


Wie bereits in der Einleitung zu diesem Kapitel erwähnt, gibt es die Möglichkeit, das Prinzipschaltbild unter Ver­wendung von 6 Multiplizierern und 7 Addierern bei einem Filter 6. Ordnung praktisch direkt zu übernehmen.


Bild 2.15 Verwendung von N parallelen Zweigen für ein

Filter N-ter Ordnung


In diesem Fall ist keine Zirkulation der Amplitudenwerte nötig, sodaß das Schieberegister nur mehr als angezapfte Verzögerungsleitung benützt wird. Wegen der Notwendigkeit dieser Anzapfungen verschwindet aber der Vorteil der LSI-Bausteine, die zwar sämtliche Amplitudenwerte problemlos speichern können, aber nicht auch gleichzeitig ausgeben. Die Schieberegister können auch hier gleichzeitig bitweise arbeiten, sodaß eine Addier-Schiebe-Multiplikation möglich wird. Hierbei wäre es aber kaum ein zusätzlicher Aufwand, wenn man alle Amplitudenwerte parallel speichert, und einen Schieberegistersatz mit voller Wortbreite verwendet, wodurch auch die Multiplizierer parallel arbeiten könnten (Array-Multiplizierer). Wenn man annimmt, daß die Multi­plikationszeit zur Schiebezeit hinzuaddiert wird, wird noch zusätzliche Zeit zum Addieren benötigt. Diese zusätzliche Zeit kann aber vermieden werden, indem man Buffer (in diesem Fall=Speicher) an den gekennzeichneten Stellen einfügt. Wenn man annimmt, daß die Addierzeit exakt gleich der Multiplikationszeit ist, dann tritt dadurch nur eine Verzögerung des Ausgangssignals um eine Abtastperiode ein.


2.3. Ausführung von digitalen Filtern mit Rückführung

(Infinite Impulse Response IIR)


Die Ausführung von IIR-Filtern unterscheidet sich von jener von FIR-Filtern nur sehr wenig. Bild 2.16 zeigt ein IIR-Filter, das die selbe Grundstruktur wie das FIR-Filter von Bild 2.9. benützt.




Bild 2.16 Struktur eines IIR-Filters mit einer AE


Die Gleichung, nach der dieses Filter arbeitet ist:




Hierbei wird während der ersten Multiplikation (Addier-Schiebe-Prinzip) das Wort y(n-12) aus dem Schieberegister hinausgeschoben. Während der nächsten 11 Multiplikationen zirkuliert das Schieberegister, d.h. die am Ende herausge­schobenen Bits werden am Anfang wieder eingefügt. Das Ergebnis y(n) ist nicht verfügbar, solange nicht bx(n) berechnet ist. Deshalb darf während der Berechnung von bx(n) das Schieberegister nicht rotiert werden. Im letzten Schiebezyklus wird dann keine Berechnung mehr durchge­führt, sondern nur mehr y(n) in das Schieberegister hinein­geschoben.

In typischen Anwendungen beträgt die Abtastfrequenz 8kHz und die Abtastzeit 125us. Bei einer Wortlänge von 16 Bit werden 16 x (12 + 2) Taktzyklen für einen Abtastvorgang eines Filters 12.Ordnung benötigt, was zu einer Takt­frequenz von etwa 2MHz führt, die mit LSI-Bausteinen leicht zu bewältigen ist.


2.3.1 Kaskadierte IIR-Filter


Bild 2.17 zeigt das Prinzipschaltbild einer Kaskade von 3 Filtern 2. Ordnung, von denen jedes 2 Pole und 2 Nullstel­len hat.


Bild 2.17 IIR-Filter als Kaskade 3er Filter 2.Ordnung


Bild 2.18 zeigt Struktur, Programm und Zustände einer Realisation dieses Filters mit 2 AE's. Die Struktur ist vergleichbar mit dem früher gezeigten mit 1 Bit breiten Schieberegister und Addier-Schiebe Multiplizierer. Die Aufgabenstellung der beiden AE's ist so verteilt, daß eine die Vorwärts-Summen berechnet (AE2) und die andere die in das Schieberegister einzuspeisenden Summen (AE1).

Da die in das Schieberegister einzuspeisenden Daten vor­handen sein müssen, bevor die Vorwärtssummen endgültig berechnet werden können, folgen auf 2 Schiebezyklen 2 Zyklen, in denen nicht geschoben wird, sondern nur die AE's arbeiten. Während dieser Zeit wird zunächst das in das Schieberegister einzuspeisende Datum berechnet, und anschließend unter Verwendung dieses Datums die Vorwärts­summe berechnet, die für die ersten beiden Filter im x_i-Register abgelegt wird, und für das letzte Filter an den Ausgang gelangt.

Dieses Filter benötigt insgesamt 7 Schiebezyklen mit Be­rechnungen und 6 Zyklen, in denen nur gerechnet wird. Die reinen Schiebezyklen, in denen nur die x_0(n), x_1(n) und x_2(n) weitergeschoben werden, können während der zweiten reinen Berechnung stattfinden.



Bild 2.15 IIR-Filter von 2.17 mit 2 AE's


2.4. gemultiplexte Filterbänke


Nur sehr selten sind in der Praxis so einfache Konfigu­rationen wie die hier gezeigten in Verwendung. Wesentlich häufiger sind Filterbänke, die IIR oder FIR-Filter verwen­den, wo möglicherweise jedes Filter eine Kaskade oder eine parallele Ausführung ist. Desto mehr Filter gemultiplext werden können, desto größer ist der Vorteil, der durch die Verwendung von digitalen Filtern erzielt werden kann, da man speziell die Speicher leicht an die speziellen Erfor­dernisse der zusätzlichen Zustände anpassen kann. Vorsicht ist hierbei nur geboten, wenn man zu viele verschiedene Funktionen mit einer Filtereinheit realisieren will, da dann die Kontrollogik schnell anwächst.

Die Bilder 2.19 und 2.20 zeigen ein Beispiel der Realisa­tion von 3 getrennten FIR-Filtern mit einer Filter­einheit.


Bild 2.19 Filter, die zu multiplexen sind


Bei der gezeigten Konfiguration wird der AE jeweils das passende Eingangsdatum zugeführt, und über den Distributor werden jeweils die richtigen Daten an die Ausgänge ver­teilt. Im Schieberegister zirkulieren jeweils die Daten aller 3 Filter.


Bild 2.20 Hardware-Konfiguration und Programm für

gemultiplexte FIR-Filter

3. Digitale Filter mit Digitalen Signalprozessor IC's

(DSP)


3.1 Allgemeine Features von DSP


Digitale Signalprozessoren müssen für Echtzeitverarbeitung einen sehr hohen Datendurchsatz haben, der größer ist als jener von herkömmlichen Mikroprozessoren. Da aber die Taktraten bei Mikroprozessoren in der Regel bereits knapp am technologisch sinnvoll Machbaren liegen, stellt sich die Frage welche Mittel man anwenden kann, um einen DSP schneller zu machen?

Zum einen liegt die Antwort in der Architektur der DSP's. Diese Prozessoren werden immer mit einer relativ großen Wortbreite (16 oder 32 Bit) ausgeführt, und haben Fest- oder Fließkomma-Arithmetik bereits hardwaremäßig implemen­tiert. Dadurch ist bereits eine gewisse Parallelverar­beitung von Informationen möglich.

Außerdem werden sie oft mit einer Pipeline-Architektur  gebaut, die zwar noch keine vollständige Parallelverar­beitung ausmacht, aber immerhin garantiert, daß Arbeits­schritte, die nicht zwingend hintereinander ablaufen müs­sen, gleichzeitig erfolgen. Diese Fähigkeit sei an folgen­dem Beispiel erklärt: Um einen Befehl abzuarbei­ten ist es notwendig, daß dieser erst einmal aus dem Programmspeicher in den Prozessor geladen wird (Instruction-fetch), dann entschlüsselt wird, was auszu­führen ist, (instruction-decode) und schließlich muß der Befehl auch abgearbeitet wer­den (execution). Der Prozessor gewinnt an Geschwin­digkeit, wenn er die Fähigkeit besitzt. während der Aus­führung eines Befehls den nächsten bereits zu laden und zu dekodieren. Dieses Verfahren verwenden übrigens nicht nur DSP, sondern auch die Mikroprozessoren der letzten Generation (Intel 80386).

Eine weitere Methode zur Beschleunigung eines Prozessors ist die Implementierung der Harvard-Architektur. Auch diese stellt einen Schritt in Richtung Parallelverarbei­tung dar. Dabei werden Programm und Daten in getrennten Bereichen gespeichert, und auch über eigene Busse ge­führt. Allerdings führt dieses Verfahren schnell zu hoher Komplexität der Hardware, weshalb oft folgender Weg be­schritten wird: Innerhalb des Prozessors wird der Bus getrennt geführt, außerhalb wird durch Multiplextechnik die doppelte Busstruktur auf eine einfache reduziert, um den Aufwand an extern erforderlicher Hardware gering zu halten. Welcher Architektur im konkreten Anwendungsfall der Vorzug zu geben ist, hängt davon ab, wie zeitkritisch die Applikation ist, bzw. wie weit ökonomische Gesichts­punkte berücksichtigt werden müssen. Der Zeitfaktor wird aber in der Regel dadurch gemildert, daß die meisten DSP's bereits internes RAM und ROM besitzen, das sie über die getrennten Busse ansprechen können. Ein wesentlicher Fak­tor zur Erhöhung der Arbeitsgeschwindigkeit ist die Imple­mentierung eines Hardware-Multiplizierers, da die Multiplikation als typischer Befehl in signalverarbeiten­den Algorythmen bei einer Realisierung über Software sehr viel Zeit in Anspruch nehmen würde. Ein moderner 16x16 Bit Hardware-Multiplizierer benötigt zur Produktbildung etwa 100 bis 200ns, während selbst moderne Mikroprozessoren dafür einige Mikrosekunden benötigen. Wenn man bedenkt, daß etwa in einem digitalen Audiosystem zur Abarbeitung einfacher Filteralgorythmen maximal 30us zu Verfügung stehen und daß dabei mehrere Multiplikationen sowie Additionen und Schiebeoperationen (neben Ein- Ausgabebe­fehlen) durchzuführen sind, wird der Einsatz spezieller Prozessoren unentbehrlich, wenn man nicht auf eine 'dis­krete' Logik wie in Abschnitt 2 beschrieben zurückgreifen will.





Bild 3.1 Blockschaltbild eines gebräuchlichen DSP IC's

mit Harvard-Architektur und Hardware Multiplizierer

(Texas Instruments TMS 32010)


Die bisher genannten Methoden zur Vergrößerung des Daten­durchsatzes sind nicht unbedingt typisch für DSP's, sondern der Technologie von Großrechnern entlehnt. Die zweite Kategorie von Maßnahmen, die einen Signalprozessor für eine bestimmte Aufgabe geeignet oder ungeeignet er­scheinen läßt, wird dadurch gesetzt, daß sein Anwendungs­gebiet bekannt ist. Der Zugang dazu wird sowohl über Hard- als auch Software ermöglicht.

Von der Softwareseite erfolgt die Problemlösung über die Gestaltung des Befehlssatzes. Da der Prozessor ja nur für ein ganz bestimmtes Anwendungsgebiet gedacht ist, kann der Befehlssatz spezielle Instruktionen enthalten, die die Verarbeitung bestimmter Algorythmen begünstigen. Darüber hinaus kann eine Instruktion mehrere Operationen aus­führen. Damit kann der für einen speziellen Anwendungsfall gedachte DSP unter Umständen mit einem einzigen Befehl das erreichen, wofür ein herkömmlicher Mikroprozessor ein ganzes Unterprogramm benötigen würde. So kann z.B. bei einem Signalprozessor in einem einzigen Befehl ein gerade erstelltes Produkt zum Akkumulator addiert werden, das Multiplikanden-Register mit dem nächsten Wert geladen und dieser Wert im Datenram auf die nächste Seite kopiert werden. Alle drei Einzeloperationen sind bei der Realisierung eines Digitalfilters von größter Wichtigkeit, und die Ausführungszeit liegt bei einem DSP in der Größen­ordnung von etwa 200ns. Außerdem beschleunigen Bit-Test­befehle, die ein bestimmtes Bit in einem Wort testen können ohne vorher maskieren zu müssen, den Ablauf.

Das Wissen um das spezielle Einsatzgebiet erlaubt die entsprechende Gestaltung des Prozessor-Hardwareaufbaus. Die Möglichkeiten reichen hier vom Einsatz verschiedener ALU's für verschiedene Aufgaben, die dann gleichzeitig gelöst werden können über spezielle Register, die bestim­mte Befehle abarbeiten, ohne daß die Daten dazu in den Akkumulator transportiert werden müssen, bis zu Rück­kopplungswegen, die bestimmte Befehle (z.B. multipliziere und akkumuliere) erst ermöglichen. Daneben können noch Wiederholzähler (für rekursive Algorithmen) und Barrel­shifter (der Befehl enthält die Anzahl der Stellen, um die der Operand verschoben wird, und erspart damit mehrmaligen Aufruf eines Befehls, der nur imstande ist, um ein Bit zu verschieben) vorgesehen sein. Ein entsprechend großer RAM-Bereich auf dem Prozessorchip ermöglicht die sinnvolle Nutzung der getrennten Programm- und Datenbusstruktur, wobei auch hier der Befehlssatz den Datenaustausch zwischen Programm und Datenbus wirksam unterstützt. So kann mit einem einfachen Befehl ein Abschnitt des Programmspeichers in den Datenspeicher übertragen werden. Filterkoeffizienten können damit in vergleichsweise große externe Programm-RAM's (oder EPROM's) abgelegt werden und bei Bedarf in den kleinen internen Datenspeicher des Signalprozessors geholt werden, da die ALU oft nur Daten vom internen RAM direkt verarbeiten kann. Einige Herstel­ler bieten auch erweiterte Versionen an, bei denen ein schneller Analog-Digital-Wandler auf dem Chip integriert ist, was bei qualitativ weniger kritischen Anwendungen Vorteile bringen kann.


3.2 DSP mit Harvard-Architektur


Diese Art von DSP soll am TMS 320xx von TI dargestellt werden.


Das Blockschaltbild dieses Prozessors ist bereits in Bild 3.1 dargestellt.

Die wichtigsten Merkmale dieses Einchip-Computers sind: 200ns Instruktionszyklus, 32 Bit Arithmetikeinheit, 16x16 Bit Parallelmultiplizierer (benötigt für eine Multiplikation nur einen Zyklus), 0..16 Bit Barrel-Shifter, 288 Byte Daten RAM (144x16), 3kByte Programm-Rom (1,5k x 16), die extern auf 8 kByte erweiterbar sind.

Dieser Prozessor arbeitet mit einer Harvard Architektur mit 2 getrennten 16 Bit-Bussen für Programm und Daten. Durch diese Struktur ist es möglich, Befehle zeitlich überlappend aufzunehmen und auszuführen.


Architektur:


Das Herzstück des Prozessors ist eine schnelle Arithmetik-einheit, die aus einer 32 Bit-ALU, einem 16 Bit Shifter, dem 16x16 Bit Parallelmultiplizierer sowie einem 32 Bit Akkumulator besteht. Daten werden entweder aus dem RAM über den Shifter oder aus dem Produktregister P in die ALU geladen. Daten aus dem RAM mit einer Wortbreite von 16 Bit werden nach Schiebeoperationen mit Vorzeichenzusatz für Zweierkomplement-Arithmetik auf 32 Bit erweitert. Arithmetik-Operationen mit 32 Bit aus dem RAM werden auch durch eine Kombination spezieller Befehle, bei denen die Vorzeichenerweiterung im Shifter unterdrückt wird, unter­stützt. Die ALU verfügt auch über logische Operationsan­wendungen für Steueranwendungen. Eine Sättigungs-Überlauf-Betriebsart dient zur Simulation von Sättigungsereignissen in Signalverarbeitungssystemen. Der 32 Bit Akkumulator wird im Multiplexbetrieb auf den 16 Bit Datenbus umge­schaltet, damit die Resultate im RAM gespeichert werden können. Die höherwertigen Akkumulatorwerte können auch mit einem vorgegebenen Offset gespeichert werden, um die Skalierung der Resultate zu ermöglichen.


Adressierungsarten:


Der Prozessor unterstützt 4 Adressierungsarten. Die erste ist die direkte Adressierung, sie erfolgt von einem 7 Bit-Feld der Instruktion und einem Page-Register.Der Speicher ist für die direkte Adressierung in 128 Wort-Seiten aufge­teilt.

Die zweite ist die indirekte Adressierung, bei der eines der 2 Hilfsregister (AR) Verwendung findet. Diese Register unterstützen die automatischen Inkrement-/Dekrement-Operationen parallel zu Speicherbezügen und Arithmetik­operationen. Daraus ergeben sich zwei verschiedene Adres­sierungsarten. Die Auswahl des AR-Registers als Quelle für eine Adresse wird durch das ARP-Register festgelegt. Der Datenspeicher ist so aufgebaut, daß ein Wort auf die nächsthöhere Adresse vom derzeitigen Speicherplatz in einem Maschinenzyklus dupliziert werden kann, während andere Operationen parallel ablaufen. Außerdem sind einige direkte Operationen möglich, bei denen Teile des Instruktionsworts als Daten Verwendung finden. Aus diesem Grund können Konstanten wie z.B. Filterkoeffizienten Teil des Programms sein.

Da Programm- und Datenbus getrennt sind, verfügt der Programm-Zähler über einen eigenen Inkrementer und einen 4-Ebenen-Stack für die Unterprogrammsteuerung.


Software:


Der Prozessor verwendet 16 und 32 Bit Instruktionen. Bei Unterprogrammen und Interrupts wird der gesamte Maschinen-Kontext gesichert. Verzweigungen können bei den meisten arithmetischen Bedingungen, bei Überlauf, bei Register = 0 und ohne Bedingung erfolgen. Es ist ebenfalls möglich, den Akkumulator-Inhalt als Programm-ROM-Adresse zu verwenden, um an Konstanten, die im ROM gespeichert sind, zu gelan­gen, oder zum Unterprogrammaufruf bei datenabhängigen Verarbeitungsvorgängen. Der Prozessor ist zur Unter­stützung von 2 Arten der Programm-Speicher-Operationen konfiguriert. Die erste Konfiguration (TMS320M10) besitzt ein Programm-ROM auf dem Chip, und eignet sich daher für Einchip-Anwendungen mit hoher Stückzahl. Eine Kombination von internem ROM (1,5 k Worte) und externem Programm­speicher (2,5 k Worte) ist ebenfalls möglich, und kann z.B. bei Systemen mit festen Kernroutinen und unterschied­lichen Anwendungs-System-Konfigurationen verwendet werden. Die zweite Ausführung (TMS 32010) unterstützt 4 k Worte externen Programmspeicher und unterdrückt das interne ROM. Diese Ausführung ermöglicht, daß das Benutzer-Programm in einem externen 4 k Speicher untergebracht ist, und die Entwicklungssystem-Software in dem Programm-ROM auf dem Chip. Daher kann dieses Bauelement nicht nur zur Unter­stützung der Eigen-Emulation, sondern auch als das eigene Entwicklungssystem verwendet werden. Das Interface des externen Programmspeichers arbeitet mit der selben Ge­schwindigkeit, wie das interne ROM, wodurch Echtzeit-Ent­wicklung und -Ausführung möglich ist.

Ein-/Ausgangsoperationen werden über einen parallelen 16 Bit Bus ausgeführt, auf dem 8 Kanäle definiert sind. Der Prozessor kann E/A-Operationen mit einer Rate von 40 MBaud ausführen. Ein Polling-Eingang ermöglicht softwaremäßige E/A-Steuerung, außerdem ist ein Interrupt-Anschluß für Hardware E/A und Multitasking vorgesehen.


Chip


Hergestellt wird der Prozessor in einem 3um Silizium-Gate-NMOS-Pozeß. Er umfaßt eine Chipfläche von 43,81 mm_2. Die Bausteine sind in einem 40poligem DIL-Gehäuse unterge­bracht und weisen eine Verlustleistung von 950mW auf. Bei einer maximalen Taktfrequenz von 20MHz beträgt die Be­fehls-Rate 5 Millionen Instruktionen/s. Verschiedene Test­arten sind zur Produktionsüberwachung und Ausbeuteanalyse vorgesehen. Für Prüfzwecke und Zuverläßigkeitsanalysen sind Prozessor, Datenspeicher und PROM auf dem Chip ge­trennt ansprechbar.


3.3 DSP mit Datenfluß-Methode


Der bisher besprochene 320xx ist trotz verbesserter Architektur ein Von-Neumann-Computer, bei dem ein Zyklus das Senden der Adresse, Empfangen des Datums, Entschlüs­seln und Verarbeiten umfaßt. Der hier beschriebene uPD7281 ('Image-Pipelined-Processor') verwen­det die Datenfluß-Methode.


3.3.1 Datenflußmethode


Der Unterschied in der Arbeitsweise eines Computers, der die Datenflußmethode anwendet sei an einem einfachen Bei­spiel dargestellt; der Berechnung des folgenden Ausdrucks:


Y = AxB + CxD


Ein von Neumann Computer berechnet zunächst beide Produkte, die er anschließend addiert (Bild 3.2). Hierbei ist nicht einzusehen, warum er eigentlich die beiden Multiplikationen Y1 = AxB und Y2 = CxD nicht gleichzeitig ausführt.


Bild 3.2 Flußdiagramm einer Berechnung mit einem

Von-Neumann-Computer


Ein Datenfluß-Computer ermöglicht diese Art von Parallel-Operationen. Er verfügt über eine Anzahl datengetriebener Arithmetik-Einheiten, die die Operationen beginnen, sobald Daten einlangen. Dieser Vorzug ermöglicht den asynchronen Betrieb jeder Arithmetik-Einheit. Zusätzlich zu diesen Arithmetik-Einheiten besitzt der Datenfluß-Computer einen Fluß-Controller, dessen Aufgabe es ist zu bestimmen, wohin welche Daten gesandt werden sollen. Die Daten selbst sind mit einer ID (Identifikation) versehen und bezeichnen ihren Ursprung.



Bild 3.3 Datenfluß-Methode


Aus diesem Grund ist es nicht erforderlich, die Instruktionen durch das Programm zu beschreiben, und es ist nicht nötig, die Reihenfolge der Abarbeitung anzugeben. Es muß lediglich der Fluß der zu verarbeitenden Daten beschrieben werden.

Da die Flußdiagramme für Von-Neumann-Computer weniger geeignet sind, Datenflüsse und Parallelverarbeitung inner­halb eines Programmes auszudrücken, werden sogenannte Flowgraphs_*) angewendet, um solche Programme schematisch

_ *) Flowgraphs bestehen aus Knoten, die den Operanden eines Ausdrucks entsprechen (den auszuführenden Befehlen) und Richtungssegmenten, oder 'arcs', die den Datenflß be­zeichnen. Flowgraphs bringen weniger eine sequentielle Abarbeitung zum Ausdruck, als vielmehr die Parallelver­arbeitung bestimmter Prozesse. Die DAten, die zwischen den Knoten fließen werden als Token bezeichnet. Jene Information, die die Hardware steuert, wird den Token hinzugefügt, sobald sie durch die verschiedenen Hardware-Stufen fließen

darzustellen. Der Flowgraph für die Berechnung von


Y = AxB + CxD


ist in Bild 3.4 dargestellt.


Bild 3.4 Flowgraph einer Berechnung mit einem Datenfluß-

Computer


Hier wird veranschaulicht, daß die beiden Operationen für Y1 = AxB und Y2 = CxD parallel ausgeführt werden. Der Unterschied zu einem Von-Neumann-Computer wird noch augen­fälliger, wenn die Instruktionen tatsächlich auf einem Datenfluß-Computer ausgeführt werden. Um in einem Von-Neumann-Computer eine Instruktion ausführen zu können, muß das Objekt-Programm zunächst von jener Stelle des Speichers ausgelesen werden, an der es abgelegt wurde. Die abgerufene Instruktion wird decodiert, und die für die Ausführung erforderlichen Daten werden zusammengestellt. Ein Großteil der Ausführungszeit fällt damit dem Speicher­zugriff zum Opfer. Daher ist die traditionelle Computer-Architektur für Hochgeschwindigkeitsverarbeitung nicht ideal. Im Datenfluß-Computer werden dagegen, sobald das Objekt-Programm gesetzt ist, die Instruktionen ausgeführt, sobald die nötigen Daten anstehen.

Als weiteres Beispiel sei die logische UND-Verknüpfung zweier Daten angeführt. Hier nimmt man an, daß die Ausführungszeit eines herkömmlichen Von-Neumann-Computers gleich sei mit der eines Datenfluß-Computers (von den bereitgestellten Daten ausgehend) Bild 3.5 zeigt, daß auch hier der Datenfluß-Computer den herkömmlichen Computer bei weitem Übertrifft.




Bild 3.5 Zeitdiagramm für einen Von-Neumann- und einen

Datenfluß-Computer


Ein weiterer Vorzug von Computern, die sich der Datenfluß­methode bedienen, ist der hohe Überschneidungsgrad der abgearbeiteten Operationen. Während beispielsweise ein Prozeß ausgeführt wird, kann gleichzeitig die Zusammen­stellung von Daten für den nächsten Prozeß ablaufen. Be­finden sich diese Daten in einem Speicher, kann die effektive Zugriffszeit nach außen hin nahezu auf Null gesenkt werden.


Bild 3.6 Prozessausführungen in einem Datenfluß- und

einem Von-Neumann-Computer


Zusammenfassend kenn ein Datenfluß-Computer, verglichen mit einem Von-Neumann-Computer die Anzahl der Speicher­zugriffe drastisch reduzieren, und die Zugriffszeit be­sonders effektiv nutzen.


3.3.2 NEC uPD7281 'Image Pipelined Processor'


Der Datenfluß-Computer in Bild 3.2 enthält mehrere Arithmetik-Einheiten. Wird diese Vielzahl von Einheiten in einem einzelnen Bauteil zusammengefaßt, bedeutet das eine beträchtliche Steigerung der Verarbeitungsgeschwindigkeit. Der Flußcontroller in einem solchen Baustein müßte aber über alle Maßen komplex sein; da jede Einheit nur eine spezifische Operation ausführt, ist bei komplizierteren Operationen eine entsprechend hohe Anzahl solcher Ein­heiten beteiligt. Zusätzlich weist das System einen weiteren Schwachpunkt auf: auch wenn viele Einheiten zum Einsatz kommen, ist das Risiko sehr groß, daß durch Daten­konzentration an einer Arithmetik-Einheit die Verarbeitung zusammenbricht. Aus diesem Grund findet im uPD7281 eine einzige universelle ALU Verwendung.

Im vorher beschriebenen Computer ist jeder Einheit eine bestimmte Aufgaabe zugedacht. Welche Einheit angesprochen wird, hängt vom Identifizier-Feld des Token ab. Im Fall des uPD7281 müssen jedoch die Daten, die die Art der Operation bestimmen, im Token enthalten sein. Der an die ALU kommende Token enthält daher einen Operationscode. Weiters kann der in Bild 3.3 gezeigte Flow-Controller in folgende vier Blöcke gegliedert werden:


Link Table:    Checkt die IDs der ankommenden Token und leitet den nächsten ID-Wert und die OP-Code Adresse zum Token

Function Table: Fügt dem Token einen OP-Code hinzu

Data Memory:    Steuert die Daten, die zwei Token für eine bestimmte Operation zusammengetragen haben

Queue:         Steuert den Eingang der Token zu den Verarbeitungseinheiten



Bild 3.7 Blockschaltbild des uPD7281


Wenn die Token die erwähnten Blöcke durchlaufen, werden ihnen Daten hinzugefügt und einige Token zu Einzel-Token zusammengefaßt. Anschließend gelangen sie in die Verarbei­tungseinheit oder den Ausgangscontroller. Das Format der den uPD7281 verlassenden Token (entweder über den Aus­gangscontroller oder über die Verarbeitungseinheit zur Link-Table) ist gleich dem Format jener Token, die als Eingangsinformation an den Eingangscontroller gelangen. Alle diese Konzepte sind in Bild 3.7 dargestellt. Durch den pipelineartigen Datenfluß zwischen den Funktions­blöcken wird die Weiterleitung der Daten zwischen den Blöcken vereinfacht. Jeder dieser Link-Table-, Function-Table- und Data-Memory-Blöcke ist im RAM konfiguriert, sodaß Programme einfach modifiziert werden können, indem die Inhalte dieser Speicher neu geschrieben werden. Diese Methode wird auch programmierbare Pipeline-Methode ge­nannt.

Obwohl der uPD7281 nur eine einzige Arithmetik-Einheit besitzt, können mehrere Prozesse glechzeitig ablaufen. Da der externe Speicherzugriff, anders als bei Von-Neumann-Computern, nur aus dem Lesen und Schreiben von Daten besteht, kann die Gesamtanzahl von Speicherzugriffen auch bei dieser Realisation eines Datenfluß-Computers drastisch gesenkt werden. Außerdem ist durch die Parallelverarbei­tung die Speicherzugriffszeit als Teil der Bearbeitungs­zeit nahezu nicht mehr erkennbar.


Funktionsbeschreibung


Wie Bild 3.7 zeigt, besteht die ringförmige Pipeline aus 5 Funktionsblöcken:

- Link Table (LT)

- Function Table (FT)

- Data Memory (DM)

- Queue (Q)

- Processing Unit (PU)

Der durch den Input Controller (IC) einlangende Token wird an die Link-Table weitergeführt und im Pipeline-Ring so oft als nötig bearbeitet. Ist diese Bearbeitung abge­schlossen, so wird der Token im Output Queue abgestellt und über den Output Controller (OC) zum Ausgang weiterge­führt.

Bevor irgendeine Bearbeitung beginnt, lädt der Host-Prozessor den Objekt-Code in die Link-Table und die Function Table des uPD7281 unter Verwendung speziell formatierter Eingangs-Token. Zu diesem Zeitpunkt können auch Konstanten zur Abspeicherung an den Datenspeicher gesandt werden. Die Inhalte der Link-Table und der Function-Table sind eng verwandt mit der grafischen Dar­stellung einer Berechnung. Wenn ein Rechenprozess grafisch dargestellt wird, zeigt er gewöhnlich einen gerichteten Datenfluß. In einer derartigen Darstellung bedeuten die Bögen (Ecken, Verbindungen usw.) den Eintritt in die Link-Table. Ein Knoten im grafischen Datenfluß bezeichnet eine Operation. Die Art der Operation wird zusammen mit der Identifikations-Information über den austretenden Bogen in der Function-Table angegeben.

Da der uPD7281 in einem Multiprozessorsystem kaskadiert werden kann, muß ihm während des Reset eine Modul-Nummer zugeteilt werden. Wenn nun während des normalen Betriebs ein Token zum Input-Controller gelangt, dann entscheidet dieser anhand der Information im Modul-Nummer-Feld des ankommenden Token, ob er ihn akzeptiert, oder nicht. Wenn die Modul-Nummer des Token von der des uPD7281 abweicht, wird der Token über den Output-Controller wieder nach außen geschickt. Besitzt der Token die selbe Modul-Nummer,




Bild 3.7 Kaskadierung von uPD7281 (maximal 14)


entfernt der Input-Controller das Modul-Nummern-Feld, und schickt den verbleibenden Teil des Token in die Link-Table zur Weiterverarbeitung. Sobald ein Token in die Pipeline eintritt, indem er Zugang zur Link-Table erhlaten hat, benötigt er 7 Pipeline-Clockzyklen, um den Ring einmal zu durchlaufen. Je einen Pipeline-Zyklus benötigen die Link-Table, die Function-Table und das Data-Memory, um einen Token zu bearbeiten; zwei Pipeline-Zyklen beanspruchen der Queue und die Processing-Unit.  Die Queue und die Processing-Unit sind aus zweistufigen Pipelines aufgebaut. Wenn sich sieben Token gleichzeitig in der Ring-Pipeline befinden, ist diese voll besetzt, und höchstmögliche Parallelverarbeitung findet statt.

Wenn ein Token durch alle Funktionsblöcke des uPD7281 fließt, ändert sich dessen Struktur gewaltig. Ein inner­halb der Ring-Pipeline fließender Daten-Token besitzt mindestens ein 7 Bit breites Identifizier-Feld (ID), und ein 18 Bit breites Datenfeld. Das Identifizier-Feld dient als Zugriffsadresse auf das Link-Table-Memory. Wenn ein Token auf das LT-Memory zugreift, wird dessen ID-Feld durch ein im LT-Memory gespeichertes ID-Feld ersetzt.

Das Datenfeld eines Token besteht aus einem Control-Bit, Vor­zeichen-Bit und 16 Bit Daten. Ein Token kann bis zu zwei Datenfelder sowie je nach Bedarf auch noch ein OP-Code-Feld besitzen.


Prozessoreigenschaften


Schnelle Datenverarbeitung


Die hier verwendete Architektur ist besonders geeignet zur schnellen Handhabung von iterativen Operationen, wie sie zum Beispiel in der Bildverarbeitung vorkommen. Bei bis­herigen Prozessoren, die nach dem Pipeline-Verfahren ar­beiteten, waren die ausführbaren Operationen durch die Hardware bereits festgelegt. Im uPD7281 können alle Operationen im User-Programm beliebig geändert werden, außerdem können mehrere Prozesse gleichzeitig ablaufen.


Schnelle Arithmetik-Operationen


Der uPD 7281 benötigt für alle Operationen (einschließlich Multiplikation) eine Verarbeitungszeit von 200ns (bei 10MHz), was einer Arbeitsgeschwindigkeit von 5MIPS (Millionen Instruktionen pro Sekunde) entspricht.


Problemlose Multiprozessor-Konfiguration


Die Hochgeschwindigkeitsverarbeitung läßt sich durch den Einsatz mehrerer uPD7281 noch verbessern. Hierbei ist die einfache Zusammenschaltung (vergleiche Bild 3.8) besonders günstig.


Schnelle Daten I/O


In einer Multiprozessor-Konfiguration stellt oft der Datenbus den leistungsbegrenzenden Engpass dar. Um dies Auszuschalten verwendet der uPD7281 getrennte Ein- und Ausgangsleitungen und erreicht so wesentlich verbessete Übertragungsraten. Eine asynchrone Handshaking-Methode auf 2 Leitungen verringert hierbei den externen Schaltungsauf­wand wesentlich.

Anhang: Literaturverzeichnis


Theory and Application of Digital Signal Processing

Lawrence R. Rabiner

Bernard Gold

Verlag: Prentice-Hall Inc.


32 Bit Mikrocomputer für Signalverarbeitung und

Prozessteuerung

P. von Bechen

TI Sonderdruck aus Elektronik 22 / 5.11.1982


DSP: Ein zugeschnitzter uP

J. Thoma

F. Pavuza

ES 6 / Juni 1986


Signalprozessor für die Bildverarbeitung

R. Hell

ES 6 / Juni 1986










Haupt | Fügen Sie Referat | Kontakt | Impressum | Nutzungsbedingungen







Neu artikel