Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

Comprendre les instructions assign Verilog : Affectation continue de signaux

Les signaux de type wire ou types similaires nécessitent une affectation continue de valeur. Exemple : fil électrique sur breadboard connectant pièces. Tant que batterie +5V appliquée à une extrémité, composant à l'autre extrémité reçoit la tension requise.

Comprendre les instructions assign Verilog : Affectation continue de signaux

En Verilog, ce concept est réalisé par l'instruction assign où tout wire ou type similaire peut être piloté continuellement avec une valeur (constante ou expression de signaux).

Syntaxe assign

Syntaxe : mot-clé assign suivi du nom de signal (signal unique ou concaténation de nets). Force de pilotage (drive strength) et délai optionnels, utilisés surtout pour modélisation dataflow que synthèse réelle. Expression ou signal côté droit évalué et assigné au net ou expression de nets côté gauche.

assign  = [drive_strength] [delay] 

Valeurs de délai utiles pour spécifier délais de portes et modéliser comportement temporel matériel réel car dictent quand net doit être assigné avec valeur évaluée.

Règles

Exemple #1

Net out piloté continuellement par expression de signaux i1 et i2 avec ET logique &.

Comprendre les instructions assign Verilog : Affectation continue de signaux

Si fils convertis en ports et synthétisés, schéma RTL comme ci-dessous :

Comprendre les instructions assign Verilog : Affectation continue de signaux

L'instruction d'affectation continue peut représenter des portes combinatoires en Verilog.

Exemple #2

Module prend deux entrées et utilise assign pour piloter sortie z avec part-select et concaténations multi-bit. Traiter chaque cas comme seul code dans module, sinon plusieurs assign sur même signal feront sortie devenir X.

module xyz (input [3:0] x, input y, output [4:0] z);
wire [1:0] a; wire b;
// Supposons x='hC et y='h1, voyons valeur z
// Cas #1: 4-bit x + 1-bit y concaténés -> 5-bit net assigné à z 5-bit. z='b11001 ou 'h19
assign z = {x, y};
// Cas #2: même concaténation assignée à 3-bit sélectionnés de z. 2 bits restants non pilotés -> haute impédance. z='bZ001Z
assign z[3:1] = {x, y};
// Cas #3: bit4 de z piloté avec constante 1. z='b1001Z (bit0 non piloté)
assign z[3:1] = {x, y}; assign z[4] = 1;
// Cas #4: bit3 piloté au lieu, deux drivers pour bit3, même valeur 0 -> pas contention. z='bZ001Z
assign z[3:1] = {x, y}; assign z[3] = 0;
// Cas #5: bit3 piloté valeur 1, deux drivers valeurs différentes (premier 0, second 1) -> inconnu. z='bZX01Z
assign z[3:1] = {x, y}; assign z[3] = 1;
// Cas #6: Sélection partielle opérandes RHS possible, ex 2-bit de x. z='b00001
assign z = {x[1:0], y};
// Cas #7: Assigner explicitement 3-bit de z, laisser reste non connecté. z='bZZ001
assign z[2:0] = {x[1:0], y};
// Cas #8: Même variable utilisée plusieurs fois. z='b00111. 3{y} = {y, y, y}
assign z = {3{y}};
// Cas #9: LHS concaténé: a 2-bit, b scalaire. RHS évalué 11001, LHS 3-bit -> 3 bits LSB de RHS assignés à LHS. a='b00, b='b1
assign {a, b} = {x, y};
// Cas #10: Inverser ordre LHS, RHS même. a='b01, b='b0
assign {b, a} = {x, y};
endmodule

Assigner variables reg

Illégal de piloter/assigner variables reg avec assign. reg stocke données, n'a pas besoin pilotage continu. Signaux reg seulement pilotables dans blocs procéduraux initial et always.

Affectation continue implicite

Quand assign utilisé pour assigner net avec valeur = explicite. Verilog permet assignation à la déclaration = implicite.

wire [1:0] a; assign a = x & y; // Explicite
wire [1:0] a = x & y;           // Implicite

Conception logique combinatoire

Circuit numérique à portes combinatoires et code Verilog correspondant.

Comprendre les instructions assign Verilog : Affectation continue de signaux

Logique combinatoire nécessite entrées pilotées continûment pour maintenir sortie (contrairement éléments séquentiels comme bascules où valeur capturée/stockée au front d'horloge). assign convient bien car sortie o mise à jour quand entrées RHS changent.

module combo (input a, b, c, d, output o);
assign o = ~((a & b) | c ^ d);
endmodule

Schéma matériel

Après élaboration et synthèse, circuit combinatoire se comportant comme modélisé par assign.

Comprendre les instructions assign Verilog : Affectation continue de signaux

Signal o devient 1 quand expression RHS vraie, 0 quand fausse. o = X de 0ns à 10ns car entrées X pendant même temps.

Comprendre les instructions assign Verilog : Affectation continue de signaux

Cliquez ici pour diaporama avec exemple simulation !

Verilog

  1. Maîtriser l'instruction Switch C# : Syntaxe, exemples et bonnes pratiques
  2. Instruction Break C# : Comment et quand l'utiliser
  3. Maîtriser l'instruction Continue C# : Comment ignorer efficacement les itérations de boucle
  4. Maîtriser la concaténation Verilog : Guide pratique
  5. Comprendre les affectations Verilog : Types, Syntaxe et Bonnes Pratiques
  6. Verilog Blocking vs Non-Blocking : Différences Clés Expliquées
  7. Maîtriser les Fonctions Verilog pour une Conception RTL Efficace
  8. Comprendre les Tasks Verilog : Fonctions vs Tasks, Syntaxe et Utilisation
  9. Générateur d'Horloge Verilog : Guide de Conception et d'Implémentation