Forum: FPGA, VHDL & Co. verilog: zählen gesetzter Bits in einem Bus


von Kiigass (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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

von Kiigass (Gast)


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.

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.