Blocking Assignment
Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 49 sur 90.
Verilog possède deux types d’affectations procédurales : bloquante (=) et non bloquante (<=). Dans cette leçon, nous nous concentrons sur l’affectation bloquante.
Blocking assignment uses l’opérateur =. On l’appelle « blocking » parce qu’il bloque l’exécution de l’instruction suivante jusqu’à ce que l’assignment actuelle soit terminée. Le code s’exécute step par step, dans l’ordre.
Syntaxe :
variable = expression;Quand utiliser l’affectation bloquante
L’affectation bloquante (=) est utilisée pour la logique combinatoire : des circuits dont les sorties changent immédiatement lorsque les entrées changent, sans horloge et sans mémoire.
Exemples de logique combinatoire :
- Portes AND / OR / XOR
- Additionneurs et soustracteurs
- Multiplexeurs
- Décodeurs
Exemple en Verilog :
always @(*) begin
sum = a + b; // Affectation bloquante
carry = a & b; // Affectation bloquante
endBlocking dans les blocs Always (logique combinatoire)
always @(*) begin
temp = a & b; // Étape 1
out = temp | c; // Étape 2 (utilise temp de l'étape 1)
endL’ordre est important. Cela convient à la logique combinatoire.
Blocking vs Non-Blocking
Blocking (=) | Non-blocking (<=) | |
|---|---|---|
| Exécution | L'un après l'autre | Tous en même temps |
| La ligne suivante attend-elle ? | Oui | Non |
| Uses | Logique combinatoire | Logique séquentielle (bascules) |
Important : n’utilisez pas Blocking pour les bascules
Défi
Ajoutez les affectations bloquantes manquantes pour échanger les valeurs de x et y à l’aide d’une variable temporaire.
À faire :
- Assign la valeur de
xàtemp(save x dans temp) - Assign la valeur de
yàx(move y dans x) - Assign la valeur de
tempày(move saved x dans y)
Essayez vous-même
module swap;
reg x, y;
reg temp;
initial begin
x = 1;
y = 0;
$display("Before swap: x=%d, y=%d", x, y);
// TODO: Étape 1 - Assigner x à temp
// TODO: Étape 2 - Assigner y à x
// TODO: Étape 3 - Assigner temp à y
$display("After swap: x=%d, y=%d", x, y);
$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 Design5Operators 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