Menu
Coddy logo textTech

Port Mapping By Name

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

Önceki derste, bir modülde tanımlanan portların sırasıyla aynı sırada sinyaller geçirerek modülün örneğinin nasıl oluşturulacağını öğrendin. Bu işe yarar, ancak bir sorunu vardır: sıra önemlidir.

Sırayı yanlışlıkla karıştırırsan sinyaller yanlış portlara bağlanır. Bu durumu hata ayıklamak zor olabilir.

Sıra Eşlemesindeki Sorun

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

// Sıra eşlemesi - sıra MUTLAKA eşleşmeli
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 değerini in1'e ve input_a değerini in2'ye bağlar: gözden kaçırılması kolay, incelikli bir hata.

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

Ada göre port eşleme, bağlantıları yapmak için port name ifadesini 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ün içindeki bir porta başvurduğumuzu gösterir. Parantezlerin içindeki sinyal, porta bağladığımız şeydir.

Örnek

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

Bu açıkça şunu belirtir:

  • Port in1, input_a sinyalini alır
  • Port in2, input_b sinyalini alır
  • Port result, output_y sinyalini alır

Sıra Önemli Değildir

Adla port eşlemesiyle bağlantıları herhangi bir sırayla yazabilirsiniz:

// Üçü de ÖZDEŞ

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)
);

All, her bağlantı etiketlendiği için tamamen aynı şeyi yapar.

challenge icon

Görev

port mapping by name kullanarak eksik port bağlantılarını ekleyerek örneklemeyi tamamlayın.

Yapılacaklar:

  1. Port clk'yi clock_signal sinyaline bağlayın
  2. Port data_in'i input_data sinyaline bağlayın
  3. Port data_out'u output_data sinyaline bağlayın

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 (
    // TODO: .port(signal) sözdizimini kullanarak port eşlemeleri ekle
  );
  
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