Menu
CoddyTech

Port Input dan Output

Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 31 dari 90.

Port input dan output adalah koneksi yang memungkinkan sebuah module berkomunikasi dengan dunia luar. Port seperti pin pada chip. Port merupakan antarmuka antara sebuah module dan bagian desain lainnya.

Setiap module memiliki:

  • Port input: sinyal yang masuk ke dalam module
  • Port output: sinyal yang keluar dari module

Port Input

Port input menerima data dari luar. Nilainya tidak dapat diubah di dalam module, hanya dibaca.

input clk;        // input satu bit
input [7:0] data; // Vektor input 8 bit
input a, b;       // Beberapa input dalam satu baris

Aturan untuk input:

  • Tidak dapat diberi nilai di dalam module
  • Tidak dapat dideklarasikan sebagai reg
  • Selalu wire (secara default)

Port Output

Port output mengirim data ke luar. Port ini dapat dikendalikan oleh blok assign atau always.

output out;           // output satu bit
output [3:0] result;  // output 4 bit
output reg busy;      // output bisa berupa reg
output wire ready;    // output bisa berupa wire

Aturan untuk output:

  • Bisa berupa wire (dengan assign) atau reg (dengan always)
  • Harus dikendalikan oleh sesuatu di dalam module

Sintaks Deklarasi Port

Sintaks deklarasi port adalah cara khusus untuk menulis port input dan output dalam module. Sintaks ini memberi tahu Verilog tiga hal tentang setiap port:

  1. Arah: apakah ini input, output, atau inout?
  2. Ukuran: berapa bit lebarnya?
  3. Nama: apa namanya?
module example (
  input [7:0] data_in,    // Vektor input
  input clk,              // Input tunggal
  input enable,           // Input tunggal
  output reg [7:0] out,   // Output reg
  output busy             // Output wire
);

Mengapa Arah Port Penting

Arah memberi tahu Verilog:

  • Sinyal mana yang dapat dibaca modul (input)
  • Sinyal mana yang dapat ditulis oleh modul (output)
  • Jenis koneksi yang diizinkan

Menggunakan arah yang salah menyebabkan error kompilasi.

Contoh Kode

module port_demo (
  input [3:0] a,        // Hanya bisa dibaca
  input [3:0] b,        // Hanya bisa dibaca
  output reg [3:0] sum, // Bisa ditulis (reg)
  output [3:0] diff     // Bisa ditulis (wire)
);
  always @(*) begin
    sum = a + b;        // Menulis ke output reg
  end
  
  assign diff = a - b;   // Menulis ke output wire
endmodule
challenge icon

Tantangan

Lengkapi Deklarasi Port

Yang harus dilakukan:

  1. Tambahkan input 8-bit bernama data_in
  2. Tambahkan input satu bit bernama clk
  3. Tambahkan output 4-bit bernama result (gunakan reg: akan diberi nilai di dalam blok always)
  4. Tambahkan output satu bit bernama valid (gunakan wire: akan diberi nilai dengan assign)

Coba sendiri

module port_challenge (
  // Tugas 1: Tambahkan input 8-bit bernama data_in
  
  
  // Tugas 2: Tambahkan input 1-bit bernama clk
  
  
  // Tugas 3: Tambahkan output 4-bit bernama result (gunakan reg)
  
  
  // Tugas 4: Tambahkan output 1-bit bernama valid (gunakan wire)
  
  
);

  reg [3:0] counter;
  
  always @(posedge clk) begin
    counter <= counter + 1;
    result <= counter;
  end
  
  assign valid = (counter > 8);
  
endmodule
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Compiler Verilog online