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 delays 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 du matériel réel.

Pourquoi les délais sont nécessaires

Le matériel réel a besoin de 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 vous permettent d'espacer les événements dans le temps
  • Ils aident à tester les conceptions sensibles au chronométrage comme les horloges et les machines d'état

Types de délais

Type de délaiObjectif
Gate DelaysDélai à travers les portes logiques
Assignment DelaysDélai lors de l'assignation de valeurs
Timescale DirectiveDé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 de time units à 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

Delays in Always Blocks

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 d'abord été initialisé à 0 dans un bloc initial — sinon ~x reste x).

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 pour la simulation
challenge icon

Défi

Ce qu'il faut faire :

Ajoutez les délais manquants pour que ce code affiche les messages aux instants 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