Display und Monitor
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 75 von 90.
$display und $monitor sind System-Tasks, die verwendet werden, um Informationen aus Ihrer Simulation auszugeben. Sie helfen Ihnen zu sehen, was innerhalb Ihres Designs passiert.
$display
$display gibt eine Nachricht einmal in dem Moment aus, in dem es ausgeführt wird.
Syntax:
$display("message", variables);Beispiel:
initial begin
$display("Simulation started");
#10;
$display("Time 10");
#10;
$display("Time 20");
endAusgabe:
Simulation started
Time 10
Time 20$monitor
$monitor gibt automatisch eine Nachricht aus, wann immer sich eine seiner Variablen ändert.
Syntax:
$monitor("message", variables);Beispiel:
initial begin
a = 0; b = 0;
$monitor("Time %0t: a=%b, b=%b", $time, a, b);
#10 a = 1;
#10 b = 1;
#10 a = 0;
endAusgabe:
Time 0: a=0, b=0
Time 10: a=1, b=0
Time 20: a=1, b=1
Time 30: a=0, b=1$display vs $monitor
| $display | $monitor | |
|---|---|---|
| Zeitpunkt der Ausgabe | Einmal bei der Ausführung | Jedes Mal, wenn sich eine Variable ändert |
| Häufigkeit | So oft, wie es aufgerufen wird | Kontinuierlich (bis zur Änderung) |
| Verwendung für | Header, Testnachrichten | Verfolgen von sich ändernden Signalen |
Gängige Formatbezeichner
| Bezeichner | Bedeutung | Beispiel |
|---|---|---|
%b | Binär | $display("%b", a); |
%d | Dezimal | $display("%d", count); |
%h | Hexadezimal | $display("%h", data); |
%t | Zeit | $display("%t", $time); |
%0t | Zeit (ohne Leerzeichen) | $display("%0t", $time); |
%s | String | $display("%s", "Hello"); |
Wichtige Regeln
| Regel | Erklärung |
|---|---|
$display gibt einmal aus | Gut für Header und Endergebnisse |
$monitor gibt bei Änderung aus | Gut zur Überwachung von Signalen |
Nur ein $monitor aktiv | Der letzte überschreibt den vorherigen |
Verwenden Sie $finish zum Stoppen | Andernfalls läuft die Simulation möglicherweise ewig |
Aufgabe
Füge die fehlenden $display- und $monitor-Anweisungen zu dieser Testbench hinzu.
Was zu tun ist:
- Füge
$displayhinzu, um eine Kopfzeile auszugeben: "Testing OR Gate" - Füge
$monitorhinzu, um Zeit, x, y und z auszugeben, wann immer sich ein Signal ändert. Format: "Time %0t: x=%b, y=%b, z=%b" - Füge am Ende
$displayhinzu, um "Test complete" auszugeben
Spickzettel
$display druckt einmal bei der Ausführung; $monitor druckt automatisch, wann immer sich eine seiner Variablen ändert.
$display("message", variables);
$monitor("message", variables);Beispiel:
initial begin
$display("Simulation started");
$monitor("Time %0t: a=%b, b=%b", $time, a, b);
#10 a = 1;
#10 b = 1;
endHäufige Formatbezeichner:
%b— Binär%d— Dezimal%h— Hexadezimal%t/%0t— Zeit (mit/ohne Auffüllung)%s— Zeichenfolge
Wichtige Regeln:
- Es ist immer nur ein
$monitorgleichzeitig aktiv — der letzte überschreibt die vorherigen. - Verwenden Sie
$finish, um die Simulation zu beenden.
Probier es selbst
module or_gate (
input x,
input y,
output z
);
assign z = x | y;
endmodule
module testbench;
reg x, y;
wire z;
or_gate dut (
.x(x),
.y(y),
.z(z)
);
initial begin
// TODO: $display-Header "Testing OR Gate" hinzufügen
// TODO: $monitor hinzufügen, um Zeit, x, y, z zu verfolgen
// Format: "Time %0t: x=%b, y=%b, z=%b"
// Stimulus anwenden
x = 0; y = 0; #10;
x = 0; y = 1; #10;
x = 1; y = 0; #10;
x = 1; y = 1; #10;
// TODO: $display "Test complete" hinzufügen
$finish;
end
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster14Testbench-Grundlagen
Was ist eine TestbenchErstellen von StimuliDisplay und MonitorDumpfile und DumpvarsSystem-Tasks verwendenZusammenfassung – Vollständige Testbench3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen