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 abordé les délais généraux (#10 a = b;) et les délais de porte (and #5 (out, a, b);). Nous abordons maintenant les délais d’affectation, qui sont des délais qui se produisent à l’intérieur d’un bloc procédural (comme initial ou always) dans le cadre d’une instruction d’affectation.
Un délai d’affectation attend pendant une durée spécifiée, puis effectue l’affectation. Le délai est placé après le symbole # et avant l’affectation.
Syntaxe :
variable = #delay expression;Contrairement à un délai général #10 a = b; (attendre, puis affecter), un délai d’affectation a = #10 b; prend la valeur de b à ce moment-là, attend 10 unités de temps, puis l’affecte à a.
Délai général ou délai d’affectation
| Délai général | Délai d’affectation | |
|---|---|---|
| Syntaxe | #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 affectée ? | La valeur de b à ce moment-là | La valeur de b au temps 0 (ou au moment de la lecture) |
| Quand la valeur est-elle affecté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 effectue l’affectation → a2=0
endLes deux donnent le même résultat ici. La différence apparaît lorsque b change pendant le délai.
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, affecte a1=1 au temps 10
end
initial begin
#5 b = 0; // Met b à 0 au temps 5 (pendant le délai)
end- À l’instant 0 :
a1litb = 1 - À l’instant 5 :
bpasse à0(alors quea1attend toujours) - À l’instant 10 : la valeur
1est affectée àa1(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 |
|---|---|
= se place avant # | a = #10 b; et non a #10 = b; |
| La valeur est lue immédiatement | Le côté droit est évalué immédiatement |
| L’affectation a lieu après le délai | Le côté gauche reçoit la valeur plus tard |
| Uniquement dans les blocs procéduraux | Utilisé dans initial ou always |
Défi
Que faire :
Ajoute le délai d’affectation manquant afin que a obtienne la valeur de b après 15 unités de temps, mais lise b immédiatement.
Essayez vous-même
module assignment_challenge;
reg a, b;
// Bloc séparé pour modifier b pendant le délai
initial begin
b = 1;
// TODO: Ajouter un délai à l’affectation
// a doit recevoir la valeur de b après 15 unités de temps
// Lire b maintenant, effectuer l’affectation après le délai
end
initial begin
#5 b = 0; // Modifie 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 VerilogMatériel vs logicielVotre premier moduleCommentairesNiveaux d’abstraction de conception4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Affectations et portes
Affectation continueAffectation avec opérateursPrimitives de portes intégréesPortes AND, OR et NOTPortes XOR et XNORRécapitulatif - Circuit de portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'une ALU13Temporisation et délais
Que sont les délaisDélais de porteDélais d’affectationDirective de 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 RepeatBoucle ForeverInstruction DisableRécapitulatif - Modèles de boucles3Système de numération
Représentation binaireNombres dimensionnésNombres non dimensionnésNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats des nombres6Modules
Structure d’un modulePorts d’entrée et de sortiePorts InoutInstantiation d’un moduleAssociation des ports par nomAssociation des ports par ordreRécapitulatif - Construire un module9Blocs procéduraux
Bloc alwaysBloc initialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - always vs initial12Projet de multiplexeur
Conception d’un multiplexeur 2 vers 1Conception d’un multiplexeur 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à étatsEntraînez-vous par vous-même : Compilateur Verilog en ligne