www.mikrocontroller.net

Forum: FPGA, VHDL & Co. High Zustände eines Bitvectors zählen


Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde gerne bei einem Bitvector rausfinden, wieviele Leitungen auf 
"1" geschaltet sind und das ganze in einem Takt. Die Überlegungen, die 
ich bereits angestellt habe, haben mich noch nicht weiter gebracht. Gibt 
es da vielleicht bekannte Tricks, wie man das macht? Evtl. eine 
mathematische Lösung? Das durchzählen mit Variablen in einem Loop liegt 
leider weit unter der gewünschten Geschwindigkeit...

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der geforderten Geschwindigkiet gibt es ohne externe Hardware exakt 2 
Lösungen: Tabelle oder POPCOUNT Befehl. Letzter ist unter Controllern 
etwas rar, weil die NSA für die Jobs, derentwegen dieser Befehl immer 
wieder mal in Rechnern zu finden ist, naheliegenderweise AVRs erst 
garnicht in Betracht zieht.

Autor: Valerij Matrose (fpga-dev)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde einfach mit Addierern die einzelnen Bits aufaddieren.

Gruß, fpga-dev

Autor: high_speed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da haben FPGA-User und  Hagen schon vor mehr als eineinhalb Jahren 
versucht
das Syntheseergebnis zu optimieren. Das Ergebnis war, das das 
Synthesetool
schon die optimalste Lösung findet.

einsen im Vektor zählen
Beitrag "einsen im Vektor zählen"

Weils so schön war : Einsen Zählen II
Beitrag "Weils so schön war : Einsen Zählen II"

MfG
Holger

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem tritt auch beim majority gate auf. Google spuckt viele hits 
aus, ist vielleicht einen Blick wert.

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Werde mir die Sache ansehen. Vielen Dank!

Autor: noname (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Dank diesem Thread: Beitrag "Weils so schön war : Einsen Zählen II"
Habe ich es nun verstanden, so habe ich das auch vogestellt gehabt aber 
bei dem Code wurde die Denkarbeit einem regelrecht genommen g
Habe es für meine Bedürfnisse angepasst (128 Bit) und es scheint zu 
funktionieren. Synthesis zeigt knappe 20ns an. Was mich gewundert hat 
ist, dass man beim Verwenden des std_logic_vector als Fkt Variable 
praktisch die Umwandlung conv_to_std_logic_vector erspart, aber an der 
Geschwindigkeit nichts gewinnt (habe da andere Erfahrungen). Wenn man 
diese Logik auf einen Takt Taktet, hat man zunächst einen gewissen 
Offset (ist ja auch klar), aber im Endeffekt kann man die Bits der 
Synthesis nach mit über 200 MHz auf einem Virtex2 zählen und irgendwo 
aufaddieren (wenn ich mich nicht irre). Im Anhang ist die pdf mit der 
Waveform, wollte keine .09k BMP Datei uppen.

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.