İ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, modül tanımındaki `port` sırasıyla aynı sırada `signal` aktararak bir `module` örneğini nasıl oluşturacağınızı öğrendiniz. Bu yöntem çalışır, ancak bir sorunu vardır: `order` önemlidir.
Sırayı kazara karıştırırsanız, `signal` yapıları `Wrong` `port` alanlarına bağlanır. Bu durumun hata ayıklaması zor olabilir.
Order Mapping ile İlgili 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 sinyalini in1 portuna ve input_a sinyalini in2 portuna bağlar — bu, gözden kaçırılması kolay ince bir hatadır.
Çözüm: İsme Göre Port Bağlama (Port Mapping By Name)
İsme göre port bağlama, bağlantıları yapmak için port_name kullanır. Sıra önemli değildir çünkü her bir bağlantı açıkça etiketlenmiştir.
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 gösterir. Parantez içindeki sinyal ise bu porta 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:
in1portuinput_asinyalini alırin2portuinput_bsinyalini alırresultportuoutput_ysinyalini alır
Order Does Not Matter
İsme göre port mapping ile 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)
);Her bağlantı etiketlendiği için hepsi tam olarak aynı işi yapar.
Görev
İsme göre port eşleme (port mapping by name) yöntemini kullanarak eksik port bağlantılarını ekleyin ve örnekeleme (instantiation) işlemini tamamlayın.
Yapılacaklar:
clkportunuclock_signalsinyaline bağlayındata_inportunuinput_datasinyaline bağlayındata_outportunuoutput_datasinyaline 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 eşlemelerini .port(signal) sözdizimini kullanarak ekle
);
endmoduleBu 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
4Operatörler Bölüm 1
Aritmetik OperatörlerModül OperatörüKarşılaştırma OperatörleriÖzet - Basit MatematikBitsel Operatörler7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND OR NOT KapılarıXOR XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Yapıları
If İfadesiIf - ElseÖzet - Basit KarşılaştırıcıCase İfadesiCasex ve CasezÖzet - ALU Tasarımı5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörÖzet - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüRepeat DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiÖzet - Döngü Kalıpları3Sayı Sistemleri
İkilik GösterimBoyutlandırılmış SayılarBoyutlandırılmamış SayılarNegatif SayılarÖzel Değerler X ve ZÖzet - Sayı Formatları6Modüller
Modül YapısıGiriş ve Çıkış PortlarıInout PortlarıModül Örneklendirmeİsme Göre Port EşlemeSıraya Göre Port EşlemeÖzet - Bir Modül Oluşturun9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiEngelleyici AtamaEngelleyici Olmayan AtamaÖzet - Always vs Initial15Trafik Işığı Kontrolcüsü
Durumları TanımlamaDurum Makinesi Mantığı