Inout Portları
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 32 / 90.
Bir inout portu, hem sinyal gönderebilen hem de alabilen çift yönlü bir porttur. Farklı zamanlarda bir giriş veya bir çıkış olarak görev yapabilir.
Çoğu port ya input (veri içeri akar) ya da output (veri dışarı akar) şeklindedir. Bir inout portu her ikisini de yapabilir — duruma bağlı olarak veriyi dışarı sürebilir veya içeri alabilir.
Bunu tek yönlü bir yol yerine çift yönlü bir cadde gibi düşünün.
Inout portları şunlar için kullanılır:
- Paylaşımlı veri yolları (Shared buses) — aynı kablolara bağlı birden fazla cihaz
- Bellek veri yolları — veriler okunabilir veya yazılabilir
- Çift yönlü iletişim — I2C, SPI vb.
Bir seferde veri yolunu yalnızca bir cihaz sürer. Diğer cihazlar yüksek empedans durumunda (Z) olmalıdır.
Inout Portu Bildirme
inout [7:0] data_bus; // 8-bit çift yönlü veri yolu
inout ready; // Tek bitlik çift yönlü sinyalInout Nasıl Çalışır
Bir inout portu, giriş mi yoksa çıkış mı olarak hareket edeceğine karar vermek için bir kontrol sinyali gerektirir:
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; // Etkinleştirildiğinde veri yolunu sür, aksi takdirde Z
assign data_in = bus; // Veri yolunu her zaman oku
endmoduleenable = 1olduğunda, modül veriyolunu sürer (çıkış modu)enable = 0olduğunda, modül veriyolunu serbest bırakır (giriş modu, high-Z)
Inout İçin Önemli Kurallar
| Kural | Neden |
|---|---|
wire olarak bildirilmelidir | reg olamaz |
| Aynı anda hem okunup hem yazılamaz | Çakışma (X) yaratır |
Veri yolunu serbest bırakmak için Z kullanın | Diğer cihazların sürmesine izin verir |
| Aynı anda sadece bir sürücü | Veri yolu çekişmesini önler |
Inout vs Input vs Output
| Port Türü | Yön | Sürebilir | Okuyabilir |
|---|---|---|---|
input | Tek yönlü (yalnızca giriş) | Hayır | Evet |
output | Tek yönlü (yalnızca çıkış) | Evet | Hayır |
inout | Çift yönlü (her ikisi) | Evet (etkinleştirildiğinde) | Evet (her zaman) |
Yaygın Hata
// YANLIŞ: always bloğu içinde inout ataması yapılamaz
always @(posedge clk) begin
data_bus <= something; // Hata! Koşullu 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ü tamponun (bidirectional buffer) çalışması için eksik olan inout portunu ve assign ifadelerini ekleyin.
Neler yapmalı:
io_busadında 8 bitlik birinoutportu ekleyinsend_enable1 olduğundaio_busportunusend_valueile süren, aksi takdirdeZdeğerini veren birassignifadesi ekleyinio_busdeğerinireceive_valueiçine okuyan birassignifadesi ekleyin
Kopya kağıdı
inout, hem sinyal gönderebilen hem de alabilen çift yönlü bir porttur. Veri yolunu (bus) aynı anda yalnızca bir cihaz sürer; diğerleri yüksek empedans (Z) çıkışı vermelidir.
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; // Etkinleştirildiğinde sür, aksi takdirde serbest bırak
assign data_in = bus; // Veri yolunu her zaman oku
endmoduleTemel kurallar:
wireolmalıdır (regdeğil)- Üçlü (ternary) koşul ile
assignkullanın — asla biralwaysbloğu içinde atama yapmayın - Veri yolu çakışmasını (bus contention) önlemek için sürülmediğinde
Zile serbest bırakın
Kendin dene
module bidir_buffer (
// Görev 1: Buraya io_bus adında 8 bitlik bir inout portu ekleyin
input [7:0] send_value,
input send_enable,
output [7:0] receive_value
);
// Görev 2: send_enable 1 olduğunda io_bus'ı send_value ile süren, aksi takdirde Z yapan bir assign ifadesi ekleyin
// Görev 3: io_bus'ı 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ığı