Verwenden Sie wirklich die Zeitskala?

1. Was ist der `timescale-Befehl?

        Ich glaube, jeder ist mit dem `timescale-Befehl vertraut und hat ihn mehr oder weniger gesehen. Die meisten Leute können ihn vielleicht verwenden, aber tatsächlich gibt es einige Dinge, auf die man achten muss, wenn man diesen allgemeinen Befehl verwendet.

        `timescale ist eine vorkompilierte Anweisung in Verilog-Syntax, die normalerweise verwendet wird, um die Einheit und Genauigkeit der Zeit in der Simulation anzugeben.

2. Verwendung von `timescale

        `timescale besteht aus zwei Teilen, Zeiteinheit und Zeitpräzision .Das Format ist `timescale timeunit / timeprecision.

        timeunit repräsentiert die Simulationszeiteinheit und timeprecision repräsentiert die Simulationszeitpräzision.

        Zum Beispiel: `timescale 1ns/1ps         oder         `timescale 1us/1ns          und so weiter.

        Notiz:

  • Die Zeiteinheit und Zeitgenauigkeit kann nur eine der drei ganzen Zahlen 1, 10 und 100 sein
  • Einheiten können s, ms, us, ns, ps und fs sein
  • Die Zeitgenauigkeit muss kleiner oder gleich der Zeiteinheit sein

       

        Schauen wir uns ein einfaches Beispiel an, um die Verwendung von `timescale zu verstehen:

`timescale 10 ns / 1 ns     //单位10ns,精度1ns

module test;
    reg set;
    parameter d = 1.6;
    initial begin
        #1    set = 0;    //1*10 ns  = 10ns
        #d    set = 1;    //1.6*10ns = 16ns
    end
endmodule

  • Die Zeiteinheit ist auf 10 ns und die Genauigkeit auf 1 ns eingestellt
  • Weisen Sie beim ersten Mal 0 zu, um #1 einzustellen, und die Verzögerungszeit beträgt zu diesem Zeitpunkt 10 ns, da die Zeiteinheit 10 ns beträgt und # 1 eine Verzögerung von 1 Zeiteinheit angibt
  • Weisen Sie beim zweiten Mal 1 zu, um #d einzustellen. Zu diesem Zeitpunkt beträgt die Verzögerungszeit 16 + 10 ns, da die Zeiteinheit 10 ns beträgt. #d bedeutet, dass die Verzögerung 1,6 Zeiteinheiten beträgt, dh 16 ns.

        Die Simulationswellenform ist wie folgt:

         Der Satz gibt keinen Anfangswert an, ist also ein unbestimmter Zustand, ihm wird bei 10 ns der Wert 0 und bei 26 ns der Wert 1 zugewiesen, und die Mindesteinheit der Messskala ist 1 ns, dh die Genauigkeit ist 1ns. All dies erfüllt die Schlussfolgerung.

        Durch das obige Beispiel können Sie die Verwendung von Zeiteinheiten verstehen, aber es ist unmöglich zu sehen, wie sich die Zeitpräzisionseinstellung auf die Verzögerung auswirkt.Als Nächstes werden wir den obigen TB-Code wie folgt leicht ändern:

