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 ce qu'est le mappage de ports par nom, où vous étiquetez explicitement chaque connexion en utilisant .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 fonction de l'ordre dans lequel ils apparaissent dans la définition du module. Il vous suffit de lister les signaux entre parenthèses, et Verilog les fait correspondre un par un.

Syntaxe :

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

Instanciation 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 est important

Avec le mappage de ports 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'ordre, les connexions aboutissent aux mauvais ports. Cela peut être difficile à déboguer car le code semble correct au premier coup d'œil.

Mappage de ports par nom vs par ordre

CaractéristiquePar nomPar ordre
Syntaxe.port(signal)signal1, signal2
L'ordre importe-t-il ?NonOui
Auto-documenté ?OuiNon
Risque d'erreursFaibleÉlevé
Recommandé pourLa plupart des conceptionsCas simples uniquement

Quand utiliser le mappage de ports par ordre

Le mappage de ports par ordre est acceptable quand :

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

Pour la plupart des conceptions, le mappage de ports par nom est préférable car c'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

Aide-mémoire

Le mappage de ports par ordre connecte les signaux en fonction de leur position correspondant à l'ordre de définition des ports du module :

module_name instance_name (signal1, signal2, signal3);

Exemple avec un module or_gate (ports : in1, in2, result) :

or_gate or1 (input_a, input_b, output_y);

L'ordre est critique — l'inversion de signaux provoque des connexions erronées qui sont difficiles à déboguer.

CaractéristiquePar nomPar ordre
Syntaxe.port(signal)signal1, signal2
L'ordre compte ?NonOui
Risque d'erreursFaibleÉlevé
Recommandé pourLa plupart des conceptionsPorts simples/peu nombreux uniquement

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 le registre nommé reg1 en utilisant le mappage par ORDRE
  // 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