High Zustände eines Bitvectors zählen

Gast #569567
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...
Gast #569575
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.
Gast #570626
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.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren