Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

Comprendre les ports Verilog : Entrées, sorties et communication de modules

Les ports sont un ensemble de signaux agissant comme entrées/sorties d'un module, moyen principal de communication. Imaginez un module comme une puce fabriquée sur un PCB : la seule communication se fait via ses broches. Les ports sont comme des broches pour envoyer/recevoir signaux du monde extérieur.

Comprendre les ports Verilog : Entrées, sorties et communication de modules

Types de ports

PortDescription
InputLe module ne peut que recevoir des valeurs via ses ports input
OutputLe module ne peut que envoyer des valeurs via ses ports output
InoutLe module peut envoyer ou recevoir via ses ports inout

Les ports sont par défaut considérés comme nets de type wire.

Syntaxe

Ports déclarés inout agissent comme entrée et sortie.

input [net_type] [range] list_of_names;    // Port input
inout [net_type] [range] list_of_names;    // Port input & output
output [net_type] [range] list_of_names;   // Port output piloté par wire
output [var_type] [range] list_of_names;   // Port output piloté par variable

Exemple

Trois ports input, un output, un inout :

module my_design (
    input wire clk,
    input en,
    input rw,
    inout [15:0] data,
    output int
);
// Comportement de la conception en Verilog
endmodule

Illégal d'utiliser le même nom pour plusieurs ports.

input aport;  // Première déclaration - valide
input aport;  // Erreur - déjà déclaré
output aport; // Erreur - déjà déclaré

Ports signés

L'attribut signed peut être attaché à déclaration de port ou net/reg ou les deux. Nets implicites sont par défaut non signés.

module (input a, b, output c); // a, b, c non signés par défaut
endmodule

Si net/reg a attribut signed, l'autre est aussi considéré signé.

module (input signed a, b, output c);
wire a, b; // a, b signés par déclaration port
reg signed c; // c signé par déclaration reg
endmodule

Variations de ports

Verilog 1995

Version IEEE originale 1995 : déclaration module liste d'abord noms de ports, puis directions définies plus tard dans le corps.

module test (a, b, c);
input [7:0] a; input [7:0] b;
output [7:0] c; // c par défaut wire
wire [7:0] a; wire [7:0] b; wire [7:0] c; // Redéclaration possible
endmodule

module test (a, b, c);
input [7:0] a, b;
output [7:0] c;
reg [7:0] c; // c changé en type reg
endmodule

Verilog 2001 et versions ultérieures

Style de nommage de ports ANSI-C introduit en 2001 : type spécifié dans la liste de ports.

module test (input [7:0] a, b, output [7:0] c); // b considéré input 8-bit
// Contenu conception
endmodule

module test (input wire [7:0] a, input wire [7:0] b, output reg [7:0] c);
// Contenu conception
endmodule

Si déclaration port inclut type net/variable, port considéré complètement déclaré. Illégal de redéclarer même port en déclaration net/variable.

module test (input [7:0] a, output reg [7:0] e);
wire signed [7:0] a; // illégal - déclaration a déjà complète
wire [7:0] e;        // illégal - déclaration e déjà complète
endmodule

Si déclaration port n'inclut pas type net/variable, port peut être redéclaré en déclaration net/variable.

module test (input [7:0] a, output [7:0] e);
reg [7:0] e; // OK - net_type non déclaré avant
endmodule

Verilog

  1. Maîtriser Verilog : Tutoriel complet pour la conception de circuits numériques
  2. Maîtriser la concaténation Verilog : Guide pratique
  3. Comprendre les affectations Verilog : Types, Syntaxe et Bonnes Pratiques
  4. Verilog Blocking vs Non-Blocking : Différences Clés Expliquées
  5. Maîtriser les Fonctions Verilog pour une Conception RTL Efficace
  6. Comprendre les Tasks Verilog : Fonctions vs Tasks, Syntaxe et Utilisation
  7. Générateur d'Horloge Verilog : Guide de Conception et d'Implémentation
  8. Maîtriser les Fonctions Mathématiques Verilog pour une Conception Matérielle Efficace
  9. Maîtriser Verilog $timeformat : Contrôle de Précision et d'Affichage