Überlegungen zur FPGA-Implementierung von Linearphasen-FIR-Filtern

VMworld 2017 Europe – General Session Tag 2 (November 2018).

Anonim

Überlegungen zur FPGA-Implementierung von Linearphasen-FIR-Filtern


In diesem Artikel werden Überlegungen zur effizienten FPGA-Implementierung von symmetrischen FIR-Filtern erläutert.

Dieser Artikel wird eine modulare Pipeline-Struktur für symmetrische FIR-Filter herleiten. Wir werden sehen, dass die abgeleitete Struktur mithilfe der DSP-Slices der Xilinx-FPGAs effizient implementiert werden kann.

Symmetrische FIR-Filter

Betrachten wir einen FIR-Filter mit acht Abgriffen. Die Übertragungsfunktion dieses Filters wird sein

$$ Y (z) = \ Summe_ {k = 0} ^ {7} z ^ {- k} h_k X (z) $$

Angenommen, der Filter ist symmetrisch und wir haben $$ h_k = h_ {7-k} $$ für $$ k = 0, 1, \ dots, 7 $$. Daher kann die Übertragungsfunktion als neu geschrieben werden

$$ Y (z) = (1 + z ^ {- 7}) h_0X (z) + (z ^ {- 1} + z ^ {- 6}) h_1X (z) + (z ^ {- 2} + z ^ {- 5}) h_2X (z) + (z ^ {- 3} + z ^ {- 4}) h_3X (z) $$

Gleichung 1

Wir können Gleichung 1 als ein System mit vier Pipeline-Ebenen implementieren, wie in 1 gezeigt. Jede Stufe dieses Blockdiagramms entspricht einem der vier Terme von Gleichung 1.

Abbildung 1. Zum Vergrößern klicken.

Da wir drei Registersätze für das Pipelining eingefügt haben, erwarten wir eine Latenz von drei Taktzyklen. In Bezug auf die z-Transformation wird die Ausgabe von Fig. 1 sein: $$ z ^ {- 3} $$ mal $$ Y (z) $$ (wie in Gleichung 1 gegeben). Mit anderen Worten, wir haben $$ sig7 = z ^ {- 3} Y (z) $$. Daher haben wir

$$ \ beginnen {ausrichten}
sig7 & = z ^ {- 3} (1 + z ^ {- 7}) h_0X (z)
+ z ^ {- 3} (z ^ {- 1} + z ^ {- 6}) h_1X (z)
+ + z ^ {- 3} (z ^ {- 2} + z ^ {- 5}) h_2X (z) + z ^ {- 3} (z ^ {- 3} + z ^ {- 4}) h_3X (z)
\ end {align} $$

Gleichung 2

Nun sollten wir jeden dieser vier Terme einer geeigneten Stufe in Abbildung 1 zuordnen. Wir haben die Gleichung für den Ausgang sig7, so dass es einfacher ist, zuerst die letzte Stufe des Systems zu entwerfen. Wenn wir den Ausdruck $$ z ^ {- 3} (1 + z ^ {- 7}) h_0X (z) $$ als Stufe 4 implementieren, müssen wir zehn Verzögerungselemente kaskadieren, um $$ z ^ {- 10} $$. Wenn wir jedoch $$ z ^ {- 3} (z ^ {- 3} + z ^ {- 4}) h_3X (z) $$ als Stufe 4 implementieren, benötigen wir eine Kaskade von nur sieben Verzögerungselementen. Daher werden wir den letzten Ausdruck von Gleichung 2 als Stufe 4 von Fig. 1 implementieren. Dies ergibt die in Fig. 2 gezeigte Schaltung.

Figur 2

Daher erhalten wir

$$ sig6 = z ^ {- 3} (1 + z ^ {- 7}) h_0X (z)
+ z ^ {- 3} (z ^ {- 1} + z ^ {- 6}) h_1X (z) + z ^ {- 3} (z ^ {- 2} + z ^ {- 5}) h_2X ( z) $$

