Bits zählen mit Verilog

Gast #673916
Lesenswert?

Hi!
Du brauchst nur:
ein register mit einer bestimmten Länge
eine Variable mit Null initialisiert(counter)
eine For-Schleife
das wars!

dein Register wird mit der for-Schleife untersucht, fallst es 1 gefunden 
wird , wird dein counter incrementiert.
das ist voll einfach
Good luck
fredy
#673961
Lesenswert?

Fredy wrote:
> Hi!
> Du brauchst nur:
[...]
> eine For-Schleife
[...]
> dein Register wird mit der for-Schleife untersucht, fallst es 1 gefunden
[...]

Was macht denn die Synthese aus der for-Schleife in diesem Fall? Wird 
die nicht in parallele Logik umgewandelt?

Währe es da nicht sinnvoller das Register zu shiften und dann immer das 
lsb zu testen?

Gruß,

Günter
Gast #673974
Lesenswert?

@ Günter
Was redest du da?
Ist das für dich eine Aufgabe, die eine Diskussion braucht?
wer hat das Wort "shiften" verwendet?
weiss du was eine For-Schleife leistet überhaupt?
Wenn du mit eine For-Schleife nicht zufreiden bist, von mir aus kannst 
du eine zweite Zähler werwenden.
Gruß
fredy
#673995
Lesenswert?

@  Günter .. (guenter)

>Was macht denn die Synthese aus der for-Schleife in diesem Fall? Wird
>die nicht in parallele Logik umgewandelt?

Ja.

>Währe es da nicht sinnvoller das Register zu shiften und dann immer das
>lsb zu testen?

Geht auch, nur braucht das bei N Bits N Takte. Ist aber wahrscheinlich 
resourcenschonender bei sehr vielen Bits.

MFG
Falk
#674057
Lesenswert?

fredy wrote:
> @ Günter
[...]
> Ist das für dich eine Aufgabe, die eine Diskussion braucht?

Nein, ich habe nach einer Klarstellung gesucht, ob ich das Ergebnis der 
Synthese von deinem Vorschlag verstanden haben. Das hat Falk jetzt 
freundlicherweise getan.

> wer hat das Wort "shiften" verwendet?

Das habe ich als eine Alternative vorgeschlagen und mich hat 
interessiert ob das auch ein gangbare Lösung ist. Erneut hat Falk hier 
die Unterschiede zwischen deinem und meinem Vorschlag aufgezeigt, was 
für mich sehr lehrreich war.
[...]


@ Falk

Danke für die Klarstellung!
OP #674159
Lesenswert?

Also eine for-Schleife baut bei mir eine Reihe aus Addierern und 
Multiplexern, immer abwechselnd. D.h. je Stelle addiert er eins auf das 
vorherige Ergebnis und per Mux wählt er aus ob er das um eins erhöhte 
weiterleitet oder nicht. Das ist vor allem bei einem großen Bitvektor 
sehr langsam bzw reduziert die maximale Frequenz deutlich.
Admin Persönliche Seite #674161
Lesenswert?

> Also eine for-Schleife baut bei mir eine Reihe aus Addierern und
> Multiplexern, immer abwechselnd.

Das ist allerdings schwach, ich hätte erwartet dass das doch ein 
bisschen schlauer implementiert wird.

Hier wurde ausführlich über das Bit-Zählen diskutiert:

Beitrag "einsen im Vektor zählen"
Beitrag "Weils so schön war : Einsen Zählen II"

Musst du nur noch in Verilog umsetzen.
#674166
Lesenswert?

A380 A380 wrote:
> Also eine for-Schleife baut bei mir eine Reihe aus Addierern und
> Multiplexern, immer abwechselnd. D.h. je Stelle addiert er eins auf das
> vorherige Ergebnis und per Mux wählt er aus ob er das um eins erhöhte
> weiterleitet oder nicht. Das ist vor allem bei einem großen Bitvektor
> sehr langsam bzw reduziert die maximale Frequenz deutlich.

Auf comp.arch.fpga war gerade so eine Diskussion. Vielleicht hilft das:

http://groups.google.com/group/comp.arch.fpga/browse_frm/thread/8a83e6fe293e9ac7/389c3d6893e9dc7e#389c3d6893e9dc7e

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