Affectation bloquante
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 49 sur 90.
Le Verilog possède deux types d'affectations procédurales : bloquante (=) et non bloquante (<=). Dans cette leçon, nous nous concentrons sur l'affectation bloquante.
L'affectation bloquante utilise l'opérateur =. Elle est appelée « bloquante » car elle bloque l'exécution de l'instruction suivante jusqu'à ce que l'affectation actuelle soit terminée. Le code s'exécute étape par étape, dans l'ordre.
Syntaxe :
variable = expression;Quand utiliser l'affectation bloquante
L'affectation bloquante (=) est utilisée pour la logique combinatoire — des circuits où 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 Verilog :
always @(*) begin
sum = a + b; // Affectation bloquante
carry = a & b; // Affectation bloquante
endAffectations bloquantes 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 pour la logique combinatoire.
Bloquant vs Non-bloquant
Bloquant (=) | Non-bloquant (<=) | |
|---|---|---|
| Exécution | L'un après l'autre | Tous en même temps |
| La ligne suivante attend ? | Oui | Non |
| Utilisations | Logique combinatoire | Logique séquentielle (bascules) |
Important : Ne pas utiliser d'affectations bloquantes pour les bascules (Flip-Flops)
Défi
Ajoutez les affectations bloquantes manquantes pour échanger les valeurs de x et y en utilisant une variable temporaire.
Ce qu'il faut faire :
- Affectez la valeur de
xàtemp(sauvegardez x dans temp) - Affectez la valeur de
yàx(déplacez y dans x) - Affectez la valeur de
tempày(déplacez le x sauvegardé dans y)
Aide-mémoire
L'affectation bloquante (=) s'exécute de manière séquentielle — chaque instruction se termine avant que la suivante ne commence. Elle est utilisée pour la logique combinatoire à l'intérieur des blocs always @(*).
always @(*) begin
temp = a & b; // Étape 1
out = temp | c; // Étape 2 (utilise la valeur mise à jour de temp)
endBloquante (=) |
Non bloquante (<=) |
|
|---|---|---|
| Exécution | L'une après l'autre | Toutes en même temps |
| Utilisation pour | Logique combinatoire | Logique séquentielle (bascules) |
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);
// À FAIRE : Étape 1 - Assigner x à temp
// À FAIRE : Étape 2 - Assigner y à x
// À FAIRE : É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 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'ALU2Types 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