Menu
CoddyTech

Ports d’entrée et de sortie

Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 31 sur 90.

Les ports d’entrée et de sortie sont les connexions qui permettent à un module de communiquer avec le monde extérieur. Ils sont comme les broches d’une puce. Les ports constituent l’interface entre un module et le reste de la conception.

Chaque module possède :

  • Ports d’entrée : signaux qui entrent dans le module
  • Ports de sortie : signaux qui sortent du module

Ports d’entrée

Les ports d’entrée reçoivent des données de l’extérieur. Ils ne peuvent pas être modifiés à l’intérieur du module : ils peuvent uniquement être lus.

input clk;        // Entrée sur un seul bit
input [7:0] data; // Vecteur d’entrée sur 8 bits
input a, b;       // Plusieurs entrées sur une même ligne

Règles concernant les entrées :

  • Aucune valeur ne peut leur être attribuée à l’intérieur du module
  • Ne peuvent pas être déclarées comme reg
  • Toujours wire (par défaut)

Ports de sortie

Les ports de sortie envoient des données vers l’extérieur. Ils peuvent être pilotés par des blocs assign ou always.

output out;           // Sortie sur un seul bit
output [3:0] result;  // Sortie sur 4 bits
output reg busy;      // La sortie peut être de type reg
output wire ready;    // La sortie peut être de type wire

Règles pour les sorties :

  • Peut être wire (avec assign) ou reg (avec always)
  • Doit être pilotée par quelque chose à l’intérieur du module

Syntaxe de déclaration des ports

La syntaxe de déclaration des ports est la façon précise d’écrire les ports d’entrée et de sortie dans un module. Elle indique à Verilog trois choses à propos de chaque port :

  1. Direction : s’agit-il d’une entrée, d’une sortie ou d’une entrée-sortie ?
  2. Taille : quelle est sa largeur en bits ?
  3. Nom : comment s’appelle-t-il ?
module example (
  input [7:0] data_in,    // Vecteur d’entrée
  input clk,              // Entrée unique
  input enable,           // Entrée unique
  output reg [7:0] out,   // Registre de sortie
  output busy             // Fil de sortie
);

Pourquoi le sens des ports est important

Le sens indique à Verilog :

  • Quels signaux le module peut lire (entrées)
  • Quels signaux le module peut écrire (sorties)
  • Quels types de connexions sont autorisés

Utiliser la mauvaise direction entraîne des erreurs de compilation.

Exemple de code

module port_demo (
  input [3:0] a,        // Lecture seule
  input [3:0] b,        // Lecture seule
  output reg [3:0] sum, // Écriture possible (reg)
  output [3:0] diff     // Écriture possible (wire)
);
  always @(*) begin
    sum = a + b;        // Écriture dans la sortie reg
  end
  
  assign diff = a - b;   // Écriture dans la sortie wire
endmodule
challenge icon

Défi

Complétez les déclarations des ports

À faire :

  1. Ajoutez une entrée de 8 bits appelée data_in
  2. Ajoutez une entrée d’un bit appelée clk
  3. Ajoutez une sortie de 4 bits appelée result (utilisez reg : elle sera assignée dans un bloc always)
  4. Ajoutez une sortie d’un bit appelée valid (utilisez wire : elle sera assignée avec assign)

Essayez vous-même

module port_challenge (
  // Tâche 1 : Ajoutez une entrée de 8 bits appelée data_in
  
  
  // Tâche 2 : Ajoutez une entrée de 1 bit appelée clk
  
  
  // Tâche 3 : Ajoutez une sortie de 4 bits appelée result (utilisez reg)
  
  
  // Tâche 4 : Ajoutez une sortie de 1 bit appelée valid (utilisez wire)
  
  
);

  reg [3:0] counter;
  
  always @(posedge clk) begin
    counter <= counter + 1;
    result <= counter;
  end
  
  assign valid = (counter > 8);
  
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

Entraînez-vous par vous-même : Compilateur Verilog en ligne