Délais d'affectation
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 69 sur 90.
Dans les leçons précédentes, nous avons couvert les general delays (#10 a = b;) et les gate delays (and #5 (out, a, b);). Maintenant, nous couvrons les assignment delays, qui sont des delays qui se produisent à l'intérieur d'un block procédural (comme initial ou always) dans le cadre d'une instruction d'assignment.
Un assignment delay waits pendant un time spécifié, puis exécute l'assignment. Le delay est placé after le symbole # et avant l'assignment.
Syntaxe :
variable = #delay expression;Contrairement à un delay général #10 a = b; (delay puis assign), un assignment delay a = #10 b; prend la valeur de b à ce moment-là, waits 10 time units, puis l'assigns à a.
Assignment Delay vs General Delay
| General Delay | Assignment Delay | |
|---|---|---|
| Sintaxe | #10 a = b; | a = #10 b; |
| Quand la valeur est-elle lue ? | Au moment de l'affectation (après le délai) | Immédiatement (avant le délai) |
| Quelle valeur est assignée ? | Valeur de b à ce moment-là | Valeur de b au temps 0 (ou au moment de la lecture) |
| Quand la valeur est-elle assignée ? | Après le délai | Après le délai |
Exemple : La différence
initial begin
b = 1;
#5 b = 0;
// Délai général
#10 a1 = b; // Attend 10, puis lit b (b=0) → a1=0
// Délai d'affectation
a2 = #10 b; // Lit b maintenant (b=0), attend 10, puis affecte → a2=0
endLes deux donnent le même result ici. La différence apparaît lorsque b changes during le delay.
Exemple de différence clé
To show b changing during the delay, we need two separate initial blocks that run in parallel:
initial begin
b = 1;
a1 = #10 b; // Lit b=1 au temps 0, assigne a1=1 au temps 10
end
initial begin
#5 b = 0; // Change b à 0 au temps 5 (pendant le délai)
end- À l'instant 0 :
a1litb = 1 - À l'instant 5 :
bpasse à0(pendant quea1attend toujours) - À l'instant 10 :
a1reçoit la valeur1(la valeur lue à l'instant 0), et non0
Avec un délai général #10 a2 = b; dans un bloc séparé, b serait lu à l'instant 10 (valeur 0).
Règles importantes
| Règle | Explication |
|---|---|
= va avant # | a = #10 b; non a #10 = b; |
| La valeur est lue immédiatement | Côté droit évalué tout de suite |
| L'affectation a lieu après le délai | Le côté gauche reçoit la valeur plus tard |
| Uniquement pour les blocs procéduraux | Utilisé dans initial ou always |
Défi
Ce qu'il faut faire :
Add le assignment delay manquant de sorte que a gets la valeur de b after 15 time units, mais reads b immédiatement.
Essayez vous-même
module assignment_challenge;
reg a, b;
// Bloc séparé pour changer b pendant le délai
initial begin
b = 1;
// TODO: Ajouter un délai d'affectation
// a devrait obtenir b après 15 unités de temps
// Lire b maintenant, assigner après le délai
end
initial begin
#5 b = 0; // Change b pendant le délai
#20 $display("Time %0t: a = %b", $time, a);
$finish;
end
endmoduleCette 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