Menu
Coddy logo textTech

Input And Output Ports

Coddy'nin Verilog Journey'sinin Temeller 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 module şunlara sahiptir:

  • Input portları: module'e gelen sinyaller
  • Output portları: module'den çıkan sinyaller

Input Portları

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

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 wire (varsayılan olarak)

Çıkış Portları

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

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 için kurallar:

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

Port Bildirim Söz Dizimi

Port bildirim söz dizimi, bir modülde giriş ve çıkış portlarını yazdığınız özel biçimdir. 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ı söyler:

  • Modülün can read sinyalleri (inputs)
  • Modülün can write sinyalleri (outputs)
  • 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 Tamamla

Yapılacaklar:

  1. Add 8-bit input called data_in
  2. Add single-bit input called clk
  3. Add 4-bit output called result (reg kullan: always bloğunda atanacak)
  4. Add single-bit output called valid (wire kullan: assign ile atanacak)

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

Kendi başına pratik yap: Online Verilog derleyicisi