Menu
Coddy logo textTech

Utilisation des tâches système

Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 77 sur 90.

Les tâches système sont des commandes intégrées en Verilog qui commencent par un signe dollar ($). Elles effectuent des fonctions utiles telles que l'affichage de messages, l'arrêt de la simulation et la création de fichiers de formes d'onde.

Nous avons déjà abordé $display, $monitor, $dumpfile et $dumpvars dans les leçons précédentes. Dans cette leçon, nous examinerons d'autres tâches système utiles dans les bancs d'essai.

Tâches système supplémentaires

Tâche systèmeObjectif
$timeRetourne le temps de simulation actuel
$finishTermine la simulation
$stopMet la simulation en pause
$randomGénère un nombre aléatoire

$time

Retourne le temps de simulation actuel. Utile pour suivre le moment où les événements se produisent.

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

$finish

Termine la simulation. Utilisez-le toujours à la fin de votre banc de test (testbench).

$finish;

$stop

Met en pause la simulation. Peut être reprise avec une commande du simulateur. Utile pour le débogage.

$stop;

$random

Génère un nombre aléatoire. Utile pour créer des stimulus de test aléatoires.

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

Exemple utilisant plusieurs tâches système

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

Défi

Ajoutez les tâches système manquantes à ce banc d'essai (testbench).

Ce qu'il faut faire :

  1. Ajoutez $display pour afficher l'heure actuelle au début
  2. Ajoutez $display pour afficher l'heure actuelle à la fin
  3. Ajoutez $finish pour terminer la simulation

Aide-mémoire

Les tâches système en Verilog commencent par $ et effectuent des utilitaires de simulation :

Tâche systèmeObjectif
$timeRetourne le temps de simulation actuel
$finishTermine la simulation
$stopMet la simulation en pause
$randomGénère un nombre aléatoire
$display("Time: %0t", $time); // affiche le temps actuel
$finish;                       // termine la simulation
$stop;                         // met la simulation en pause

reg [7:0] rand_value;
rand_value = $random;          // assigne un nombre aléatoire

Essayez vous-même

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: Ajouter $display avec l'heure actuelle au début
    // 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: Ajouter $display avec l'heure actuelle à la fin
    // Format: "End time: %0t"
    
    
    // TODO: Ajouter $finish
    
  end
endmodule
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux