Assignment Delays
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 étudié 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 assignment, c'est-à-dire 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 assignment delay attend pendant une durée time spécifiée, puis effectue l’assignment. Le delay est placé after le symbole # et before l’assignment.
Syntaxe :
variable = #delay expression;Contrairement à un délai General #10 a = b; (delay puis assign), un délai d’affectation a = #10 b; prend la valeur de b à ce moment-là, attend 10 unités de time, puis l’affecte à a.
Assignment Délai vs General Délai
| General Délai | Assignment Délai | |
|---|---|---|
| Syntaxe | #10 a = b; | a = #10 b; |
| Quand la valeur est-elle lue ? | Au moment de l’assignation (after delay) | Immédiatement (avant delay) |
| Quelle valeur est assignée ? | Valeur de b à ce moment-là | Valeur de b à time 0 (ou temps de lecture) |
| Quand la valeur est-elle assignée ? | After delay | After delay |
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 assigne → a2=0
endLes deux donnent le même résultat ici. La différence apparaît lorsque b changes 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, 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 :
bdevient0(alors quea1attend toujours) - À l’instant 10 :
a1reçoit1(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 |
|---|---|
= vient avant # | a = #10 b; et non a #10 = b; |
| La valeur est lue immédiatement | Le côté droit est évalué immédiatement |
| L’Assignment se produit après le delay | Le côté gauche gets la valeur plus tard |
| Uniquement pour les blocs procéduraux | Utilisé dans initial ou always |
Défi
Que faire :
Ajoutez le délai d’affectation manquant afin que a reçoive 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 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 VerilogMatériel vs logicielVotre premier moduleCommentairesNiveaux d’abstraction de conception4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design13Timing And Delays
What Are DelaysGate DelaysAssignment DelaysTimescale DirectiveClock GenerationRecap - Timing Control5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicEntraînez-vous par vous-même : Compilateur Verilog en ligne