Memahami Port Verilog: Input, Output, dan Komunikasi Modul
Port adalah seperangkat sinyal yang bertindak sebagai input dan output untuk modul tertentu dan adalah cara utama untuk berkomunikasi dengannya. Bayangkan modul sebagai chip terfabrikasi yang ditempatkan pada PCB dan menjadi cukup jelas bahwa satu-satunya cara untuk berkomunikasi dengan chip adalah melalui pinnya. Port mirip pin dan digunakan oleh desain untuk mengirim dan menerima sinyal dari dunia luar.
Jenis Port
Port
Deskripsi
Input
Modul desain hanya dapat menerima nilai dari luar menggunakan port input mereka
Output
Modul desain hanya dapat mengirim nilai ke luar menggunakan port output mereka
Inout
Modul desain dapat mengirim atau menerima nilai menggunakan port inout mereka
Port secara default dianggap sebagai net tipe wire.
Sintaks
Port yang dideklarasikan sebagai inout dapat bertindak sebagai input dan output.
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 yang dijalankan oleh wire output [var_type] [range] list_of_names; // Port output yang dijalankan oleh variabel
Contoh
Dalam kode yang ditunjukkan di bawah ini, ada tiga port input, satu port output dan satu port inout.
module my_design ( input wire clk, input en, input rw, inout [15:0] data, output int ); // Perilaku desain sebagai kode Verilog endmodule
Ilegal untuk menggunakan nama yang sama untuk beberapa port.
input aport; // Deklarasi pertama - valid input aport; // Error - sudah dideklarasikan output aport; // Error - sudah dideklarasikan
Port bertanda
Atribut signed dapat dilampirkan ke deklarasi port atau deklarasi net/reg atau keduanya. Net implisit secara default unsigned.
module ( input a, b, output c); // port a, b, dan c secara default unsigned endmodule
Jika salah satu deklarasi net/reg memiliki atribut signed, maka yang lain juga akan dianggap bertanda.
module ( input signed a, b, output c); wire a, b; // a, b bertanda dari deklarasi port reg signed c; // c bertanda dari deklarasi reg endmodule
Variasi Port
Verilog 1995
Verilog telah mengalami beberapa revisi dan versi IEEE asli pada tahun 1995 memiliki cara berikut untuk deklarasi port. Di sini, deklarasi modul harus terlebih dahulu mencantumkan nama port dalam kurung dan kemudian arah port tersebut didefinisikan nanti dalam tubuh modul.
module test (a, b, c); input [7:0] a; // input "a" dan "b" adalah wire input [7:0] b; output [7:0] c; // output "c" secara default adalah wire // Masih, Anda dapat mendeklarasikannya lagi sebagai wire untuk menghindari kebingungan 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; // Secara default c adalah tipe wire // port "c" diubah menjadi tipe reg reg [7:0] c; endmodule
Verilog 2001 dan seterusnya
Penamaan port gaya ANSI-C diperkenalkan pada tahun 2001 dan memungkinkan tipe ditentukan dalam daftar port.
module test ( input [7:0] a, b, // "b" dianggap input 8-bit output [7:0] c); // Konten desain endmodule module test ( input wire [7:0] a, input wire [7:0] b, output reg [7:0] c); // Konten desain endmodule
Jika deklarasi port mencakup tipe net atau variabel, maka port tersebut dianggap sepenuhnya dideklarasikan. Ilegal untuk mendeklarasikan ulang port yang sama dalam deklarasi tipe net atau variabel.
module test ( input [7:0] a, // a, e secara implisit dideklarasikan tipe wire output reg [7:0] e ); wire signed [7:0] a; // ilegal - deklarasi a sudah lengkap -> tergantung simulator wire [7:0] e; // ilegal - deklarasi e sudah lengkap // Sisa kode desain endmodule
Jika deklarasi port tidak mencakup tipe net atau variabel, maka port dapat dideklarasikan lagi dalam deklarasi tipe net atau variabel.
module test ( input [7:0] a, output [7:0] e); reg [7:0] e; // Okay - net_type tidak dideklarasikan sebelumnya // Sisa kode desain endmodule