51497.jpg

Die digitale Signalverarbeitung ist eine Sammlung von Verfahren der Nachrichtentechnik mit einer Vielfalt von Anwendungsbereichen. Mit Hilfe von Signalprozessoren (DSP) und entsprechenden Algorithmen können Filter, Kompressoren oder Fehlerunterdrückungssysteme realisiert werden, die man in analoger Schaltungstechnik gar nicht oder nur mit enormen Aufwand erstellen könnte.

Bild 1: Datenflussmodell eines FIR-Filters.

Bild 1: Datenflussmodell eines FIR-Filters.Arrow Electronics

Digitale Filter mit endlicher Sprungantwort, so genannte FIR-Filter (finite impulse response), gehören zu den wichtigsten Basiselementen der digitalen Signalverarbeitung. Eine Binärzahl x, die üblicherweise einer zeitlich veränderlichen physikalischen Größe entspricht, wird mit einem konstanten Takt durch eine Kette von Registern geschoben. Der Ausgang jedes Registers sowie die aktuell anliegende Zahl x werden mit linearen Übertragungsfunktionen bn, also der Multiplikation mit einem konstanten Faktor, beaufschlagt. Alle Funktionsergebnisse werden zur Ausgangsgröße y aufaddiert (Bild 1).

Auf einen Blick

Digitale Signalverarbeitung ist nicht nur etwas für große FPGAs oder DSPs. Auch in einem kleinen CPLD mit RAM kann man analoge Signale digital verarbeiten und dabei eine Rechenleistung jenseits derer erreichen, die mit Mikrocontrollern möglich wäre. Das kleine CPLD des Beispieldesigns rechnet jedenfalls 2 x 256 x 48.000, also etwas über 24 Millionen Multiplikationen und Additionen pro Sekunde. Und da wäre noch Luft für zwei weitere Kanäle, sowohl von den Ressourcen her, als auch von der Rechenleistung.

Die Übertragungsfunktion des Filters hinsichtlich Frequenz und Phase wird von den konstanten Faktoren, genannt Koeffizienten, sowie der Abtastfrequenz bestimmt. Die Koeffizienten bestimmen, ob das FIR-Filter einen Tiefpass, einen Hochpass oder einen Bandpass darstellt. Die Schaltung des Filters an sich bleibt dabei immer genau gleich. Man bezeichnet die Anzahl von Registerstufen als digitale Ordnung des Filters; daneben gibt es die Ordnung des analogen Filters, das man damit erstellt. So ist es völlig normal, mit einem FIR-Filter 63-ster Ordnung einen Butterworth-Tiefpass vierter Ordnung zu realisieren. Je höher die digitale Ordnung ist, umso genauer kann man das ideale Verhalten analoger Filter erreichen. Doch eine hohe digitale Filterordnung hat auch ihren Preis.

Parallele oder sequenzielle Implementierung?

Bei einer parallelen Implementierung ist das Blockschaltbild identisch zu dem obigen Datenflussmodell. Man setzt also genau so viele Multiplizierer ein wie es Übertragungsfunktionen gibt. Ziel dieser parallelen Anordnung ist es, in jedem Taktzyklus einen Abtastwert zu verarbeiten. Das kostet allerdings viele FPGA-Ressourcen und damit Geld. Es gibt eine Reihe von Optimierungsmöglichkeiten wie zum Beispiel Pipelining, um eine möglichst hohe Arbeitsfrequenz des Filters zu erreichen, oder die „Faltung in der Mitte“ bei symmetrischen Koeffizienten zur Einsparung von Ressourcen. Trotzdem bleibt eine parallele Implementierung eine teure Angelegenheit.

Eine sequenzielle Implementierung arbeitet alle Abtastwerte und ihre Koeffizienten nacheinander ab, was zu einem höheren Zeitaufwand pro Abtastung führt, dafür aber wesentlich weniger Ressourcen in einem FPGA belegt. Was sich bei der Anzahl von Kanälen (c) und der digitalen Filterordnung (n) ergibt zeigt Tabelle 1.

Tabelle 1: Ressourcenbelegung und Anzahl von Arbeitstakten pro Abtastung.

Tabelle 1: Ressourcenbelegung und Anzahl von Arbeitstakten pro Abtastung.Arrow Electronics

Von besonderer Bedeutung ist dabei, dass bei einer voll sequenziellen Implementierung die Anzahl benötigter Multiplizierer auch bei mehrkanaliger Auslegung nur Eins ist. Voll sequenziell heißt dabei, dass nicht nur alle Übertragungsfunktionen nacheinander berechnet werden, sondern auch noch alle Kanäle nacheinander. Als Zwischenfazit kann man festhalten: Falls ein FIR-Filter in ein CPLD passen soll, dann höchstens ein voll sequenzielles.

