Menu
Coddy logo textTech

İsme Göre Port Eşleme

Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 34 / 90.

Önceki derste, sinyalleri portların modül tanımında göründüğü aynı sırada aktararak bir modülün nasıl örnekleneceğini öğrendiniz. Bu yöntem çalışır, ancak bir sorunu vardır: sıralama önemlidir.

Eğer yanlışlıkla sırayı karıştırırsanız, sinyaller yanlış portlara bağlanır. Bu durumun hata ayıklaması zor olabilir.

Sıralı Eşleme ile İlgili Sorun

module or_gate (
  input in1,
  input in2,
  output result
);
  assign result = in1 | in2;
endmodule

// Sıralı eşleme - sıra eşleşmelidir
or_gate or1 (input_a, input_b, output_y);  // Doğru
or_gate or1 (input_b, input_a, output_y);  // Yanlış! Girişler yer değiştirmiş

İkinci satır input_b'yi in1'e ve input_a'yı in2'ye bağlar — gözden kaçması kolay, sinsi bir hata.

Çözüm: İsme Göre Port Eşleme

İsme göre port eşleme, bağlantı kurmak için port adını kullanır. Her bağlantı açıkça etiketlendiği için sıra önemli değildir.

Sözdizimi:

module_name instance_name (
  .port_name(signal),
  .port_name(signal)
);

Port adından önceki nokta ., modül içindeki bir porta atıfta bulunduğumuzu belirtir. Parantez içindeki sinyal, ona bağladığımız şeydir.

Örnek

or_gate or1 (
  .in1(input_a),
  .in2(input_b),
  .result(output_y)
);

Bu açıkça şunu ifade eder:

  • in1 portu input_a sinyalini alır
  • in2 portu input_b sinyalini alır
  • result portu output_y sinyalini alır

Sıralama Önemli Değildir

İsimle port eşleme sayesinde, bağlantıları herhangi bir sırayla yazabilirsiniz:

// Üçü de ÖZDEŞTİR

or_gate or1 (
  .in1(input_a),
  .in2(input_b),
  .result(output_y)
);

or_gate or1 (
  .result(output_y),
  .in1(input_a),
  .in2(input_b)
);

or_gate or1 (
  .in2(input_b),
  .result(output_y),
  .in1(input_a)
);

Her bağlantı etiketlendiği için hepsi tam olarak aynı şeyi yapar.

challenge icon

Görev

İsme göre port eşleme (port mapping by name) yöntemini kullanarak eksik port bağlantılarını ekleyin ve örneklemeyi (instantiation) tamamlayın.

Yapılacaklar:

  1. clk portunu clock_signal sinyaline bağlayın
  2. data_in portunu input_data sinyaline bağlayın
  3. data_out portunu output_data sinyaline bağlayın

Kopya kağıdı

İsimle port eşleme, .port_name(signal) sözdizimini kullanır ve bu da sıralamayı önemsiz kılar:

module_name instance_name (
  .port_name(signal),
  .port_name(signal)
);

Örnek:

or_gate or1 (
  .in1(input_a),
  .in2(input_b),
  .result(output_y)
);

Port isminden önceki . modülün içindeki bir porta atıfta bulunur; parantez içindeki sinyal ise ona bağlanan şeydir. Sıralı eşlemenin aksine, bağlantılar herhangi bir hata oluşmadan herhangi bir sırada listelenebilir.

Kendin dene

module register (
  input clk,
  input [7:0] data_in,
  output reg [7:0] data_out
);
  always @(posedge clk) begin
    data_out <= data_in;
  end
endmodule

module top (
  input clock_signal,
  input [7:0] input_data,
  output [7:0] output_data
);
  
  register reg1 (
    // YAPILACAK: .port(sinyal) sözdizimini kullanarak port eşlemelerini ekleyin
  );
  
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