Verilog-Ports
Ports sind eine Reihe von Signalen, die als Ein- und Ausgänge für ein bestimmtes Modul fungieren und die primäre Art der Kommunikation mit ihm darstellen. Stellen Sie sich ein Modul als einen vorgefertigten Chip vor, der auf einer Leiterplatte platziert ist, und es wird ziemlich offensichtlich, dass die einzige Möglichkeit, mit dem Chip zu kommunizieren, über seine Pins führt. Ports sind wie Stifte und werden vom Design verwendet, um Signale von der Außenwelt zu senden und zu empfangen.
Porttypen
Port | Beschreibung |
---|---|
Eingabe | Das Designmodul kann nur mit seinem input Werte von außen empfangen Häfen |
Ausgabe | Das Designmodul kann nur mit seinem output Werte nach außen senden Häfen |
Ein Ausgang | Das Designmodul kann mit seinem inout Werte entweder senden oder empfangen Häfen |
Ports werden standardmäßig als Netze vom Typ wire
betrachtet .
Syntax
Als inout
deklarierte Ports kann sowohl als Eingang als auch als Ausgang fungieren.
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
Beispiel
Im unten gezeigten Code gibt es drei input
Ports, ein output
Port und einmal inout
Hafen.
module my_design ( input wire clk,
input en,
input rw,
inout [15:0] data,
output int );
// Design behavior as Verilog code
endmodule
Es ist illegal, denselben Namen zu verwenden für mehrere Ports.
input aport; // First declaration - valid
input aport; // Error - already declared
output aport; // Error - already declared
Signierte Ports
Die signed
Das Attribut kann an eine Port-Deklaration oder eine net/reg-Deklaration oder beides angehängt werden. Implizite Netze sind standardmäßig unsigned .
module ( input a,
b,
output c);
// ports a, b, and c are by default unsigned
endmodule
Wenn entweder die net/reg-Deklaration einen signed
hat Attribut, dann gilt auch das andere als signiert.
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
Portvariationen
Verilog 1995
Verilog wurde einigen Überarbeitungen unterzogen und die ursprüngliche IEEE-Version von 1995 hatte die folgende Art der Portdeklaration. Hier musste die Moduldeklaration zuerst die Namen der Ports in den Klammern auflisten und dann die Richtung dieser Ports, die später im Hauptteil des Moduls definiert wurden.
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 ab 2001
Port-Benennung im ANSI-C-Stil wurde 2001 eingeführt und ermöglichte die Angabe des Typs innerhalb der Port-Liste.
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
Wenn eine Portdeklaration einen Netz- oder Variablentyp enthält, wird dieser Port als vollständig deklariert betrachtet. Es ist illegal, denselben Port in einer Netz- oder Variablentypdeklaration erneut zu deklarieren.
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
Wenn die Portdeklaration keinen Netz- oder Variablentyp enthält, kann der Port erneut in einer Netz- oder Variablentypdeklaration deklariert werden.
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