Inout Ports
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 32 / 90.
Bir inout portu, hem gönderip hem de alabilen çift yönlü bir porttur ve signal iletebilir. Farklı zamanlarda input veya output olarak çalışabilir. Ç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 veri alabilir.
Bunu tek yönlü bir yol yerine çift yönlü bir cadde gibi düşün.
Inout portları şu amaçlarla kullanılır:
- Paylaşımlı bus: aynı kablolara bağlı birden çok cihaz
- Bellek veri bus: veri read veya yazılabilir
- bidirectional iletişim: I2C, SPI vb.
Bir seferde yalnızca bir cihaz bus'ı 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ü bus
inout ready; // Tek bitlik çift yönlü sinyalinout Nasıl Çalışır
Bir inout port, input veya output olarak görev yapıp yapmadığına karar vermek için bir kontrol signal 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
endmodule- When
enable = 1, module drives bus'ı (output modu) - When
enable = 0, module bus'ı release eder (input modu, high-Z)
Inout İçin Önemli Kurallar
| Kural | Neden |
|---|---|
wire olarak bildirilmelidir | reg olamaz |
| Cannot aynı anda okunup yazılamaz | Çakışma (X) oluşturur |
| Diğer cihazların bus'ı sürmesini sağlar | |
| Aynı anda yalnızca bir sürücü | bus çekişmesini önler |
Inout ve Input ve Output Karşılaştırması
| Port Türü | Yön | Drive edebilir | Okuyabilir |
|---|---|---|---|
input | Tek yönlü (yalnızca içeri) | Hayır | Evet |
output | Tek yönlü (yalnızca dışarı) | Evet | Hayır |
inout | İki yönlü (her ikisi) | Evet (enabled olduğunda) | Evet (always) |
Yaygın Hata
// WRONG: 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
// CORRECT: enable koşulu ile assign kullanın
assign data_bus = (enable) ? something : 8'bZ;Görev
Eksik inout portunu ve bu bidirectional buffer'ın çalışmasını sağlamak için assign ifadelerini Add.
Yapılacaklar:
- 8 bitlik,
io_busolarak called birinoutport Add send_enable1 olduğundaio_bus'usend_valueile drives, otherwiseZile süren birassignstatement Addio_bus'ureceive_valueiçine reads birassignstatement Add
Kendin dene
module bidir_buffer (
// Görev 1: Buraya io_bus adında 8-bit bir inout port ekle
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 olan bir assign ifadesi ekle
// Görev 3: io_bus'u receive_value'ya okuyan bir assign ifadesi ekle
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
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicKendi başına pratik yap: Online Verilog derleyicisi