Menu
Coddy logo textTech

Mappage de ports par ordre

Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 35 sur 90.

Dans la leçon précédente, vous avez appris le mappage de ports par nom, où vous étiquetez explicitement chaque connexion à l'aide de .port(signal). Nous allons maintenant aborder la méthode alternative : le mappage de ports par ordre.

Il connecte les signaux aux ports d'un module en se basant sur l'ordre (ORDER) dans lequel ils apparaissent dans la définition du module. Vous réalisez simplement une List des signaux entre parenthèses, et Verilog les associe un par un.

Syntax:

module_name instance_name (signal1, signal2, signal3);

Le premier signal se connecte au premier port, le deuxième au deuxième port, et ainsi de suite.

Exemple

Définition du module :

module or_gate (
  input in1,      // Premier port
  input in2,      // Deuxième port
  output result   // Troisième port
);
  assign result = in1 | in2;
endmodule

Instantiation avec mappage de ports par ordre :

or_gate or1 (input_a, input_b, output_y);

Ceci connecte :

  • Premier signal input_a → premier port in1
  • Deuxième signal input_b → deuxième port in2
  • Troisième signal output_y → troisième port result

L'ordre compte

Avec le typage de port par ordre, la séquence est critique :

// Ordre correct
or_gate or1 (input_a, input_b, output_y);

// Mauvais ordre - signaux connectés aux mauvais ports !
or_gate or1 (input_b, input_a, output_y);
or_gate or1 (output_y, input_a, input_b);

Si vous mélangez l'order, les connexions vont vers les wrong ports. Cela peut être difficile à déboguer car le code semble correct au premier coup d'œil.

Port Mapping By Name vs By Order

FonctionnalitéBy NameBy Order
Syntaxe.port(signal)signal1, signal2
L'ordre compte ?NonOui
Auto-documenté ?OuiNon
Risque d'erreursFaibleÉlevé
Recommandé pourLa plupart des designsCas simples uniquement

Quand utiliser le mappage de ports par ordre

Le mappage de ports par ordre est acceptable lorsque :

  • Le module possède très peu de ports (2-3)
  • L'ordre des ports est évident et peu susceptible de changer
  • Vous écrivez des bancs de test rapides

Pour la plupart des conceptions, le mappage de port par nom est préférable car il est plus clair et moins sujet aux erreurs.

challenge icon

Défi

Complétez l'instanciation en listant les signaux dans le bon ordre en utilisant le mappage de ports par ordre.

Ce qu'il faut faire :

Ports du module (dans cet ordre) :

  1. input en (activation)
  2. input [7:0] d (entrée de données)
  3. output [7:0] q (sortie de données)

Signaux à connecter :

  • enable_signal → connecter à en
  • data_input → connecter à d
  • data_output → connecter à q

Essayez vous-même

module register (
  input en,
  input [7:0] d,
  output [7:0] q
);
  assign q = en ? d : q;
endmodule

module top (
  input enable_signal,
  input [7:0] data_input,
  output [7:0] data_output
);
  
  // TODO: Instancier register avec le nom reg1 en utilisant le mapping ORDER
  // Lister les signaux dans le bon ordre : enable_signal, data_input, data_output
  // Ne pas utiliser la syntaxe .port(signal)

endmodule
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux