Effektive Filterimplementierung in VHDL

Gast #3101136
Lesenswert?

Ich habe für die Aufbereitung eines Signals einige FIR-Filter 
unterschiedlicher Qualität entwickelt und hänge nun an der Problematik 
der effektiven Implementierung. Die Filter haben wenigstens eine 
Koeffizientenzahl von 128 und die Daten kommen mit 12.5MHz. Bei einer 
total sequenziellen Implementierung benötige ich 64 Schritte, wenn ich 
die Symmetrie nutze und gelange zu einer Abtastfrequenz von 800 MSPS. Da 
ich nur mit 100 MHz arbeiten kann, kann ich nur jeden 8.ten Block an 
Daten bearbeiten, also 12,5%. Ich habe den Filter daher 8x drin und 
arbeite geschachtelt. Die Frage ist, wie man davon wegkommen kann?

Wo müsste man ansetzen, um das Problem zu entschärfen, also wie kann ich 
mit einer Mehrfachnutzung von Daten oder Koeefizienten die Rechung 
verkürzen oder vereinfachen? Ein link zu passender Literatur wäre auch 
schon hilfreich, wobei ich den Standard wohl so ziemlich durch habe:-)
Gast #3101727
Lesenswert?

Du must doch nur eine Pipeline implementieren die mit 12,5MHz 
funktioniert.

Demnach wird dein Analogsignal digitalisiert und zwar mit 12,5MHz. 
Anschließend wandert Dein digitaisiertes Signal durch den Filter mit 64 
Steps. Demnach verzögert sich Dein Signal doch nur um 64 Steps. Wenn man 
damit leben kann ist dies doch kein Problem.
Gast #3102052
Lesenswert?

Martin schrieb:
> Du must doch nur eine Pipeline implementieren
nun ja, eigentlich wären es sogar 128, aber ich buffere ja schon und 
schiebe es durch 64 mit Koeffizientenspiegelung. Bei vollem pipelining 
hätte ich dann 64 Mulitplierinstanzen weg und die müssen 32 Bit Daten x 
24 Bit Koeffizienten berechnen. Das FPGA soll halt auch noch was anderes 
tun, als nur die Eingangsdaten filtern :-)

SuperWilly schrieb:
> "FPGA-Based Implementation of Signal Processing Systems" von Roger Woods

Da schaue ich mal, Danke.
Gast #3102989
Lesenswert?

Klaus L. schrieb:
> Die Frage ist, wie man davon wegkommen kann?
Warum? Das was Du beschreibst, klingt nach einer optimalen Lösung.
Man kann ja prinzipiell zwischen zwei Extremen wählen:

1. Alles parallel: schnell, aber viel Platzbedarf
2. Alles seriell: langsam, aber klein

Du hast schon den goldenen Mittelweg implementiert. Wenn Dir Design zu 
groß ist, kannst Du die Taktfrequenz erhöhen (was bei 100 MHz, je nach 
Chip schon schwierig werden dürfte) oder weniger Koeffizienten bzw. 
kleinere verwenden.

Was ist denn Dein eigentliches Problem? Zu viele Multiplizierer? Zu viel 
Slices?

Duke

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren