Display und Monitor
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 75 von 90.
$display und $monitor sind Systemaufgaben, mit denen Informationen aus deiner Simulation ausgegeben werden. Sie helfen dir zu sehen, was in deinem Entwurf passiert.
$display
$display gibt eine Meldung 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, sobald 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 | |
|---|---|---|
| Wann es ausgegeben wird | Einmal bei der Ausführung | Jedes Mal, wenn sich eine Variable ändert |
| Wie oft | So oft, wie du es aufrufst | Fortlaufend (bis zur Änderung) |
| Verwendung | Überschriften, Testnachrichten | Verfolgen sich ändernder Signale |
Häufige 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 | Zeichenkette | $display("%s", "Hello"); |
Wichtige Regeln
| Regel | Erklärung |
|---|---|
$display gibt einmal aus | Gut für Überschriften und Endergebnisse |
$monitor gibt bei Änderungen aus | Gut zum Beobachten von Signalen |
Nur ein $monitor ist aktiv | Der letzte überschreibt den vorherigen |
Verwende $finish zum Beenden | Andernfalls kann die Simulation unbegrenzt weiterlaufen |
Aufgabe
Füge die fehlenden Anweisungen $display und $monitor zu diesem Testbench hinzu.
Aufgabe:
- Füge
$displayhinzu, um eine Überschrift auszugeben: "Testing OR Gate" - Füge
$monitorhinzu, um die Zeit sowie x, y und z auszugeben, sobald sich ein Signal ändert. Format: "Time %0t: x=%b, y=%b, z=%b" - Füge am Ende
$displayhinzu, um "Test complete" auszugeben
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: Füge die Überschrift "Testing OR Gate" mit $display hinzu
// TODO: Füge $monitor hinzu, um Zeit, x, y, z zu verfolgen
// Format: "Time %0t: x=%b, y=%b, z=%b"
// Testsignale anlegen
x = 0; y = 0; #10;
x = 0; y = 1; #10;
x = 1; y = 0; #10;
x = 1; y = 1; #10;
// TODO: Füge $display "Test complete" hinzu
$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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster14Grundlagen von Testbenches
Was ist ein TestbenchStimuli erzeugenDisplay und MonitorDumpfile und DumpvarsSystem Tasks verwendenZusammenfassung – vollständiger Testbench3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellenÜbe selbstständig: Online-Verilog-Compiler