Giriş ve Çıkış Portları
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 31 / 90.
Giriş ve çıkış portları, bir modülün dış dünyayla iletişim kurmasını sağlayan bağlantılardır. Bir çip üzerindeki pinler gibidirler. Portlar, bir modül ile tasarımın geri kalanı arasındaki arabirimdir.
Her modülün şunları vardır:
- Giriş portları — modülün içine gelen sinyaller
- Çıkış portları — modülün dışına giden sinyaller
Giriş Portları
Giriş portları veriyi dışarıdan alır. Modül içinden değiştirilemezler—sadece okunabilirler.
input clk; // Tek bitlik giriş
input [7:0] data; // 8-bit giriş vektörü
input a, b; // Bir satırda birden fazla girişGirişler için kurallar:
- Modül içinde kendilerine değer atanamaz
regolarak bildirilemez- Her zaman
wiretüründedir (varsayılan olarak)
Output Ports
Output port'ları veriyi dışarıya gönderir. assign veya always blokları tarafından sürülebilirler.
output out; // Tek bitlik çıkış
output [3:0] result; // 4-bit çıkış
output reg busy; // Çıkış reg olabilir
output wire ready; // Çıkış wire olabilirÇıkışlar (output) için kurallar:
wire(assignile) veyareg(alwaysile) olabilirmoduleiçindeki bir şey tarafından sürülmelidir
Port Deklarasyonu Sözdizimi
Port deklarasyonu sözdizimi, bir modüldeki giriş ve çıkış portlarını yazmanın belirli yoludur. Verilog'a her bir port hakkında üç şey söyler:
- Yön —
input,outputveyainoutmu? - Boyut — kaç
bitgenişliğinde? - İsim — adı ne?
module example (
input [7:0] data_in, // Giriş vektörü
input clk, // Tek giriş
input enable, // Tek giriş
output reg [7:0] out, // Çıkış reg
output busy // Çıkış wire
);Neden Port Yönü Önemlidir
Yön bilgisi Verilog'a şunları söyler:
- Modülün hangi sinyalleri okuyabileceğini (girdiler)
- Modülün hangi sinyallere yazabileceğini (çıktılar)
- Hangi bağlantı türlerine izin verildiğini
Yanlış yön kullanmak derleme hatalarına neden olur.
Kod Örneği
module port_demo (
input [3:0] a, // Sadece okunabilir
input [3:0] b, // Sadece okunabilir
output reg [3:0] sum, // Yazılabilir (reg)
output [3:0] diff // Yazılabilir (wire)
);
always @(*) begin
sum = a + b; // output reg'e yazılıyor
end
assign diff = a - b; // output wire'a yazılıyor
endmoduleGörev
Port Bildirimlerini Tamamlayın
Yapılacaklar:
data_inadında 8-bitlik birinputekleyinclkadında tek bitlik birinputekleyinresultadında 4-bitlik biroutputekleyin (regkullanın —alwaysbloğunda atanacaktır)validadında tek bitlik biroutputekleyin (wirekullanın —assignile atanacaktır)
Kendin dene
module port_challenge (
// Görev 1: data_in adında 8-bitlik bir giriş ekle
// Görev 2: clk adında tek bitlik bir giriş ekle
// Görev 3: result adında 4-bitlik bir çıkış ekle (reg kullan)
// Görev 4: valid adında tek bitlik bir çıkış ekle (wire kullan)
);
reg [3:0] counter;
always @(posedge clk) begin
counter <= counter + 1;
result <= counter;
end
assign valid = (counter > 8);
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ığı