2017-03-02 3 views
0

Bitte helfen, einige Simulator Verhalten mit Zeitskala verbunden zu verstehen. Das ist meine Top-Modul: Problem mit Simulation Timing

module top; 

//timeunit 1ns; 
//timeprecision 1ps; 

bit clk_62p5; // PCI write clock 

always 
    #8 clk_62p5++; 

DPSRAM_64X4096 u_MEM (
    .clka(clk_62p5), 
    …. 
); 

… 

endmodule 

`timescale 1 ns/1 ps 

module DPSRAM_64X4096 (…); 
… 
endmodule 

Das ist mein Simulation Skript:

irun \ 
… 
    -timescale 1ns/1ps \ 
    … 

Also, wenn ich die Simulation laufen sehe ich, dass clk_62p5 Taktperiode 16 PS und nicht 16ns. Können Sie mir bitte erklären, warum ich ein solches Verhalten habe?

Und 2-Frage, was ist der Unterschied zwischen Zeiteinheit, Zeitpräzision und Zeitskala?

Dank Hayk

+0

Um Ihre erste Frage nicht zu beantworten: Ich konnte Ihr Problem nicht reproduzieren. Hier ist [mein Versuch] (https://www.edaplayground.com/x/aP_). Bitte könnten Sie einen [MCVE] (http://stackoverflow.com/help/mcve) posten. Ich bemerke jedoch, dass Sie "Zeitskala 1 ns/1 ps" geschrieben haben. Dies sollte 'Zeitskala 1ns/1ps sein. Vielleicht ist das dein Problem? –

+0

Diese Begriffe sind vollständig in der freien IEEE Std 1800-2012 beschrieben. – toolic

+0

Ja, ich denke, Sie sollten die Leerzeichen in 'Zeitskala' entfernen und erneut prüfen –

Antwort

1

Ihre zweite Frage zu beantworten:

`Zeitplan ist eine Compiler-Direktive. Compiler Direktiven verursachen können um Abhängigkeiten kompilieren, ist, dass ein anderes Verhalten oder Probleme, die durch die tatsächliche Reihenfolge verursacht werden Sie Ihre Dateien in kompilieren Angenommen, Sie haben drei Dateien:.

fileA.v `timescale 1ns/1ps 
fileB.v `timescale 10ns/10ps 
fileC.v // no timescale directive 

Wenn Sie in dieser Reihenfolge zusammenstellen

fileA.v fileB.v fileC.v 

dann wird die Präzision 1ps sein - die kleinste der Kompilierung gefunden - die TIMEUNIT für jede Datei wird sein:

fileA.v 1ns because of the `timescale directive 
fileB.v 10ns because of the `timescale directive 
fileC.v 10ns because the `timescale directive from fileB.v continues to have an effect 

Wenn Sie in dieser Reihenfolge

fileA.v fileC.v fileB.v 

dann die Präzision 1ps wird kompilieren - die kleinste der Kompilierung gefunden - die TIMEUNIT für jede Datei wird sein:

fileA.v 1ns because of the `timescale directive 
fileB.v 10ns because of the `timescale directive 
fileC.v 1ns because the `timescale directive from fileA.v continues to have an effect 

Wenn Sie in dieser Reihenfolge zusammenstellen

fileC.v fileA.v fileB.v 

dann erhalten Sie einen Fehler, weil es illegal ist, eine Datei ohne timescale directive appearing before any file with a Zeitskala Direktive zu haben. (Obwohl es in Ordnung ist, wenn keine Datei eine 'Zeitskala-Direktive' hat).

timeunit und timeprecision sind neuere, System-Verilog Möglichkeiten, das gleiche zu erreichen. Da sie keine Compiler-Direktiven sind, leiden sie nicht unter den damit verbundenen Problemen. Sie gelten nur für den Bereich ($ unit/package/module/program/interface), in dem sie verwendet werden (und müssen in diesem Bereich an erster Stelle stehen).

Wenn Sie timeunit und timeprecision sowie eine timescale directive then TIMEUNIT and timeprecision` Priorität.