Menu
Coddy logo textTech

Qu'est-ce que les délais

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

En Verilog, les délais contrôlent le moment où une instruction s'exécute ou lorsqu'un signal change. Ils sont utilisés pour modéliser le comportement temporel réel du matériel.

Pourquoi les délais sont nécessaires

Le matériel réel met du temps pour que les signaux circulent à travers les fils et les portes. Les délais vous permettent de simuler ce comportement temporel.

  • En simulation, sans délais, tout se passe au temps 0
  • Les délais vous permettent d'espacer les événements dans le temps
  • Ils aident à tester les conceptions sensibles au temps comme les horloges et les machines à états

Types de délais

Type de délaiObjectif
Délais de porteDélai à travers les portes logiques
Délais d'assignationDélai lors de l'assignation de valeurs
Directive d'échelle de temps (Timescale)Définit les unités de temps pour la simulation

Syntaxe de base

Un délai s'écrit avec un # suivi d'un nombre :

#10 clk = ~clk;   // Attendre 10 unités de temps, puis basculer l'horloge
#5 a = b;         // Attendre 5 unités de temps, puis assigner a = b

Le nombre après # est le nombre d'unités de temps à attendre.

Exemple simple

initial begin
  a = 0;
  #10 a = 1;   // Après 10 unités de temps, a devient 1
  #5 a = 0;    // Après 5 autres unités de temps, a devient 0
end

Timing :

  • Temps 0 : a = 0
  • Temps 10 : a = 1
  • Temps 15 : a = 0

Délais dans les blocs Always

always #5 clk = ~clk;   // Alterne l'horloge toutes les 5 unités de temps

Ceci crée un signal d'horloge continu.

Règles importantes

RègleExplication
Symbole #Marque un délai
Nombre après #Nombre d'unités de temps à attendre
Les délais sont cumulatifs#10 puis #20 attend un total de 30
Non synthétisableLes délais sont uniquement destinés à la simulation
challenge icon

Défi

Ce qu'il faut faire :

Ajoutez les délais manquants pour que ce code affiche des messages aux instants 0, 10, 25 et 40.

Aide-mémoire

En Verilog, les délais utilisent # suivi d'unités de temps pour contrôler le moment où les instructions s'exécutent :

#10 a = 1;   // Wait 10 time units, then assign

Les délais sont cumulatifs — chaque délai s'ajoute au temps actuel :

initial begin
  a = 0;      // Time 0
  #10 a = 1;  // Time 10
  #5  a = 0;  // Time 15
end

Utilisation dans les blocs always pour générer des horloges :

always #5 clk = ~clk;  // Toggle every 5 units

Remarque : Les délais sont uniquement destinés à la simulation — ils ne sont pas synthétisables.

Essayez vous-même

module delay_challenge;
  
  initial begin
    $display("Time %0t: Start", $time);
    // TODO: Ajouter un délai pour atteindre le temps 10
    $display("Time %0t: After first delay", $time);
    // TODO: Ajouter un délai pour atteindre le temps 25
    $display("Time %0t: After second delay", $time);
    // TODO: Ajouter un délai pour atteindre le temps 40
    $display("Time %0t: End", $time);
    $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