www.mikrocontroller.net

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


Autor: Bernhard Holzmayer (bholzmayer)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias G. (mgottke)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernhard Holzmayer (bholzmayer)
Datum:

Bewertung
0 lesenswert
nicht 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... 
;-)

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernhard Holzmayer (bholzmayer)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.