Forum: FPGA, VHDL & Co. Effektive Filterimplementierung in VHDL


von K. L. (Gast)


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:-)

von SuperWilly (Gast)


Lesenswert?

"FPGA-Based Implementation of Signal Processing Systems" von Roger Woods

von Martin (Gast)


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.

von K. L. (Gast)


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.

von Duke Scarring (Gast)


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

von K. L. (Gast)


Lesenswert?

Duke Scarring schrieb:
> Was ist denn Dein eigentliches Problem? Zu viele Multiplizierer?
Der generelle Wunsch nach Optimierung:-)

von Duke Scarring (Gast)


Lesenswert?

Klaus L. schrieb:
>> Was ist denn Dein eigentliches Problem? Zu viele Multiplizierer?
> Der generelle Wunsch nach Optimierung:-)
Ok. Dann hast Du offensichtlich zu viel Zeit :-)
(Wobei ich die Intention sehr gut nachvollziehen kann.)

Duke

von K. L. (Gast)


Lesenswert?

> Zeit
eher anders herum, daher frage ich ja, statt nachzulesen :-)

von K. L. (Gast)


Lesenswert?

Ich habe mir jetzt das o.g. Buch besorgt, es brachte mir im hiesigen 
Fall wenig, dafür aber anderweitig empfehlenswert, falls es wen 
interessiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.