Assignation continue
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 37 sur 90.
En matière de matériel informatique (hardware), une connexion est un fil physique qui relie deux points d'un circuit. Une fois le fil 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 à un wire et la maintenir connectée pour toujours. Ce processus est appelé assignation continue (continuous assignment).
L'affectation continue (assignment continuous) utilise le mot-clé assign pour créer une connexion permanente entre un wire et une expression. Le wire prend en permanence la valeur de l'expression — tout comme un fil physique.
Pensez-y 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'affectation continue |
wire_name | Le fil piloté (ne peut pas être reg) |
expression | La valeur qui pilote le fil |
Exemple simple
wire out;
assign out = a & b;Cela signifie : out est always equal à 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 ( continuous assignment) est mis à jour en permanence :
module continuous_demo;
reg a, b;
wire c;
assign c = a & b; // c suit a AND b en permanence
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
endmoduleOutput:
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 s'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 (continuous assignments) sont utilisées pour :
- La logique combinatoire simple (ET, OU, OU exclusif)
- Connecter des fils (
wire) ensemble - Créer des tampons trois états (tri-state)
- Piloter des sorties (
output) à partir d'expressions combinatoires
Défi
Ce qu'il faut faire :
- Ajoutez l'affectation continue manquante qui rend
zégal àx AND y.
Essayez vous-même
module continuous_challenge (
input x,
input y,
output z
);
// TODO: Ajoutez l'affectation continue manquante qui fait que z est égal à x AND 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