`timescale 10 ns / 1 ns     //单位10ns,精度1ns

module test;
    reg set;
    parameter d1 = 1.54;
    parameter d2 = 1.55;
    initial begin
        #1    set = 0;    //1*10 ns  = 10ns
        #d1    set = 1;    //1.54*10ns = 15.4ns ≈ 15ns(四舍五入)
        #d2    set = 0;    //1.55*10ns = 15.5ns ≈ 16ns(四舍五入)
    end
endmodule

  • Die Zeiteinheit ist auf 10 ns und die Genauigkeit auf 1 ns eingestellt
  • Weisen Sie beim ersten Mal 0 zu, um #1 einzustellen, und die Verzögerungszeit beträgt zu diesem Zeitpunkt 10 ns, da die Zeiteinheit 10 ns beträgt und # 1 eine Verzögerung von 1 Zeiteinheit angibt
  • Weisen Sie beim zweiten Mal #d1 1 zu. Zu diesem Zeitpunkt beträgt die Verzögerungszeit 15 + 10 ns, da die Zeiteinheit 10 ns beträgt. #d1 bedeutet, dass die Verzögerung 1,54 Zeiteinheiten beträgt, dh 15,4 ns. Weil die Die Zeitgenauigkeit beträgt 1 ns, kann also nicht 15,4 ns darstellen, sie wird auf 15 ns gerundet
  • Weisen Sie zum dritten Mal 0 zu, um #d2 einzustellen.Zu diesem Zeitpunkt beträgt die Verzögerungszeit 16+15+10 ns, da die Zeiteinheit10 ns beträgt und #d2 eine Verzögerung von 1,55 Zeiteinheiten, dh 15,5ns, darstellt , da die Zeitgenauigkeit 1 ns beträgt. Sie kann also nicht 15,5 ns darstellen, sie wird auf 16 ns gerundet

        Die Simulationswellenform ist wie folgt:

         Die Menge gibt keinen Anfangswert an, ist also ein unbestimmter Zustand; ihr wird der Wert 0 bei 10 ns, der Wert 1 bei 25 ns und der Wert 0 bei 41 ns zugewiesen, und die kleinste Einheit der Messskala ist 1ns, das heißt, die Genauigkeit beträgt 1ns. All dies erfüllt die Schlussfolgerung.

3. Dinge, auf die Sie achten sollten

        Die `timescale-Direktive ist nicht schwer zu verwenden, aber es gibt einige Vorbehalte.

3.1 Stellen Sie keine sinnlos hohe Genauigkeit ein  

        Je höher die Zeitpräzision, desto mehr Ressourcen und Zeit verbraucht die Simulation.Laut Clifford E. Cummings' Artikel „VERILOG CODING STYLES FOR IMPROVED SIMULATION EFFICIENCY“, Abschnitt 8, wird die Einstellung „Zeitskala 1ns/1ps verbraucht Ressourcen“ auf 256 % gesetzt die Zeitskala 1ns/1ns, während die Simulation fast doppelt so lange dauert.

        Ich sehe oft einige Codes (in der Tat, einschließlich mir selbst, hahaha), es ist direkt die Zeitskala 1ns/1ps, aber im Simulationsprozess müssen Sie die Ergebnisse auf PS-Ebene nicht sehen, es ist nur so ein Bild, um Ärger zu ersparen. In dem Fall, in dem RTL nicht sehr groß ist, ist die Wirkung, die es bringt, intuitiv schwer zu erkennen, aber mit der Komplexität und dem großflächigen Design wird dies zweifellos zu einer Katastrophe.

        Wenn Sie also in Zukunft TB schreiben, fragen Sie sich vielleicht: „Brauchen Sie wirklich eine so hohe Präzision?“

3.2. Achten Sie auf die Kompilierungsreihenfolge mehrerer `Zeitskalen

        `timescale ist eine vorkompilierte Anweisung der Verilog-Syntax, und vorkompilierte Anweisungen werden normalerweise sequentiell ausgeführt, was bedeutet, dass, sobald `timescale kompiliert ist, es einen Einfluss auf die gesamte nachfolgende Simulationszeit und -genauigkeit hat, bis es auf eine andere `timescale-Anweisung trifft (d. h. die vorherige Anweisung wird überschrieben, Zeit und Genauigkeit neu vorkompilieren) oder `resetall-Anweisung (alle vorkompilierten Anweisungen zurücksetzen).

        Natürlich empfehle ich trotzdem, einheitlich einen `timescale-Befehl zu verwenden, um das Projektmanagement zu erleichtern und unnötigen Ärger zu vermeiden.

4, Referenz

        《IEEE-Standard für Verilog® Hardware Description Language》

        《VERILOG CODING STYLES FÜR VERBESSERTE SIMULATIONSEFFIZIENZ》

        

Ich denke du magst

Origin blog.csdn.net/wuzhikaidetb/article/details/124299401
Empfohlen
Rangfolge