Ada Göre Port Eşleme
Coddy'nin Verilog Journey'sinin Temel Bilgiler 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ı 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ının önündeki nokta ., modülün içindeki bir porta başvurduğumuzu belirtir. 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
in1sinyaliinput_aalır - Port
in2sinyaliinput_balır - Port
resultsinyalioutput_yalır
Sıra Önemli Değildir
İsme göre port eşlemeyle bağlantıları istediğiniz sırada yazabilirsiniz:
// Üçü de AYNI
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 üçünün de yaptığı şey tamamen aynıdır.
Görev
adına port eşlemesi kullanarak eksik port bağlantılarını ekleyip örneklemeyi tamamlayın.
Yapılacaklar:
-
clkportunuclock_signalsinyaline bağlayın -
data_inportunuinput_datasinyaline bağlayın -
data_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(signal) sözdizimini kullanarak port eşlemeleri ekle
);
endmoduleBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temel Bilgiler bölümündeki tüm dersler
4Operatörler Bölüm 1
Aritmetik OperatörlerMod Alma OperatörüKarşılaştırma OperatörleriTekrar - Basit MatematikBit Düzeyi Operatörleri7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND, OR ve NOT KapılarıXOR ve XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Verme
If İfadesiIf - ElseTekrar - Basit KarşılaştırıcıCase İfadesiCasex ve CasezTekrar - ALU Tasarımı2Veri Türleri
Wire TürüReg TürüTamsayı ve GerçelVektörlerDizilerParametrelerÖzet - Sinyalleri Tanımlama5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörTekrar - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüTekrar DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiTekrar - Döngü Kalıpları3Sayı Sistemi
İkili GösterimBoyutlu SayılarBoyutsuz SayılarNegatif SayılarÖzel X ve Z DeğerleriTekrar - Sayı Biçimleri6Modüller
Modül YapısıGiriş ve Çıkış PortlarıÇift Yönlü PortlarModül ÖrneklendirmeAda Göre Port EşlemeSıraya Göre Port EşlemeTekrar - Bir Modül Oluşturma9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiBloklayıcı AtamaBloklamayan AtamaTekrar - Always ve Initial Karşılaştırması15Trafik Işığı Denetleyicisi
Durumları TanımlamaDurum Makinesi MantığıKendi başına pratik yap: Online Verilog derleyicisi