Continuous Assignment
Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 37 sur 90.
En matériel, une connexion est un wire physique qui relie deux points d’un circuit. Une fois le wire en place, la connexion est permanente et always 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 le garder connecté pour toujours. Le processus qui consiste à faire cela s’appelle continuous assignment.
continuous assignment 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 wire physique.
Imaginez plutôt souder un fil que d’écrire une valeur une seule fois.
Syntaxe
assign wire_name = expression;| Partie | Signification |
|---|---|
assign | Mot-clé qui commence l'affectation continuous |
wire_name | Le wire piloté (ne peut pas être reg) |
expression | La valeur qui pilote le wire |
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 cela fonctionne
Contrairement à une reg qui stocke une valeur, une wire avec une continuous assignment est constamment mise à jour :
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
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 automatiquement à jour.
Attributions 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
endmoduleall assignment s’exécutent en parallèle, continuously.
Utilisations courantes
Les affectations continuous sont utilisées pour :
- Logique combinatoire simple (AND, OR, XOR)
- Connecter des fils entre eux
- Créer des tampons à trois états
- Piloter des sorties à partir d’expressions combinatoires
Défi
À faire :
- Add la missing continuous assignment that makes
zequal tox AND y.
Essayez vous-même
module continuous_challenge (
input x,
input y,
output z
);
// TODO: Ajoutez l'assignation continue manquante qui rend z é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 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