Menu
Coddy logo textTech

Input And Output Ports

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 arrivent dans le module
  • Ports de sortie : signaux qui sortent du module

Input Ports

Input ports reçoivent des données de l’extérieur. Ils ne peuvent pas être modifiés à l’intérieur du module : only read.

input clk;        // Entrée monobit
input [7:0] data; // Vecteur d'entrée de 8 bits
input a, b;       // Plusieurs entrées sur une ligne

Règles pour les inputs :

  • Impossible de leur affecter une valeur à l’intérieur du module
  • Impossible de les déclarer 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 monobit
output [3:0] result;  // Sortie 4 bits
output reg busy;      // La sortie peut être reg
output wire ready;    // La sortie peut être 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 manière précise dont vous écrivez les ports d’entrée et de sortie dans un module. Elle indique à Verilog trois choses concernant chaque port :

  1. Direction : s’agit-il de input, output ou inout ?
  2. Taille : sur combien de bits s’étend-il ?
  3. Nom : comment est-il appelé ?
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,   // Sortie reg
  output busy             // Sortie wire
);

Pourquoi le sens des ports est important

Le sens indique à Verilog :

  • Quels signaux le module can read (entrées)
  • Quels signaux le module can write (sorties)
  • Quels types de connexions sont autorisés

Utiliser une direction incorrecte provoque des erreurs de compilation.

Exemple de code

module port_demo (
  input [3:0] a,        // Peut seulement lire
  input [3:0] b,        // Peut seulement lire
  output reg [3:0] sum, // Peut écrire (reg)
  output [3:0] diff     // Peut écrire (wire)
);
  always @(*) begin
    sum = a + b;        // Écriture vers la sortie reg
  end
  
  assign diff = a - b;   // Écriture vers la sortie wire
endmodule
challenge icon

Défi

Compléter les déclarations des ports

À faire :

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

Essayez vous-même

module port_challenge (
  // Tâche 1 : Ajouter une entrée 8 bits appelée data_in
  
  
  // Tâche 2 : Ajouter une entrée d'un seul bit appelée clk
  
  
  // Tâche 3 : Ajouter une sortie 4 bits appelée result (utiliser reg)
  
  
  // Tâche 4 : Ajouter une sortie d'un seul bit appelée valid (utiliser 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