was gibt

$$ sig5 = z ^ {- 2} (1 + z ^ {- 7}) h_0X (z)
+ z ^ {- 2} (z ^ {- 1} + z ^ {- 6}) h_1X (z) + z ^ {- 2} (z ^ {- 2} + z ^ {- 5}) h_2X ( z) $$

Nun können wir wie in Stufe 4 Stufe 3 von Abbildung 1 ableiten und die Schaltung in Abbildung 3 erhalten.

Figur 3

Jetzt haben wir

$$ sig3 = z ^ {- 1} (1 + z ^ {- 7}) h_0X (z)
+ z ^ {- 1} (z ^ {- 1} + z ^ {- 6}) h_1X (z) $$

welches wie neu geschrieben werden kann

$$ sig3 = z ^ {- 1} sig1
+ z ^ {- 1} (z ^ {- 1} + z ^ {- 6}) h_1X (z) $$

woher

$$ sig1 = (1 + z ^ {- 7}) h_0X (z) $$

Unter Verwendung dieser zwei Gleichungen können wir die endgültige Struktur finden, die in 4 gezeigt ist.

Abbildung 4. Zum Vergrößern klicken.

Beachten Sie, dass für die erste Stufe ein Addierer mit einer Eingabe von Null enthalten ist, um die modulare und regelmäßige Struktur des Schaltplans hervorzuheben. Außerdem wird ein zusätzliches Verzögerungselement nach sig7 angeordnet. Wie Sie sehen können, wird die Schaltung in der gestrichelten Box in jeder Phase der Struktur wiederholt. Eine solche modulare Struktur ist wünschenswert, da sie das Erweitern der Struktur für eine beliebige Anzahl von Abgriffen erleichtert.

Xilinx implementiert die Schaltung innerhalb der gestrichelten Box als DSP-Slice in seinen Hochleistungs-FPGAs. Diese DSP-Slices können effizient kaskadiert werden; Aus diesem Grund können mehrere Slices zur Implementierung eines bestimmten FIR-Filters verwendet werden. Im nächsten Abschnitt betrachten wir die Struktur eines DSP48-Slices.

Xilinx DSP-Ausschnitt

DSP-Slices sind vielseitige Elemente und das Implementieren des FIR-Filters von 4 ist nur eine von vielen möglichen Anwendungen. Ein Blockdiagramm der DSP48-Slices, die in Virtex-4-Geräten gefunden wurden, ist in 5 gezeigt.

Abbildung 5. Blockdiagramm der DSP48-Slices in Virtex-4-Geräten. Bild mit freundlicher Genehmigung von Xilinx. Klicken um zu vergrößern.

Die Gleichung für den Ausgang des Addierers / Subtrahierers ist

$$ Adder \ Out = \ Groß (Z \ pm (X + Y + C_ {in}) \ Groß) $$

wobei X, Y und Z die Ausgangswerte der entsprechenden Multiplexer bezeichnen. Die Multiplexer erlauben uns, verschiedene Eingänge für den Addierer / Subtrahierer zu wählen. Multiplikation ist eine typische Anwendung des DSP-Slices. Zum Beispiel können wir einen DSP48-Slice konfigurieren, um die folgende Gleichung zu implementieren:

$$ Adder \ Out = C \ pm (A \ mal B + C_ {in}) $$

Wenn die Multiplikatorfunktionalität verwendet wird, müssen die X- und Y-Multiplexerausgänge den Addierer speisen, da der in dem Blockdiagramm gezeigte Multiplizierer zwei Teilergebnisse erzeugt, die durch den Addierer / Subtrahierer kombiniert werden, um das endgültige Multiplikationsergebnis zu erzeugen. Weitere Informationen finden Sie auf Seite 21 von Xilinx 'Buch DSP: Designing for Optimal Results.

