Hvordan beregne antall 1s?

X

xvibe

Guest
Hva er den beste måten å beregne antall 1s i en 32bit ord?Merk at 32bit ordet lengden er kun for eksempel.Det må være et gyldig for andre ord lengder.
Jeg må vite resultatene måten enkleste måten, mindre vei ...

 
Ytelse måte - søketabellen, men kan være stor, med mindre du kan dele den.

Enkleste måten - skift og teller.

Minst måte - nok skift og teller.

Git

 
Hva med å bruke adders til summen alle numrene og dem en dekoder for å propperly gi antall 1s?Dette høres ut som en ser opp tabellen, men med denne metod du kan utvide den til en rekke 1s ...
Bruke en titt opp tabellen er fine (mitt primære trodde), men er veldig frustating bygge en titt opp tabellen for å beregne 1s i en 256bits ord!
Skiftet metod ville kreve å mye klokker ....

 
Summing og dekoding vil kreve divisjon og divisjon er effektivt clocking og telling.

Hva med å splitte ordet i 8 bit bytes og bruker samme 256 oppføring søketabellen på hver byte.Det vil trolig være det beste kompromiss mellom fart, pris og evne til å gjøre N biter der N er et multiplum av 8 eller N er arbitrrary hvis du pakker den siste byte med MS nuller.

Git

 
U8 num_ones (U32 u)
(
U8 U2 = 0;
while (u! = 0)
(
U =
U & (u-1);
U2 ;
)
return U2;
)

 
Beklager, men hvilket språk er det?
Trenger du klokken til det?Det ser ut som den trenger ...

 
Det er et C-språk skriftlig algoritme.

# define U8 unsigned char
# define U32 usignerte lenge

Operasjonen U =
U & (u-1); eliminerer mest høyre "en".Løsningen er programvare, men kanskje det kan hjelpe deg.

 
Hei,

General FPGAs har en 4-bits LUT.
Del opp 32-bits ord i 11 * 2 3-biters LUT (11 er pålagt å ha 32 / 3) og 2 er nødvendig for å telle antall 1s i 3-bits.

Deretter Sum alle 11 2-bits ord.

Du kan legge noen FFs hvis du har behov for hastighet.

AMCC

 
hvordan bruke disken til å telle noe bestemt antall (i henhold til clk)?

 
Xvibe,

Hvis du ønsker å gjøre det på en klokke sykle den vedlagte filen er én måte å gjøre det på VHDL.

Synthesizing med synplify:

Målrett Part: rtax1000s-s
Combinational Celler: 81 av 12096 (1%)
Sekvensiell Celler: 38 av 6048 (1%)
Totalt Celler: 119 av 18144 (1%)
Klokke buffere: 2
IO Celler: 40

Detaljer:
add1: 5 kam: 1
and2: 7 kam: 1
and3a: 1 kam: 1
cm8: 47 kombi: 1
xor2: 21 kombi: 1

dfc1b: 38 seq: 1

clkbuf: 1 klokken buffer
hclkbuf: 1 klokken buffer
inbuf: 32
outbuf: 6

Forespurte 50Mhz fikk 90Mhz.

Både inn-og utdata er bufret men, avhengig av applikasjon og tilgjengelig tid budsjett, sannsynligvis ikke være det.

Radix
Beklager, men du må logge inn for å vise dette vedlegget

 

Welcome to EDABoard.com

Sponsor

Back
Top