Ports Verilog
Les ports sont un ensemble de signaux qui agissent comme des entrées et des sorties vers un module particulier et constituent le principal moyen de communication avec lui. Considérez un module comme une puce fabriquée placée sur un PCB et il devient tout à fait évident que la seule façon de communiquer avec la puce est à travers ses broches. Les ports sont comme des broches et sont utilisés par la conception pour envoyer et recevoir des signaux du monde extérieur.
Types de ports
Port | Description |
---|---|
Entrée | Le module de conception ne peut recevoir des valeurs que de l'extérieur en utilisant son input ports |
Sortie | Le module de conception ne peut envoyer des valeurs à l'extérieur qu'en utilisant son output ports |
Entrée | Le module de conception peut soit envoyer soit recevoir des valeurs en utilisant son inout ports |
Les ports sont par défaut considérés comme des réseaux de type wire
.
Syntaxe
Ports déclarés comme inout
peut servir à la fois d'entrée et de sortie.
input [net_type] [range] list_of_names; // Input port
inout [net_type] [range] list_of_names; // Input & Output port
output [net_type] [range] list_of_names; // Output port driven by a wire
output [var_type] [range] list_of_names; // Output port driven by a variable
Exemple
Dans le code ci-dessous, il y a trois input
ports, un output
port et un inout
port.
module my_design ( input wire clk,
input en,
input rw,
inout [15:0] data,
output int );
// Design behavior as Verilog code
endmodule
Il est illégal d'utiliser le même nom pour plusieurs ports.
input aport; // First declaration - valid
input aport; // Error - already declared
output aport; // Error - already declared
Ports signés
Le signed
L'attribut peut être attaché à une déclaration de port ou à une déclaration net/reg ou aux deux. Les réseaux implicites sont par défaut non signés .
module ( input a,
b,
output c);
// ports a, b, and c are by default unsigned
endmodule
Si la déclaration net/reg a un signed
attribut, l'autre sera également considéré comme signé.
module ( input signed a, b,
output c);
wire a, b; // a, b are signed from port declaration
reg signed c; // c is signed from reg declaration
endmodule
Variantes de ports
Verilog 1995
Verilog a subi quelques révisions et la version originale IEEE en 1995 avait la manière suivante pour la déclaration de port. Ici, la déclaration du module devait d'abord répertorier les noms des ports entre crochets, puis la direction de ces ports définis ultérieurement dans le corps du module.
module test (a, b, c);
input [7:0] a; // inputs "a" and "b" are wires
input [7:0] b;
output [7:0] c; // output "c" by default is a wire
// Still, you can declare them again as wires to avoid confusion
wire [7:0] a;
wire [7:0] b;
wire [7:0] c;
endmodule
module test (a, b, c);
input [7:0] a, b;
output [7:0] c; // By default c is of type wire
// port "c" is changed to a reg type
reg [7:0] c;
endmodule
Verilog 2001 et versions ultérieures
La dénomination des ports de style ANSI-C a été introduite en 2001 et permettait de spécifier le type dans la liste des ports.
module test ( input [7:0] a,
b, // "b" is considered an 8-bit input
output [7:0] c);
// Design content
endmodule
module test ( input wire [7:0] a,
input wire [7:0] b,
output reg [7:0] c);
// Design content
endmodule
Si une déclaration de port inclut un type net ou variable, alors ce port est considéré comme complètement déclaré. Il est illégal de redéclarer le même port dans une déclaration de type net ou variable.
module test ( input [7:0] a, // a, e are implicitly declared of type wire
output reg [7:0] e );
wire signed [7:0] a; // illegal - declaration of a is already complete -> simulator dependent
wire [7:0] e; // illegal - declaration of e is already complete
// Rest of the design code
endmodule
Si la déclaration de port n'inclut pas de type net ou variable, le port peut être déclaré à nouveau dans une déclaration de type net ou variable.
module test ( input [7:0] a,
output [7:0] e);
reg [7:0] e; // Okay - net_type was not declared before
// Rest of the design code
endmodule
Verilog