Wenn ich es in einem Programm verwendete, wurde ein Fehler generiert ($clog2
wird nicht unterstützt). Aber ich sehe unsere StackOverflowers mit $clog2
Aufgabe in ihrem Programm. Bitte sagen Sie mir, wie man das benutzt.
Antwort
$clog2
wird von Verilog nicht unterstützt. Es ist eine Systemaufgabe SystemVerilog. Darüber hinaus sind Systemaufgaben nicht synthetisierbar.
Sie können jedoch eine Funktion/Makro machen, die den log bsae 2 Wert einer gegebenen Zahl ausgibt. Hier sind einige der Beispiele von benutzerdefinierten Implementierung:
Mit Makro:
`define CLOG2(x) \
(x <= 2) ? 1 : \
(x <= 4) ? 2 : \
(x <= 8) ? 3 : \
(x <= 16) ? 4 : \
(x <= 32) ? 5 : \
(x <= 64) ? 6 : \
..etc, ..
(x <= 4294967296) ? 32 : \
-1
parameter MAX_VALUE = 42;
parameter MAX_WIDTH = `CLOG2(MAX_VALUE);
Mit function
:
function [31:0] log2;
input [31:0] value;
integer i;
reg [31:0] j;
begin
j = value - 1;
log2 = 0;
for (i = 0; i < 31; i = i + 1)
if (j[i]) log2 = i+1;
end
endfunction
initial
begin
$display("10 = %d", log2(10));
end
Sowohl die obigen Beispiele führt zu synthetisierbaren Code. Der Benutzer kann diesen Code gemäß der maximalen Bitbreitenanforderung erweitern.
Sie können also entweder den Compiler ändern, um SystemVerilog-Code zu kompilieren, oder die obige Funktion implementieren, um einen benutzerdefinierten Protokollcode zu erstellen.
Obwohl im Allgemeinen eine SystemVerilog-Erweiterung betrachtet wird, wurde "$ clog2" zu Verilog in IEEE Std 1364-2005 – Greg
Yep hinzugefügt. Danke für die Klarstellung. AFAIK, es war kein Teil von Verilog 1364-2001. – sharvil111
$clog2
wird unterstützt von Verilog, aber nur Verilog-2005 (IEEE Std 1364-2005). Da Verilog-2005 zur selben Zeit wie IEEE SystemVerilog veröffentlicht wurde, wird es allgemein als SystemVerilog-Erweiterung betrachtet. Hier sind zwei Quelle $clog2
als Verilog-2005-Funktion zu dokumentieren:
- Sutherland HDL - Busting the Myth that SystemVerilog is only for Verification § 9.6 Expression Größe Funktionen
- Xilinx - Verilog $clog2 function implemented improperly
Der Verilog-2005 war vor allem ein Zwischen Release für eventuelle Fusion von Verilog und SystemVerilog (was in IEEE Std 1800-2009 passiert). Einige Simulatoren haben Verilog-2005 möglicherweise nicht implantiert, da alles in SystemVerilog enthalten ist. Wenn Ihr Simulator Verilog-2005 nicht standardmäßig ausführt, lesen Sie in Ihrem Handbuch nach, das möglicherweise eine Option zum Aktivieren enthält. Das Aktivieren von SystemVerilog ist eine weitere Option oder Benutzermethoden wie in der Lösung von sharvil111 beschrieben.
- 1. RISCV VERILOG HDL-Code
- 2. Verilog HDL? Operator
- 3. Coding Zustand Maschinentisch (Verilog HDL)
- 4. Ob die $ Display-Syntax während der Nachroutensimulation in Verilog HDL funktioniert
- 5. Muxltiplexer-Implementierung in HDL
- 6. Meißel HDL für CPLDs
- 7. Wenn Verilog und VHDL "HDL (Hardware Description Language)" sind, was sind Python, Java usw.?
- 8. Fehler (10663): Verilog HDL-Anschluss Anschlussfehler bei DSD_Project.v (34): Ausgang oder inout Port "Hit" muss
- 9. Wird die SSDT-Replikationsumgebung unterstützt?
- 10. Wird die Toolbox nur unterstützt?
- 11. Wird die Websocket-Funktion in Cobalt unterstützt?
- 12. Anruf per Referenz in Verilog-Code
- 13. Zufallsgenerierung die gleichen Zahlen in Verilog Ausgabe
- 14. vertauschen zwei Variablen in Verilog mit XOR
- 15. Synthetisierbare Verzögerung in Verilog
- 16. Geschweifte Klammern in Verilog
- 17. Wird die Mikrofonklasse auf Android unterstützt?
- 18. Array Ausgang in Verilog
- 19. Xst: 3002 in Verilog
- 20. Die Art Service IHostBufferPolicySelector wird nicht unterstützt
- 21. BCD Adder in Verilog
- 22. Wird F # in Xamarin.Forms unterstützt?
- 23. wird SpEL in Importanweisungen unterstützt?
- 24. Exponentieller Zerfall in Verilog
- 25. Wird die Legacy-Firebase-API weiterhin unterstützt?
- 26. Die redirect_uri URL wird nicht unterstützt
- 27. Infrarot-Ausgang in Verilog
- 28. Aufgabe in Verilog
- 29. TESTBENCH in Verilog
- 30. Die Währung 'HKD' wird in "DoDirectPayment" Methode in Paypal unterstützt?
Um Ihr spezifisches Problem zu beheben, können Sie Ihren Simulator wahrscheinlich anweisen, Ihren Code als SystemVerilog zu behandeln. Ich weiß nicht, welches Werkzeug Sie verwenden, aber das Hinzufügen von etwas wie "-sv" zum Befehl könnte den Trick tun. – nguthrie