Forum: FPGA, VHDL & Co. Frage zu Strategie von FIR-Implementierung in VHDL


von Bernhard H. (bholzmayer)


Lesenswert?

Hallo.
Ein Eingangsdatenstrom soll stufenweise um den Faktor zwei dezimiert 
werden (variabel bis zu 15 Stufen).
Die Ausgänge aller Stufen sollen über einen MUX wahlweise verfügbar 
sein.
Datenrate ist 4MS/s, ein synchroner Takt von 96MHz ist auch da.
Eine entsprechende Reduzierungsstufe (inkl. FIR-Filter) kriege ich hin.
Und die dann verketten, ist trivial...

Worauf ich hinaus will und wo ich gerne Eure Meinung dazu hören würde, 
ist folgendes:

Die erste Stufe kann so aufgebaut werden, dass sie bei dem gegebenen 
Takt die Ressourcen gut ausnützt, also die 24 Taktzyklen zwischen zwei 
Samples
verbraucht. Daher sage ich jetzt mal, sie nützt 100% der Zeit zum 
Rechnen.

Nun ist die Datenrate am Ausgang aber nur noch halb so schnell.
Die nächste Stufe arbeitet infolgedessen entweder nur noch mit 50% 
Taktgeschwindigkeit oder sie dreht 50% der Zeit Däumchen.

Und in jeder folgenden Stufen ist das noch extremer, bis in der 15. 
Stufe das Däumchendrehen auf über 99,99% eskaliert.

Natürlich könnte ich jetzt alle Stufen so verkoppeln, dass die 
Ressourcennutzung besser ausfällt. Aber eigentlich hätte ich gerne das 
Design schön schlicht, d.h. lauter identische Stufen, und die nicht von 
Hand zusammengemixt.

Welche Idee fehlt mir hier?
Wie geht man in so einem Fall am besten an die Sache ran...?

Ich freue mich über jede Anregung,
auch wenn sie nicht bis ins Letzte durchdacht ist.

Bernhard

von Matthias G. (mgottke)


Lesenswert?

Ich frage mich was Dich daran stört, dass einige Einheiten nicht voll 
(oder sehr wenig) ausgelastet sind? Der einzige plausible Grund der mir 
dazu einfällt ist, dass Du Ressourcen im FPGA sparen möchtest. Da 
müsstest Du  mal abschätzen wie viel du an Ressourcen sparen könntest 
und ob der Aufwand dafür gerechtfertigt ist.

von Bernhard H. (bholzmayer)


Lesenswert?

Korrekt. Im allgemeinen sind meine Denk-Ressourcen teurer als die des 
FPGA...
Eigentlich ist das nur ein ästhetisches Problem, solange die Ressourcen 
ausreichen.
Da es sich um einen binären Baum handelt, von dem jeweils nur ein Zweig 
genutzt ist, werden ca. 25% verschwendet. Das bleibt im Rahmen.
Allerdings benötigt jede Stufe Multiplizierer bzw. DSP48-Slices.
Und die sind in den kleineren Spartan-6, die ich verwenden möchte so 
knapp, dass diese Verschwendung nicht vernachlässigbar ist.
(LX25 erforderlich statt LX4 oder LX9; und wir verwenden viele davon... 
;-)

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

Hallo,

scheinbar hast du den Filter selber programmiert. Dann wäre es sinnvoll, 
wenn du wenigstens noch einen zweiten für z.B. fs=4 Ms/s/(2^8) 
entwickelst.

Xilinx hat im Core-Generator einen FIR-Compiler, damit ist es kein 
Problem für jede Samplingfrequnz einen speziellen FIR-Filter zu 
generieren. Die nutzen die Ressourcen dann in jeder Stufe gut aus.


Tom

von Bernhard H. (bholzmayer)


Lesenswert?

Danke für den Tipp, Thomas.

Ich weiß, dass der Core-Generator da was hat, und hab mir das auch 
überlegt.
Nur passt das in meinem Fall nicht so geschickt, weil ich weitere 
Ausgänge aus dem Filter nutze, die beim Core-Generator nicht zugänglich 
sind ...

Das mit dem zweiten Filter ist eine gute Idee, weil es einen
guten Kompromiss zwischen Aufwand und Nutzen ergibt.

Bei der Suche nach "perfekten Lösungen" übersehe ich oft die 
pragmatischen.

Bernhard

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.