Ich suche einen möglichst effizienten Code der aus einem Bitvektor die Anzahl der Einsen bestimmt. Also 10101011100 = 6 Einsen Die Größe des Bitvektors kann dabei (vor der Synthese) eingestellt werden, der Code sollte daher allgemein sein (for-Schleife o.ä).
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
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
@ 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
@ 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
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!
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.
> 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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.