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 tertukarBaris 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
in1menerima sinyalinput_a - Port
in2menerima sinyalinput_b - Port
resultmenerima sinyaloutput_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.
Tantangan
Lengkapi instansiasi dengan menambahkan koneksi port yang belum ada menggunakan pemetaan port berdasarkan nama.
Yang harus dilakukan:
- Hubungkan port
clkke sinyalclock_signal - Hubungkan port
data_inke sinyalinput_data - Hubungkan port
data_outke sinyaloutput_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)
);
endmodulePelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
1Pengantar
Apa Itu VerilogPerangkat Keras vs Perangkat LunakModul PertamamuKomentarTingkat Abstraksi Desain4Operator Bagian 1
Operator AritmetikaOperator ModuloOperator PerbandinganUlasan, Matematika SederhanaOperator Bitwise7Penugasan dan Gerbang
Penugasan KontinuPenugasan dengan OperatorPrimitif Gerbang BawaanGerbang AND, OR, NOTGerbang XOR, XNORUlasan: Rangkaian Gerbang Logika10Pengambilan Keputusan
Pernyataan IfIf - ElseRangkuman: Komparator SederhanaPernyataan CaseCasex dan CasezRangkuman: Desain ALU5Operator Bagian 2
Operator LogikaOperator ReduksiOperator GeserOperator PenggabunganOperator KondisionalRangkuman, Tantangan Operator3Sistem Bilangan
Representasi BinerBilangan BerukuranBilangan Tanpa UkuranBilangan NegatifNilai Khusus X dan ZRingkasan: Format Bilangan6Modul
Struktur ModulPort Input dan OutputPort InoutInstansiasi ModulPemetaan Port Berdasarkan NamaPemetaan Port Berdasarkan UrutanRangkuman: Bangun Modul9Blok Prosedural
Blok alwaysBlok initialDaftar SensitivitasPenugasan BlockingPenugasan Non-BlockingRangkuman: always vs initial15Pengendali Lampu Lalu Lintas
Menentukan StatusLogika Mesin StatusLatihan sendiri: Compiler Verilog online