Assignation continue
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 37 sur 90.
En matériel informatique, une connexion est un fil physique qui relie deux points dans un circuit. Une fois que le fil est en place, la connexion est permanente et toujours active. Si une extrémité change, l'autre extrémité change immédiatement.
En Verilog, nous avons besoin d'un moyen de modéliser ce comportement. Nous voulons transmettre une valeur sur un fil et la maintenir connectée indéfiniment. Le processus pour ce faire est appelé assignation continue.
L'assignation continue utilise le mot-clé assign pour créer une connexion permanente entre un wire et une expression. Le wire prend continuellement la valeur de l'expression — tout comme un fil physique.
Considérez cela comme le fait de souder un fil plutôt que d'écrire une valeur une seule fois.
Syntaxe
assign wire_name = expression;| Partie | Signification |
|---|---|
assign | Mot-clé qui commence l'assignation continue |
wire_name | Le fil (wire) piloté (ne peut pas être reg) |
expression | La valeur qui pilote le fil (wire) |
Exemple simple
wire out;
assign out = a & b;Cela signifie : out est toujours égal à a AND b. Chaque fois que a ou b change, out change immédiatement.
Comment ça fonctionne
Contrairement à un reg qui stocke une valeur, un wire avec une affectation continue est constamment mis à jour :
module continuous_demo;
reg a, b;
wire c;
assign c = a & b; // c suit a ET b à tout moment
initial begin
a = 0; b = 0;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=0
a = 1;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=0 (1&0=0)
b = 1;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=1 (1&1=1)
$finish;
end
endmoduleSortie :
a=0, b=0, c=0
a=1, b=0, c=0
a=1, b=1, c=1Chaque fois que a ou b change, c se met à jour automatiquement.
Assignations multiples
Vous pouvez avoir plusieurs assignations continues dans un module :
module multiple_assign (
input a, b, c,
output x, y
);
assign x = a & b;
assign y = x | c; // y dépend de x
endmoduleToutes les affectations s'exécutent en parallèle, en continu.
Utilisations courantes
Les assignations continues sont utilisées pour :
- La logique combinatoire simple (AND, OR, XOR)
- Connecter des fils (wires) ensemble
- Créer des tampons trois états (tri-state)
- Piloter des sorties à partir d'expressions combinatoires
Défi
Ce qu'il faut faire :
- Ajoutez l'assignation continue manquante qui rend
zégal àx AND y.
Aide-mémoire
L'assignation continue crée une connexion permanente entre un fil (wire) et une expression en utilisant le mot-clé assign :
assign wire_name = expression;Le fil reflète continuellement la valeur de l'expression — chaque fois que les entrées changent, la sortie se met à jour immédiatement :
wire out;
assign out = a & b; // out est toujours égal à a ET bPlusieurs assignations s'exécutent en parallèle :
assign x = a & b;
assign y = x | c; // y dépend de x, tout se met à jour continuellementRègles clés : seul wire (et non reg) peut être piloté par assign.
Essayez vous-même
module continuous_challenge (
input x,
input y,
output z
);
// TODO: Ajouter l'assignation continue manquante qui rend z égal à x ET y
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