verilog: zählen gesetzter Bits in einem Bus

Gast #2990111
Lesenswert?

Hi Leutz

helf mir mal bitte auf die Sprünge: Ich möchte die gesetzten (1) Bits in 
einem Bus zählen. Der Bus ist 32 Bit breit. Was ich nun gerne hätte ist 
eine Kaskade aus (Halb-)Addierern. Damit müsste es meiner Auffassung 
nach möglich sein, die ganze Geschichte in kominatorischer Logik zu 
realisieren und damit auch in jedem Takt das/ein Ergebnis zu liefern.

Ich habe nun versucht das mit einer for-schleife zu realisieren, die 
eine counter-integer hochzählen. Das funktioniert natürlich nur wenn die 
counter-integer vorher initialisiert wurde. Genau das geht aber nicht, 
weil ich ja nur eine Taktflanke habe und ich nicht parallel zu der 
for-schleife initialisieren/rücksetzen kann. Der Punkt ist (nochmal): 
Eine Initialisierung ist in Hardware überhaupt nicht notwendig, wenn das 
mit Logik realisiert wird. Dann bräuchte ich nur ganz am Ende ein reg 
für das Ergebnis, wenn überhaupt.

thx for help

greez Kiigass
Moderator (Firma: Titel) Persönliche Seite #2990305
Lesenswert?

Kiigass schrieb:
> helf mir mal bitte auf die Sprünge: Ich möchte die gesetzten (1) Bits in
> einem Bus zählen. Der Bus ist 32 Bit breit.
Lies mal das da im Beitrag "Bits in Wort zählen"
Da geht es zwar vorrangig um VHDL, aber die Denkweise ist die selbe.

> Was ich nun gerne hätte ist eine Kaskade aus (Halb-)Addierern.
> Damit müsste es meiner Auffassung nach möglich sein,
> die ganze Geschichte in kominatorischer Logik zu
> realisieren und damit auch in jedem Takt das/ein Ergebnis zu liefern.
Aber eben nur, wenn der Takt relativ langsam ist. Besser ist es, mehrere 
Teilsummen zu bilden und die aufzusummieren. Sieh den obigen Link...
Gast #2991690
Lesenswert?

Lothar Miller schrieb:
> Aber eben nur, wenn der Takt relativ langsam ist. Besser ist es, mehrere
> Teilsummen zu bilden und die aufzusummieren. Sieh den obigen Link...

Danke dir für die Antwort, so meinte ich das auch. Mittlerweile bin ich 
auf drauf gekommen: Der "Trick" ist, dass die forschleife (natürlich) 
nicht getaktet sein darf, also nicht auf clk, sondern bei Veränderung 
des Eingangs getriggert wird. Also:
1
always @(eingang)

Dann macht der Compiler, das was wir erwarten.

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