Çift Yönlü Portlar
Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 32 / 90.
inout bağlantı noktası, sinyalleri hem gönderebilen hem de alabilen çift yönlü bir bağlantı noktasıdır. Farklı zamanlarda giriş veya çıkış olarak işlev görebilir. Bağlantı noktalarının çoğu ya input (veri içeri akar) ya da output (veri dışarı akar) olur. inout bağlantı noktası her ikisini de yapabilir. Duruma bağlı olarak veriyi dışarı gönderebilir veya içeri alabilir.
Bunu tek yönlü bir yol yerine iki yönlü bir sokak gibi düşün.
Inout bağlantı noktaları şu amaçlarla kullanılır:
- Paylaşılan veri yolları: aynı tellere bağlı birden fazla aygıt
- Bellek veri yolları: veriler okunabilir veya yazılabilir
- Çift yönlü iletişim: I2C, SPI vb.
Veriyolunu aynı anda yalnızca bir cihaz sürer. Diğer cihazlar yüksek empedans durumunda (Z) olmalıdır.
Çift yönlü bir port tanımlama
inout [7:0] data_bus; // 8 bitlik çift yönlü veri yolu
inout ready; // Tek bitlik çift yönlü sinyalInout Nasıl Çalışır
Çift yönlü bir port, giriş mi yoksa çıkış mı olarak çalışacağına 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; // Drive bus when enabled, else Z
assign data_in = bus; // Always read the bus
endmoduleenable = 1olduğunda modül veri yolunu sürer (çıkış modu)enable = 0olduğunda modül veri yolunu serbest bırakır (giriş modu, yüksek empedans)
Inout için Önemli Kurallar
| Kural | Neden |
|---|---|
wire olarak tanımlanmalıdır | reg olamaz |
| Aynı anda birden fazla aygıt veri yolunu sürmemelidir | Çakışan sürücüler X üretir |
Veri yolunu serbest bırakmak için Z kullanın | Diğer aygıtların veri yolunu sürmesini sağlar |
| Her seferinde yalnızca bir sürücü | Veri yolu çekişmesini önler |
Inout ile Input ve Output Karşılaştırması
| Bağlantı Noktası Türü | Yön | Sinyal Sürebilir | Okuyabilir |
|---|---|---|---|
input | Tek yönlü (yalnızca giriş) | Hayır | Evet |
output | Tek yönlü (yalnızca çıkış) | Evet | Evet (sürdüğü değer) |
inout | Çift yönlü (her iki yön) | Evet (etkinleştirildiğinde) | Evet (her zaman) |
Yaygın Hata
// YANLIŞ: always bloğu içinde inout'a atama yapılamaz
always @(posedge clk) begin
data_bus <= something; // Hata! assign'ı bir koşulla kullanın
end
// DOĞRU: assign'ı enable koşuluyla kullanın
assign data_bus = (enable) ? something : 8'bZ;Görev
Bu çift yönlü arabelleğin çalışması için eksik inout portunu ve assign ifadelerini ekle.
Yapılacaklar:
- 8 bitlik,
io_busadlı birinoutportu ekle send_enable1 olduğundaio_busportunasend_valuedeğerini, aksi durumdaZdeğerini veren birassignifadesi ekleio_busdeğerinireceive_valueiçine okuyan birassignifadesi ekle
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'a send_value değerini, aksi halde Z değerini atayan bir assign ifadesi ekleyin
// Görev 3: io_bus değerini receive_value içine okuyan bir assign ifadesi ekleyin
endmoduleBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temel Bilgiler bölümündeki tüm dersler
4Operatörler Bölüm 1
Aritmetik OperatörlerMod Alma OperatörüKarşılaştırma OperatörleriTekrar - Basit MatematikBit Düzeyi Operatörleri7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND, OR ve NOT KapılarıXOR ve XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Verme
If İfadesiIf - ElseTekrar - Basit KarşılaştırıcıCase İfadesiCasex ve CasezTekrar - ALU Tasarımı2Veri Türleri
Wire TürüReg TürüTamsayı ve GerçelVektörlerDizilerParametrelerÖzet - Sinyalleri Tanımlama5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörTekrar - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüTekrar DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiTekrar - Döngü Kalıpları3Sayı Sistemi
İkili GösterimBoyutlu SayılarBoyutsuz SayılarNegatif SayılarÖzel X ve Z DeğerleriTekrar - Sayı Biçimleri6Modüller
Modül YapısıGiriş ve Çıkış PortlarıÇift Yönlü PortlarModül ÖrneklendirmeAda Göre Port EşlemeSıraya Göre Port EşlemeTekrar - Bir Modül Oluşturma9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiBloklayıcı AtamaBloklamayan AtamaTekrar - Always ve Initial Karşılaştırması15Trafik Işığı Denetleyicisi
Durumları TanımlamaDurum Makinesi MantığıKendi başına pratik yap: Online Verilog derleyicisi