Port Inout
Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 32 dari 90.
Port inout adalah port dua arah yang dapat mengirim dan menerima sinyal. Port ini dapat berfungsi sebagai input atau output pada waktu yang berbeda. Sebagian besar port berupa input (data mengalir masuk) atau output (data mengalir keluar). Port inout dapat melakukan keduanya. Port ini dapat mengirimkan data keluar atau menerima data masuk, bergantung pada situasinya.
Anggap saja seperti jalan dua arah, bukan jalan satu arah.
Port input/output digunakan untuk:
- Bus bersama: beberapa perangkat terhubung ke kabel yang sama
- Bus data memori: data dapat dibaca atau ditulis
- Komunikasi dua arah: I2C, SPI, dan sebagainya
Hanya satu perangkat yang mengendalikan bus pada satu waktu. Perangkat lain harus berada dalam kondisi impedansi tinggi (Z).
Mendeklarasikan Port Inout
inout [7:0] data_bus; // Bus dua arah 8-bit
inout ready; // Sinyal dua arah 1-bitCara Kerja Inout
Port inout memerlukan sinyal kontrol untuk menentukan apakah port tersebut berfungsi sebagai input atau output:
module bidir (
inout [7:0] bus,
input [7:0] data_out,
input enable,
output [7:0] data_in
);
assign bus = (enable) ? data_out : 8'bZ; // Drive bus when enabled, else Z
assign data_in = bus; // Always read the bus
endmodule- Saat
enable = 1, module menggerakkan bus (mode output) - Saat
enable = 0, module melepaskan bus (mode input, high-Z)
Aturan Penting untuk Inout
| Aturan | Alasan |
|---|---|
Harus dideklarasikan sebagai wire | Tidak bisa berupa reg |
| Tidak bisa dibaca dan ditulis secara bersamaan | Akan menimbulkan konflik (X) |
Gunakan Z untuk melepaskan bus | Memungkinkan perangkat lain mengendalikan bus |
| Hanya boleh ada satu pengendali pada satu waktu | Mencegah konflik pada bus |
Inout vs Input vs Output
| Jenis Port | Arah | Dapat Mengirim | Dapat Membaca |
|---|---|---|---|
input | Satu arah (hanya masuk) | Tidak | Ya |
output | Satu arah (hanya keluar) | Ya | Tidak |
inout | Dua arah (keduanya) | Ya (saat diaktifkan) | Ya (selalu) |
Kesalahan Umum
// SALAH: Tidak bisa menetapkan nilai ke inout di dalam blok always
always @(posedge clk) begin
data_bus <= something; // Error! Gunakan assign dengan kondisi
end
// BENAR: Gunakan assign dengan kondisi enable
assign data_bus = (enable) ? something : 8'bZ;Tantangan
Tambahkan port inout yang hilang dan pernyataan assign agar buffer dua arah ini berfungsi.
Yang perlu dilakukan:
- Tambahkan port
inout8-bit bernamaio_bus - Tambahkan pernyataan
assignyang menggerakkanio_busdengansend_valuesaatsend_enablebernilai 1, jika tidak, gunakanZ - Tambahkan pernyataan
assignyang membacaio_buske dalamreceive_value
Coba sendiri
module bidir_buffer (
// Tugas 1: Tambahkan port inout 8-bit bernama io_bus di sini
input [7:0] send_value,
input send_enable,
output [7:0] receive_value
);
// Tugas 2: Tambahkan pernyataan assign yang menggerakkan io_bus dengan send_value saat send_enable bernilai 1, jika tidak Z
// Tugas 3: Tambahkan pernyataan assign yang membaca io_bus ke receive_value
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