Bei der Implementierung eines sequenziellen Filters in einem FPGA kann man viel über die FPGA-Entwicklung lernen. Denn auch wenn das FPGA einen sequenziellen Algorithmus abarbeitet wie ein Mikrocontroller, so werden die einzelnen Arbeitsschritte parallel abgearbeitet. Nach einer Anfangsphase, in der die Verarbeitungspipeline gefüllt wird, arbeiten alle Pipelinestufen zeitgleich überlappend, nur eben an unterschiedlichen Abtastwert-Koeffizienten-Paaren. Auf diese Weise erreicht man eine hohe Verarbeitungsleistung bei einer moderaten Arbeitsfrequenz.

Bild 2: Teilblockschaltbild eines sequenziellen FIR-Filters.

Bild 2: Teilblockschaltbild eines sequenziellen FIR-Filters.Arrow Electronics

In der Blockschaltung in Bild 2 oben bezeichnen die Zahlen den Zustand im fünften Arbeitstakt. In diesem Taktzyklus wird zeitgleich:

  • die Adresse des Paares 4 an die RAMs angelegt,
  • das Paar 3 aus den RAMs gelesen,
  • das Paar 2 in Faktor-Register übernommen,
  • das Produkt des Paares 1 in Produkt-Register übernommen,
  • das Produkt des Paares 0 zur bisherigen Summe dazu addiert.

Multiplizierer ist notwendig

Doch auch wenn alle Aktionen perfekt im Gleichschritt laufen – man benötigt trotzdem einen Multiplizierer, den es in kostengünstigen CPLDs nicht gibt. Hier kommt einem allerdings die Tatsache zu Gute, dass die Hersteller von FPGAs und CPLDs in ihren Entwicklungssoftwaren Code-Generatoren für Standardschaltungen integriert haben. Wenn man ein FPGA mit integrierten Multiplizierern zur Verfügung hätte, so würde man auch nicht einfach eine Multiplikation in den Quellcode schreiben, sondern den Code-Generator nehmen, um einen Multiplizierer mit einem bestimmten Verhalten zu erzeugen.

Bild 3: Ansicht des Code-Generators IPexpress bei der Konfiguration eines Multiplizierers.

Bild 3: Ansicht des Code-Generators IPexpress bei der Konfiguration eines Multiplizierers.Arrow Electronics

Bei einem CPLD ohne Hardware-Multiplizierer kann man den gleichen Code-Generator nutzen, um einen Multiplizierer zu erstellen. Mangels entsprechender Hardwareunterstützung erstellt der Code-Generaror dann eine Schaltung aus Logikelementen (Bild 3). Bei 16 x 16 Bit sind dafür zwar fast 360 Logikelemente nötig, aber wenn man diese Logik nur ein einziges Mal benötigt, ist das zu verkraften.

Eine unverzichtbare Ressource sind allerdings die Speicher für Abtastwerte und Koeffizienten. Wenn man auch diese mit Logikelementen abbilden müsste, dann würde ein sehr großes und teures CPLD nötig werden. Derzeit gibt es von Lattice mehrere günstige CPLD-Familien mit integriertem Speicher, in die man ein solches Filter unterbringen kann, zum Beispiel die MachXO2-Familie und die iCE40-Familie.

Bild 4: Eingangssignal (blau) und Ausgangssignal (rot) des Tiefpassfilters.

Bild 4: Eingangssignal (blau) und Ausgangssignal (rot) des Tiefpassfilters.Arrow Electronics

Im aktuellen Fall wurde ein zweikanaliges Filter der digitalen Ordnung 255 für eine Abtastfrequenz von 48 kHz in einem CPLD mit 640 LUTs und 8 KByte RAM implementiert. Das damit realisierte analoge Filter ist ein Butterworth-Tiefpass sechster Ordnung mit einer Grenzfrequenz von 1 kHz. In dem Kurvendiagramm ist das Eingangssignal (blau) ein Sinussignal der Frequenz 500 Hz, dann 1 kHz, dann 2 kHz (Bild 4). Das Ausgangssignal des Filters ist rot dargestellt.

Harald Flügel

ist Senior Field Application Engineer bei Arrow Electronics.

(jj)

Kostenlose Registrierung

Newsletter
Bleiben Sie stets zu allen wichtigen Themen und Trends informiert.
Das Passwort muss mindestens acht Zeichen lang sein.

Ich habe die AGB, die Hinweise zum Widerrufsrecht und zum Datenschutz gelesen und akzeptiere diese.

*) Pflichtfeld

Sie sind bereits registriert?