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élai | Objectif |
|---|---|
| Délais de porte | Délai à travers les portes logiques |
| Délais d'assignation | Dé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 = bLe 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
endTiming :
- 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 tempsCeci crée un signal d'horloge continu.
Règles importantes
| Règle | Explication |
|---|---|
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étisable | Les délais sont uniquement destinés à la simulation |
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 assignLes 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
endUtilisation dans les blocs always pour générer des horloges :
always #5 clk = ~clk; // Toggle every 5 unitsRemarque : 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
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
1Introduction
Qu'est-ce que VerilogHardware vs SoftwareNiveaux d'abstraction de conceptionVotre premier moduleCommentaires4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Assignation et portes logiques
Assignation continueAssignation avec opérateursPrimitives de portes intégréesPortes AND OR NOTPortes XOR XNORRécapitulatif - Circuit à portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'ALU13Temporisation et Délais
Qu'est-ce que les délaisDélais de porteDélais d'affectationDirective TimescaleGénération d'horlogeRécapitulatif - Contrôle de la temporisation2Types de données
Type WireType RegEntiers et RéelsVecteursTableauxParamètresRécapitulatif - Déclarer des signaux5Opérateurs - Partie 2
Opérateurs logiquesOpérateurs de réductionOpérateurs de décalageOpérateur de concaténationOpérateur conditionnelRécapitulatif - Défi sur les opérateurs11Boucles
Boucle ForBoucle WhileBoucle RépéterBoucle InfinieInstruction DisableRécapitulatif - Modèles de boucles3Système de numération
Représentation binaireNombres avec tailleNombres sans tailleNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats de nombres6Modules
Structure d'un modulePorts d'entrée et de sortiePorts InoutInstanciation de moduleMappage de ports par nomMappage de ports par ordreRécapitulatif - Créer un module9Blocs procéduraux
Bloc AlwaysBloc InitialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - Always vs Initial12Projet Multiplexeur
Conception d'un Mux 2 vers 1Conception d'un Mux 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à états