Menu
Coddy logo textTech

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");
end

Ausgabe:

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;
end

Ausgabe:

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 AusgabeEinmal bei der AusführungJedes Mal, wenn sich eine Variable ändert
HäufigkeitSo oft, wie es aufgerufen wirdKontinuierlich (bis zur Änderung)
Verwendung fürHeader, TestnachrichtenVerfolgen von sich ändernden Signalen

Gängige Formatbezeichner

BezeichnerBedeutungBeispiel
%bBinär$display("%b", a);
%dDezimal$display("%d", count);
%hHexadezimal$display("%h", data);
%tZeit$display("%t", $time);
%0tZeit (ohne Leerzeichen)$display("%0t", $time);
%sString$display("%s", "Hello");

Wichtige Regeln

RegelErklärung
$display gibt einmal ausGut für Header und Endergebnisse
$monitor gibt bei Änderung ausGut zur Überwachung von Signalen
Nur ein $monitor aktivDer letzte überschreibt den vorherigen
Verwenden Sie $finish zum StoppenAndernfalls läuft die Simulation möglicherweise ewig
challenge icon

Aufgabe

Füge die fehlenden $display- und $monitor-Anweisungen zu dieser Testbench hinzu.

Was zu tun ist:

  1. Füge $display hinzu, um eine Kopfzeile auszugeben: "Testing OR Gate"
  2. Füge $monitor hinzu, um Zeit, x, y und z auszugeben, wann immer sich ein Signal ändert. Format: "Time %0t: x=%b, y=%b, z=%b"
  3. Füge am Ende $display hinzu, 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;
end

Hä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 $monitor gleichzeitig 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
endmodule
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen