Inout Portları
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 32 / 90.
Bir inout portu, sinyalleri hem gönderebilen hem de alabilen çift yönlü bir porttur. Farklı zamanlarda bir input veya bir output gibi davranabilir. Portların çoğu ya input (veri içeri akar) ya da output (veri dışarı akar) şeklindedir. Bir inout portu ise her ikisini de yapabilir — duruma bağlı olarak dışarıya veri sürebilir (drive) veya içeriye veri alabilir.
Tek yönlü bir yol yerine bunu iki yönlü bir cadde gibi düşünün.
Inout portları şunlar için kullanılır:
- Paylaşılan veriyolları (bus) — aynı kablolara bağlı birden fazla cihaz
- Bellek veri veriyolları — veri okunabilir veya yazılabilir
- Çift yönlü (bidirectional) iletişim — I2C, SPI, vb.
Veri yolunu (bus) aynı anda yalnızca bir cihaz sürer (drives). Diğer cihazlar yüksek empedans durumunda (Z) olmalıdır.
Inout Port Tanımlama
inout [7:0] data_bus; // 8-bit çift yönlü bus
inout ready; // Tek bitlik çift yönlü sinyalInout Nasıl Çalışır
Bir inout portu, girdi mi yoksa çıktı mı olarak hareket edeceğine karar vermek için bir kontrol sinyaline ihtiyaç duyar:
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
endmoduleenable = 1olduğunda, modül bus'ı sürer (drives) (çıktı modu)enable = 0olduğunda, modül bus'ı serbest bırakır (releases) (girdi modu, yüksek empedans/high-Z)
Inout İçin Önemli Kurallar
| Kural | Neden |
|---|---|
wire olarak tanımlanmalıdır | reg olamaz |
| Aynı anda okunup yazılamaz | Çakışma (X) oluşturur |
Veri yolunu serbest bırakmak için Z kullanın | Diğer cihazların sürmesine (drive) izin verir |
| Aynı anda yalnızca bir sürücü (driver) olabilir | Veri yolu çakışmasını (bus contention) önler |
Inout - Input - Output Karşılaştırması
| Port Tipi | Yön | Sürebilir (Drive) | Okuyabilir (Read) |
|---|---|---|---|
input | Tek yönlü (sadece giriş) | Hayır | Evet |
output | Tek yönlü (sadece çıkış) | Evet | Hayır |
inout | Çift yönlü (her ikisi de) | Evet (etkinleştirildiğinde - enabled) | Evet (her zaman - always) |
Sık Yapılan Hata
// YANLIŞ: always bloğu içinde inout'a atama yapılamaz
always @(posedge clk) begin
data_bus <= something; // Hata! Koşul ile assign kullanın
end
// DOĞRU: enable koşulu ile assign kullanın
assign data_bus = (enable) ? something : 8'bZ;Görev
Bu çift yönlü arabelleğin (bidirectional buffer) çalışması için eksik inout portunu ve assign ifadelerini ekleyin.
Yapılacaklar:
io_busadında 8-bitlik birinoutportu ekleyinsend_enable1 olduğundaio_busportunusend_valueile süren, aksi takdirdeZdeğerine çeken birassignifadesi ekleyinio_busdeğerini okuyupreceive_valueiçine aktaran birassignifadesi ekleyin
Kendin dene
module bidir_buffer (
// Görev 1: Buraya io_bus adında 8-bitlik bir inout port ekleyin
input [7:0] send_value,
input send_enable,
output [7:0] receive_value
);
// Görev 2: send_enable 1 olduğunda io_bus'u send_value ile süren, aksi halde Z yapan bir assign ifadesi ekleyin
// Görev 3: io_bus'u receive_value'ya okuyan bir assign ifadesi ekleyin
endmoduleBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temeller bölümündeki tüm dersler
4Operatörler Bölüm 1
Aritmetik OperatörlerModül OperatörüKarşılaştırma OperatörleriÖzet - Basit MatematikBitsel Operatörler7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND OR NOT KapılarıXOR XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Yapıları
If İfadesiIf - ElseÖzet - Basit KarşılaştırıcıCase İfadesiCasex ve CasezÖzet - ALU Tasarımı5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörÖzet - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüRepeat DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiÖzet - Döngü Kalıpları3Sayı Sistemleri
İkilik GösterimBoyutlandırılmış SayılarBoyutlandırılmamış SayılarNegatif SayılarÖzel Değerler X ve ZÖzet - Sayı Formatları6Modüller
Modül YapısıGiriş ve Çıkış PortlarıInout PortlarıModül Örneklendirmeİsme Göre Port EşlemeSıraya Göre Port EşlemeÖzet - Bir Modül Oluşturun9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiEngelleyici AtamaEngelleyici Olmayan AtamaÖzet - Always vs Initial15Trafik Işığı Kontrolcüsü
Durumları TanımlamaDurum Makinesi Mantığı