Menu
Coddy logo textTech

Using System Tasks

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

Systemaufgaben sind integrierte Befehle in Verilog, die mit einem Dollarzeichen ($) beginnen. Sie führen nützliche Funktionen aus, z. B. das Ausgeben von Nachrichten, das Beenden der Simulation und das Erstellen von Wellenformdateien.

Wir haben $display, $monitor, $dumpfile und $dumpvars bereits in vorherigen Lektionen behandelt. In dieser Lektion sehen wir uns zusätzliche Systemaufgaben an, die in Testbenches nützlich sind.

Zusätzliche Systemaufgaben

SystemaufgabeZweck
$timeAktuelle Simulationszeit zurückgeben
$finishSimulation beenden
$stopSimulation pausieren
$randomZufallszahl generieren

$time

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

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

$finish

Beendet die Simulation. Verwende es immer am Ende deiner testbench.

$finish;

$stop

Hält die Simulation an. Sie kann mit einem Simulatorbefehl fortgesetzt werden. Nützlich zum Debuggen.

$stop;

$random

Erzeugt eine Zufallszahl. Nützlich zum Erstellen zufälliger Teststimuli.

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

Beispiel mit mehreren Systemaufgaben

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üge die fehlenden Systemaufgaben zu diesem testbench hinzu.

Was zu tun ist:

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

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: Füge $display mit aktueller Zeit am Anfang hinzu
    // 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: Füge $display mit aktueller Zeit am Ende hinzu
    // Format: "End time: %0t"
    
    
    // TODO: Füge $finish hinzu
    
  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

Übe selbstständig: Online-Verilog-Compiler