Menu
CoddyTech

Pemetaan Port Berdasarkan Nama

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

Pada pelajaran sebelumnya, kamu mempelajari cara membuat instance module dengan meneruskan sinyal dalam urutan yang sama seperti urutan port dalam definisi module. Cara ini berhasil, tetapi memiliki masalah: urutan itu penting.

Jika kamu tidak sengaja mencampur urutannya, sinyal akan terhubung ke port yang salah. Hal ini bisa sulit untuk di-debug.

Masalah dengan Pemetaan Berdasarkan Urutan

module or_gate (
  input in1,
  input in2,
  output result
);
  assign result = in1 | in2;
endmodule

// Pemetaan urutan: urutannya HARUS cocok
or_gate or1 (input_a, input_b, output_y);  // Benar
or_gate or1 (input_b, input_a, output_y);  // Salah! Posisi input tertukar

Baris kedua menghubungkan input_b ke in1 dan input_a ke in2: bug kecil yang mudah terlewat.

Solusi: Pemetaan Port Berdasarkan Nama

Pemetaan port berdasarkan nama menggunakan nama port untuk membuat koneksi. Urutannya tidak penting karena setiap koneksi diberi label secara eksplisit.

Sintaks:

module_name instance_name (
  .port_name(signal),
  .port_name(signal)
);

Titik . sebelum nama port menunjukkan bahwa kita merujuk pada port di dalam module. Signal di dalam tanda kurung adalah yang kita hubungkan ke port tersebut.

Contoh

or_gate or1 (
  .in1(input_a),
  .in2(input_b),
  .result(output_y)
);

Ini menyatakan secara eksplisit:

  • Port in1 menerima sinyal input_a
  • Port in2 menerima sinyal input_b
  • Port result menerima sinyal output_y

Urutan Tidak Penting

Dengan pemetaan port berdasarkan nama, kamu dapat menulis koneksi dalam urutan apa pun:

// Ketiganya IDENTIK

or_gate or1 (
  .in1(input_a),
  .in2(input_b),
  .result(output_y)
);

or_gate or1 (
  .result(output_y),
  .in1(input_a),
  .in2(input_b)
);

or_gate or1 (
  .in2(input_b),
  .result(output_y),
  .in1(input_a)
);

Semuanya melakukan hal yang persis sama karena setiap koneksi diberi label.

challenge icon

Tantangan

Lengkapi instansiasi dengan menambahkan koneksi port yang belum ada menggunakan pemetaan port berdasarkan nama.

Yang harus dilakukan:

  1. Hubungkan port clk ke sinyal clock_signal
  2. Hubungkan port data_in ke sinyal input_data
  3. Hubungkan port data_out ke sinyal output_data

Coba sendiri

module register (
  input clk,
  input [7:0] data_in,
  output reg [7:0] data_out
);
  always @(posedge clk) begin
    data_out <= data_in;
  end
endmodule

module top (
  input clock_signal,
  input [7:0] input_data,
  output [7:0] output_data
);
  
  register reg1 (
    // TODO: Tambahkan pemetaan port menggunakan sintaks .port(signal)
  );
  
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