Menu
Coddy logo textTech

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
  • reg olarak bildirilemez
  • Her zaman wire tü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 (assign ile) veya reg (always ile) olabilir
  • module iç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:

  1. Yöninput, output veya inout mu?
  2. Boyut — kaç bit genişliğinde?
  3. İ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
endmodule
challenge icon

Görev

Port Bildirimlerini Tamamlayın

Yapılacaklar:

  1. data_in adında 8-bitlik bir input ekleyin
  2. clk adında tek bitlik bir input ekleyin
  3. result adında 4-bitlik bir output ekleyin (reg kullanın — always bloğunda atanacaktır)
  4. valid adında tek bitlik bir output ekleyin (wire kullanın — assign ile 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);
  
endmodule
quiz iconKendini test et

Bu 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