Menu
Coddy logo textTech

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 (input et output) 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 :

  • Des ports d'entrée — des signaux qui entrent dans le module
  • Des ports de sortie — des signaux qui sortent du module

Ports Input

Les ports input reçoivent des données de l'extérieur. Ils ne peuvent pas être modifiés à l'intérieur du module—uniquement lus.

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

Règles pour les input:

  • Ne peuvent pas se voir attribuer une valeur à l'intérieur du module
  • Ne peuvent pas être déclarées comme reg
  • Sont always des wire (par défaut)

Output Ports

Les ports de sortie (output ports) 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 :

  • Peuvent être wire (avec assign) ou reg (avec always)
  • Doivent être pilotées 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 spécifique dont vous écrivez les ports d'entrée et de sortie dans un module. Elle indique trois choses à Verilog concernant chaque port :

  1. Direction — s'agit-il d'une entrée, d'une sortie ou de inout ?
  2. Taille — combien de bits de largeur fait-elle ?
  3. Nom — comment s'appelle-t-il ?
module example (
  input [7:0] data_in,    // Vecteur d'entrée
  input clk,              // Entrée simple
  input enable,           // Entrée simple
  output reg [7:0] out,   // Sortie reg
  output busy             // Sortie wire
);

Pourquoi la direction des ports est importante

La direction indique à Verilog :

  • Quels signaux le module peut lire (inputs)
  • Quels signaux le module peut écrire (outputs)
  • Quels types de connexions sont autorisés

Utiliser la mauvaise direction 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 le reg de sortie
  end
  
  assign diff = a - b;   // Écriture vers le wire de sortie
endmodule
challenge icon

Défi

Complétez les déclarations de ports

Ce qu'il faut faire :

  1. Ajoutez une entrée 8-bit appelée data_in
  2. Ajoutez une entrée single-bit appelée clk
  3. Ajoutez une sortie 4-bit appelée result (utilisez reg — sera assignée dans un bloc always)
  4. Ajoutez une sortie single-bit appelée valid (utilisez wire — sera assignée avec assign)

Essayez vous-même

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