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

Her modül şunlara sahiptir:

  • 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çerisinde değiştirilemezler; sadece 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 (inputs) için kurallar:

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

Çıkış Portları

Çıkış portları 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 bitlik çıkış
output reg busy;      // Çıkış reg olabilir
output wire ready;    // Çıkış wire olabilir

Çıkışlar için kurallar:

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

Port Bildirim Sözdizimi

Port bildirim sözdizimi, bir modül içindeki giriş ve çıkış portlarını yazmanın belirli yoludur. Verilog'a her bir port hakkında üç şey söyler:

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

Port Yönü Neden Önemlidir

Yön, Verilog'a şunları söyler:

  • Modülün hangi sinyalleri okuyabileceği (girişler)
  • Modülün hangi sinyalleri yazabileceği (çıkışlar)
  • Ne tür bağlantılara izin verildiği

Yanlış yönün kullanılması derleme hatalarına yol açar.

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;        // Çıkış reg'ine yazma
  end
  
  assign diff = a - b;   // Çıkış wire'ına yazma
endmodule
challenge icon

Görev

Port Bildirimlerini Tamamlayın

Ne yapmalı:

  1. data_in adında 8-bitlik bir giriş ekleyin
  2. clk adında tek bitlik bir giriş ekleyin
  3. result adında 4-bitlik bir çıkış ekleyin (reg kullanın — always bloğu içinde atanacaktır)
  4. valid adında tek bitlik bir çıkış ekleyin (wire kullanın — assign ile atanacaktır)

Kopya kağıdı

Portlar, bir modül ile dış dünya arasındaki arayüzdür.

Giriş Portları (Input Ports)

Girişler her zaman wire tipindedir ve modül içinde salt okunurdur:

input clk;        // Single-bit
input [7:0] data; // 8-bit vector
input a, b;       // Multiple inputs

Çıkış Portları (Output Ports)

Çıkışlar wire (assign ile sürülür) veya reg (always ile sürülür) olabilir:

output wire ready;    // Use with assign
output reg busy;      // Use with always

Modül Başlığında Port Bildirimi

Her port bildirimi yön, boyut ve isim belirtir:

module example (
  input [7:0] data_in,   // 8-bit input
  input clk,             // single-bit input
  output reg [3:0] sum,  // 4-bit output reg
  output diff            // single-bit output wire
);
  always @(*) sum = data_in[3:0] + 1;
  assign diff = data_in[0];
endmodule

Kendin dene

module port_challenge (
  // Görev 1: data_in adında 8 bitlik bir giriş ekleyin
  
  
  // Görev 2: clk adında tek bitlik bir giriş ekleyin
  
  
  // Görev 3: result adında 4 bitlik bir çıkış ekleyin (reg kullanın)
  
  
  // Görev 4: valid adında 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.

Temeller bölümündeki tüm dersler