Die Register im Pfad der verschiedenen Eingänge des Slice ermöglichen ein Pipeline-Design. Zum Beispiel können wir die Eingabe A direkt auf den mathematischen Teil der Scheibe anwenden, ohne Register in ihrem Pfad, oder wir können ein oder zwei Register in ihrem Pfad platzieren. Dies wird durch Multiplexer erreicht (siehe Fig. 5), die Eingaben von vor oder nach den Registern wählen können.

Die Ausgabe einer DSP-Scheibe (in Fig. 5 mit "P" bezeichnet) kann an den Addierer / Subtrahierer der gleichen Scheibe angelegt werden, um einen Akkumulator zu implementieren.

Wie in Fig. 5 angedeutet, unterstützt ein DSP-Slice mehrere Funktionen, einschließlich Multiplikation, Multiplikation gefolgt von Akkumulation, Vollpipeline-Multiplikation und Circular-Barrel-Verschiebung. Fortgeschrittenere Versionen der DSP48-Slices enthalten einige Modifikationen, wie zum Beispiel einen Pre-Add-Block, der das Slice noch vielseitiger macht. Zum Beispiel kann der Voraddierer beim Implementieren symmetrischer FIR-Filter (oben diskutiert) nützlich sein. Beachten Sie, dass DSP-Slices die genannten Funktionen effizient implementieren. Aus diesem Grund kann ein auf DSP-Slices basierendes Design einen geringeren Stromverbrauch, eine höhere Leistung und eine effizientere Silizium-Nutzung im Vergleich zu einem Design erzielen, das die Allzweck-Fabric des FPGAs verwendet. Weitere Informationen zu den Xilinx DSP-Slices finden Sie in dem oben genannten Buch.

Implementieren Sie symmetrische FIR-Filter mit den DSP Slices

Ein vereinfachtes Blockdiagramm für die DSP-Schicht von 5 ist in 6 unten gezeigt.

Abbildung 6

Dieses vereinfachte Blockdiagramm betont, dass der Ausgang eines Slice als eine Eingabe an den Addierer / Subtrahierer des nächsten Slices geroutet werden kann. Wenn wir die in Fig. 6 gezeigten Eingaberegister ignorieren, ist das Schema von Fig. 6 das gleiche wie die Schaltung innerhalb der gestrichelten Kästchen von Fig. 4. Somit kann durch Kaskadierung dieser DSP-Slices das FIR-Filter von Fig. 4 effizient implementiert werden In diesem Fall können wir die roten Addierer (siehe Fig. 4) unter Verwendung der Allzweck-Fabric-Slices des FPGA implementieren.

Fig. 7 zeigt eine Implementierung von Fig. 4, die die 7er-DSP48-Slices verwendet.

Abbildung 7. DSP48-basierte Implementierung eines symmetrischen 8-Tap-FIR-Filters. Bild mit freundlicher Genehmigung von Xilinx. Klicken um zu vergrößern.

Hier implementieren die schattierten Addierer die Rotaddierer von 4 und die Verzögerungsleitung kann unter Verwendung der Register innerhalb der Slices implementiert werden. Sie können den Xilinx VHDL-Code für die Schaltung von Abbildung 7 hier herunterladen (der Download beginnt sofort, wenn Sie auf diesen Link klicken).

Fazit

Wir haben eine modulare Pipeline-Struktur für symmetrische FIR-Filter abgeleitet. Wir haben uns auch die Struktur der Xilinx-DSP-Slices angesehen, die zur Implementierung mehrerer Funktionen verwendet werden kann, einschließlich Multiplikation, Multiplikation mit anschließender Akkumulation, vollständiger Pipeline-Multiplikation und zirkulärer Barrel-Verschiebung. Die DSP48-Slices der Serie 7 sind noch vielseitiger und ermöglichen eine effizientere Implementierung symmetrischer FIR-Filter.

Um eine vollständige Liste meiner Artikel zu sehen, besuchen Sie bitte diese Seite.