Menu
CoddyTech

Giriş ve Çıkış Portları

Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 31 / 90.

Giriş ve çıkış bağlantı noktaları, bir modülün dış dünyayla iletişim kurmasını sağlayan bağlantılardır. Bir yonganın pinleri gibidirler. Bağlantı noktaları, bir modül ile tasarımın geri kalanı arasındaki arayüzdür.

Her modülde şunlar bulunur:

  • Giriş bağlantı noktaları: modülün içine gelen sinyaller
  • Çıkış bağlantı noktaları: modülün dışına giden sinyaller

Giriş Portları

Giriş portları dışarıdan veri alır. Modülün içinde değiştirilemezler: yalnızca okunabilirler.

input clk;        // Tek bitlik giriş
input [7:0] data; // 8 bitlik giriş vektörü
input a, b;       // Tek satırda birden fazla giriş

Girişler için kurallar:

  • Modül içinde bir değer atanamaz
  • reg olarak bildirilemez
  • Her zaman wire olur (varsayılan olarak)

Çıkış Portları

Çıkış portları verileri dışarıya gönderir. Bunlar assign veya always blokları tarafından sürülebilir.

output out;           // Tek bitlik çıkış
output [3:0] result;  // 4 bitlik çıkış
output reg busy;      // Çıkış reg olabilir
output wire ready;    // Çıkış wire olabilir

Çıkış kuralları:

  • wire (assign ile) veya reg (always ile) olabilir
  • Modülün içindeki bir şey tarafından sürülmelidir

Port Bildirimi Sözdizimi

Port bildirimi sözdizimi, bir modülde giriş ve çıkış portlarını yazmanın belirli biçimidir. Verilog'a her port hakkında üç şey söyler:

  1. Yön: giriş mi, çıkış mı yoksa giriş/çıkış mı?
  2. Boyut: kaç bit genişliğinde?
  3. Ad: adı nedir?
module example (
  input [7:0] data_in,    // Giriş vektörü
  input clk,              // Tekil giriş
  input enable,           // Tekil giriş
  output reg [7:0] out,   // Çıkış reg
  output busy             // Çıkış wire
);

Port Yönü Neden Önemlidir

Yön, Verilog'a şunları bildirir:

  • Modülün okuyabileceği sinyaller (girişler)
  • Modülün yazabileceği sinyaller (çıkışlar)
  • İzin verilen bağlantı türleri

Yanlış yön kullanmak derleme hatalarına neden olur.

Kod Örneği

module port_demo (
  input [3:0] a,        // Yalnızca okunabilir
  input [3:0] b,        // Yalnızca okunabilir
  output reg [3:0] sum, // Yazılabilir (reg)
  output [3:0] diff     // Yazılabilir (wire)
);
  always @(*) begin
    sum = a + b;        // Çıkış reg'ine yazılıyor
  end
  
  assign diff = a - b;   // Çıkış wire'ına yazılıyor
endmodule
challenge icon

Görev

Port Bildirimlerini Tamamla

Yapılacaklar:

  1. 8 bitlik data_in adlı bir giriş ekle
  2. Tek bitlik clk adlı bir giriş ekle
  3. 4 bitlik result adlı bir çıkış ekle (reg kullan: always bloğunda atanacak)
  4. Tek bitlik valid adlı bir çıkış ekle (wire kullan: assign ile atanacak)

Kendin dene

module port_challenge (
  // Görev 1: data_in adlı 8 bitlik bir giriş ekleyin
  
  
  // Görev 2: clk adlı tek bitlik bir giriş ekleyin
  
  
  // Görev 3: result adlı 4 bitlik bir çıkış ekleyin (reg kullanın)
  
  
  // Görev 4: valid adlı tek bitlik bir çıkış ekleyin (wire kullanın)
  
  
);

  reg [3:0] counter;
  
  always @(posedge clk) begin
    counter <= counter + 1;
    result <= counter;
  end
  
  assign valid = (counter > 8);
  
endmodule
quiz iconKendini test et

Bu 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

Kendi başına pratik yap: Online Verilog derleyicisi