Menu
Coddy logo textTech

System-Tasks verwenden

Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 77 von 90.

System-Tasks sind integrierte Befehle in Verilog, die mit einem Dollarzeichen ($) beginnen. Sie führen nützliche Funktionen aus, wie zum Beispiel das Ausgeben von Meldungen, das Beenden der Simulation und das Erstellen von Waveform-Dateien.

Wir haben bereits $display, $monitor, $dumpfile und $dumpvars in vorangegangenen Lektionen behandelt. In dieser Lektion werden wir uns zusätzliche System-Tasks ansehen, die in Testbenches nützlich sind.

Zusätzliche System-Tasks

System-TaskZweck
$timeGibt die aktuelle Simulationszeit zurück
$finishBeendet die Simulation
$stopPausiert die Simulation
$randomGeneriert eine Zufallszahl

$time

Gibt die aktuelle Simulationszeit zurück. Nützlich, um zu verfolgen, wann Ereignisse eintreten.

$display("Current time is %0t", $time);

$finish

Beendet die Simulation. Verwenden Sie dies immer am Ende Ihres Testbench-Codes.

$finish;

$stop

Pausiert die Simulation. Kann mit einem Simulator-Befehl fortgesetzt werden. Nützlich für das Debugging.

$stop;

$random

Erzeugt eine Zufallszahl. Nützlich für die Erstellung von zufälligen Teststimuli.

reg [7:0] rand_value;
rand_value = $random;

Beispiel mit mehreren System-Tasks

module system_tasks_demo;
  reg [7:0] data;
  integer i;
  
  initial begin
    $display("Simulation started at time %0t", $time);
    
    for (i = 0; i < 5; i = i + 1) begin
      data = $random;
      $display("Random value %d: %b", i, data);
    end
    
    $stop;
    #10 $display("Resumed at time %0t", $time);
    
    $display("Simulation finished at time %0t", $time);
    $finish;
  end
endmodule
challenge icon

Aufgabe

Fügen Sie die fehlenden System-Tasks zu dieser Testbench hinzu.

Was zu tun ist:

  1. Fügen Sie $display hinzu, um die aktuelle Zeit zu Beginn auszugeben
  2. Fügen Sie $display hinzu, um die aktuelle Zeit am Ende auszugeben
  3. Fügen Sie $finish hinzu, um die Simulation zu beenden

Spickzettel

System-Tasks in Verilog beginnen mit $ und führen Simulations-Utilities aus:

System-TaskZweck
$timeGibt die aktuelle Simulationszeit zurück
$finishBeendet die Simulation
$stopPausiert die Simulation
$randomErzeugt eine Zufallszahl
$display("Time: %0t", $time); // Aktuelle Zeit ausgeben
$finish;                       // Simulation beenden
$stop;                         // Simulation pausieren

reg [7:0] rand_value;
rand_value = $random;          // Zufallszahl zuweisen

Probier es selbst

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

module testbench;
  reg a, b;
  wire c;
  
  and_gate dut (
    .a(a),
    .b(b),
    .c(c)
  );

  initial begin
    // TODO: $display mit aktueller Zeit zu Beginn hinzufügen
    // Format: "Start time: %0t"
    
    
    $monitor("Time %0t: a=%b, b=%b, c=%b", $time, a, b, c);
    
    a = 0; b = 0; #10;
    a = 0; b = 1; #10;
    a = 1; b = 0; #10;
    a = 1; b = 1; #10;
    
    // TODO: $display mit aktueller Zeit am Ende hinzufügen
    // Format: "End time: %0t"
    
    
    // TODO: $finish hinzufügen
    
  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