Logarithmus in Verilog
Habe ich eine Aussage in verilog suchen, wie integer level = log(N)
(Wobei N ein parameter und level ermittelt werden soll), Aber ich verstehe, das ich nicht tun kann komplexe mathematische Aussagen in verilog, so Frage ich mich, ob es eine alternative Lösung für das obige problem?
Jedes feedback dankbar!
- Welche Art des Logarithmus versuchst du zu computer? Einen ganzzahligen Logarithmus zur Basis 2 ist einfach. Ein Fließkomma-Logarithmus zur Basis e ist viel schwieriger.
- Ganzzahligen Logarithmus zur Basis 2
- Ist N eine compile-Zeit-Konstante?
- ja! Seine parameter an das Modul
- In diesem Fall ist es Recht einfach. Sie können eine lookup-Tabelle, wenn N klein ist und die Geschwindigkeit ist ein Problem. Wenn N sehr groß werden, können Sie einfach eine Schleife über die bits von N von Links nach rechts, bis Sie finden, ein 1-bit.
- wie machen Sie eine lookup-Tabelle? Auch N-Kappen-out bei 128 oder vielleicht 256, aber das ist über es
- Finden Sie eine Erklärung und eine Implementierung in SystemVerilog (ganz ähnlich wie Verilog) der Logarithmus zur Basis 2, die in dieser Webseite: sistenix.com/logarithm.html Sobald der log2 ist einfacher umgesetzt werden, im Vergleich zu anderen Basen, können Sie berechnen, andere Logarithmen in verschiedenen Basen nur die Multiplikation der Folge von log2 durch eine Konstante Zahl.
- würden Sie bitte lassen Sie mich mehr, wie kann ich das machen ", Wenn N groß werden, können Sie einfach eine Schleife über die bits von N von Links nach rechts, bis Sie finden, ein 1-bit."?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn es ist ein Logarithmus zur Basis 2, die Sie zu tun versuchen, können Sie verwenden die eingebaute Funktion
$clog2()
.Die Antwort auf ADRESSE der BREITE von RAM-TIEFE beschreibt ein paar Möglichkeiten, um zu bewerten Konstante Logarithmen in dieser situation.
Verilog-Funktionen für den natürlichen Logarithmus (
$ln()
), dekadische Logarithmus ($log10()
) und die Decke der binäre Logarithmus ($clog2()
). In Konstanten Ausdrücken sollten Sie synthetisierte, aber die tatsächliche Unterstützung durch Werkzeuge ist unterschiedlich.Den folgenden synthetisierte Verilog-code:
E. g. nach der RTL-Synthese mit Yosys (z.B.
yosys -p 'prep; write_verilog -noattr' test.v
):Verilog ist in Erster Linie ein hardware description language. Welche hardware
log(N)
- Anweisung beschreiben? Moderne FPGAs bestehen aus LUTs, flops, kleine integrierte Speicher, die einfachen DSPs, die zur Umsetzung von MAC (multiply-accumulate) - primitive.log(N)
und andere komplexe mathematische Aussagen, die nicht zugeordnet werden können direkt in diesen "primitiven". Das gleiche gilt für ASICs.Analog
log(N)
nicht ausgeführt durch einen Prozessor. Es ruft eine Reihe von niedrigere-Ebene-assembly-Anweisungen, dies zu tun. Diese Montage-Anweisungen sind Teil derlog(N)
Bibliothek (C, C++, etc.)Werden in der Lage zu synthetisieren
log(N)
für ASIC/FPGA-es erfordert eine Instanz einerlog(N)
- IP-core.Ich mag zu denken (Logarithmus zur Basis n von Wert), wie die Beantwortung der Frage "Wie viele base-n Ziffern benötige ich, um darzustellen, 'Wert' unabhängigen zahlen?" (Halten Sie im Verstand, die 0 zählt als Zahl)
Denken, dass es der Weg ist, können Sie implementieren Ihre eigenen log base 2 in SystemVerilog: