Menu
Coddy logo textTech

Giriş ve Çıkış Portları

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

Input ve output 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 arayüzdür.

Her modulede şunlar vardır:

  • 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-bit giriş vektörü
input a, b;       // Bir satırda birden fazla giriş

Girdiler için kurallar:

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

Çı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

Çıktı 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 input ve output portlarını yazmanın belirli yoludur. Verilog'a her port hakkında üç şey söyler:

  1. Yön: input, output veya inout mu?
  2. Boyut: kaç bit genişliğinde?
  3. Ad: ne olarak adlandırılıyor?
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
);

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)
  • Hangi bağlantı türlerine izin verildiği

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
endmodule
challenge icon

Görev

Port bildirimlerini tamamlayın

Yapılacaklar:

  1. data_in adlı 8 bitlik bir giriş ekleyin
  2. clk adlı tek bitlik bir giriş ekleyin
  3. result adlı 4 bitlik bir çıkış ekleyin (reg kullanın: always bloğunda atanacaktır)
  4. valid adlı tek bitlik bir çıkış ekleyin (wire kullanın: assign ile atanacaktır)

Kendin dene

module port_challenge (
  // Görev 1: data_in adında 8-bit bir giriş ekle
  
  
  // Görev 2: clk adında tek bitlik bir giriş ekle
  
  
  // Görev 3: result adında 4-bit 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);
  
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