Menu
Coddy logo textTech

What Are Delays

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 où un signal change. Ils servent à modéliser le comportement temporel réel du matériel.

Pourquoi les délais sont nécessaires

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

  • En simulation, sans délais, tout se produit au temps 0
  • Les délais 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 des portesDélai à travers les portes logiques
Délais d’affectationDélai lors de l’affectation de valeurs
Directive TimescaleDé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 encore 5 unités de temps, a devient 0
end

Chronologie :

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

Délais dans les blocs Always

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

Cela crée un signal d’horloge continu (en supposant que clk a été first initialisé à 0 dans un bloc initial. Sinon, ~x reste x).

Règles importantes

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

Défi

Que faire :

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

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

Entraînez-vous par vous-même : Compilateur Verilog en ligne