Was Sie mit Ihrer "Bit-Zählung" tun, sehr ähnlich dem Logarithmus (Basis 2).
Dies wird häufig in VHDL verwendet, um herauszufinden, wie viele Bits erforderlich sind, um ein Signal darzustellen. Wenn Sie beispielsweise bis zu N Elemente im RAM speichern möchten, ist die Anzahl der Bits, die für die Adressierung dieses RAM erforderlich sind, ceil (log2 (N)). Dazu verwende ich:
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;
Normalerweise möchten Sie dies zur Synthesedauer mit Konstanten tun, und Geschwindigkeit ist kein Problem. Sie können aber auch FPGA-Logik generieren, wenn Sie das wirklich wollen. Wie bereits erwähnt, wird eine "for" -Schleife in VHDL nur verwendet, um eine Nachschlagetabelle zu erzeugen, die aufgrund langer Signalwege langsam ist, aber immer nur einen einzigen Takt benötigt.
Was passieren kann ist, dass Ihre maximale Taktfrequenz sinkt. Normalerweise ist dies nur ein Problem, wenn Sie mit Vektoren arbeiten, die größer als 64 Bit sind (Sie haben 1024 Bit erwähnt), und schneller als 100 MHz getaktet. Vielleicht hat dir der Synthesizer schon gesagt, dass das dein Problem ist, ansonsten schlage ich vor, dass du es zuerst versuchst.
Dann müssen Sie den Vorgang über mehrere Uhren aufteilen und einige Zwischenergebnisse in ein FF speichern. (Ich würde im Voraus vergessen, den Synthesizer auszutricksen, indem ich den Code neu anordne. Eine Nachschlagetabelle ist eine Tabelle. Warum sollte es wichtig sein, wie Sie die Werte in dieser Tabelle erzeugen? Aber stellen Sie sicher, dass Sie dem Synthesizer sagen: "Egal "Werte, wenn Sie sie haben." Wenn Sie Geschwindigkeit haben, verwenden Sie die erste Uhr, um alle 16-Bit-Blöcke parallel (unabhängig voneinander) zu überprüfen, und verwenden Sie dann einen zweiten Taktzyklus, um die Ergebnisse aller 16-Bit zu kombinieren Blöcke in ein einzelnes Ergebnis.Wenn es um die FPGA-Logik geht, implementieren Sie eine Zustandsmaschine, die bei jedem Taktzyklus einen einzelnen 16-Bit-Block prüft.
Aber seien Sie vorsichtig, dass Sie dabei die CPU nicht neu erfinden.
Haben Sie versucht, den naiven Ansatz? Synthesizer können sehr geschickt darin sein, Ihre Logik neu zu ordnen. Ansonsten, ["Hackers Delight"] (http://books.google.com/books?id=VicPJYM0I5QC&printsec=frontcover&dq=hackers+delight&hl=de&sa=X&ei=PwqRUYadBYHeOsH9gIgL&ved=0CDYQ6AEwAA) hat eine Reihe von Optionen auf pp77- 80, die für die Synthese zugänglich sein kann. Sie sollten nicht lange brauchen, um zu schreiben und zu versuchen - melden Sie sich in einer Antwort auf diese Frage zurück! –