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


von noname (Gast)


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...

von A.K. (Gast)


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.

von Valerij M. (fpga-dev)


Lesenswert?

Ich würde einfach mit Addierern die einzelnen Bits aufaddieren.

Gruß, fpga-dev

von high_speed (Gast)


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

von Frank (Gast)


Lesenswert?

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

von noname (Gast)


Lesenswert?

Werde mir die Sache ansehen. Vielen Dank!

von noname (Gast)


Angehängte Dateien:

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.

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.