Cosa si fa con il "conteggio dei bit" molto simile al logaritmo (base 2).
Questo è comunemente usato in VHDL per capire quanti bit sono necessari per rappresentare un segnale. Ad esempio, se si desidera memorizzare fino a N elementi nella RAM, il numero di bit richiesti per indirizzare quella RAM è ceil (log2 (N)). Per questo io uso:
function log2ceil(m:natural) return natural is
begin -- note: for log(0) we return 0
for n in 0 to integer'high loop
if 2**n >= m then
return n;
end if;
end loop;
end function log2ceil;
In genere, si desidera eseguire questa operazione in fase di sintesi con costanti e la velocità non è un problema. Ma puoi anche generare logica FPGA, se è davvero quello che vuoi.
Come altri hanno già detto, un ciclo "for" in VHDL è appena usato per generare una tabella di ricerca, che può essere lenta a causa di lunghi percorsi di segnale, ma richiede solo un solo orologio. Ciò che può accadere è che la frequenza massima del clock si abbassi. Solitamente questo è solo un problema se operate su vettori maggiori di 64 bit (avete menzionato 1024 bit) e orologi più veloci di 100MHz. Forse il sintetizzatore ti ha già detto che questo è il tuo problema, altrimenti ti suggerisco di provare prima.
Quindi è necessario dividere l'operazione su più clock e memorizzare un risultato intermedio in un FF. (Mi dimenticherei in anticipo di provare a battere in astuzia il sintetizzatore riordinando il codice.Una tabella di ricerca è un tavolo.Perché dovrebbe importare come si generano i valori in questa tabella? Ma assicurati di dire al sintetizzatore di "non preoccuparti "valori se li avete.)
Se la velocità è la vostra preoccupazione, utilizzare il primo orologio per controllare tutti i blocchi a 16 bit in parallelo (indipendenti l'uno dall'altro), e quindi utilizzare un secondo ciclo di clock per combinare i risultati di tutti i 16 bit blocca in un unico risultato.Se la quantità di logica FPGA è di tuo interesse, implementa una macchina a stati che controlla un singolo blocco a 16 bit ad ogni ciclo di clock.
Ma attenzione a non reinventare la CPU mentre lo fai.
Hai provato l'approccio ingenuo? I sintetizzatori possono essere straordinariamente intelligenti nel riorganizzare la tua logica. Altrimenti, ["Hackers Delight"] (http://books.google.co.uk/books?id=VicPJYM0I5QC&printsec=frontcover&dq=hackers+delight&hl=en&sa=X&ei=PwqRUYadBYHeOsH9gIgL&ved=0CDYQ6AEwAA) ha un numero di opzioni su pp77- 80, che può essere suscettibile di sintesi. Non dovrebbero impiegare molto tempo per programmare e provare - riportare una risposta a questa domanda! –