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_asinyalini alır - Port
in2,input_bsinyalini alır - Port
result,output_ysinyalini 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.
Görev
port mapping by name kullanarak eksik port bağlantılarını ekleyerek örneklemeyi tamamlayın.
Yapılacaklar:
- Port
clk'yiclock_signalsinyaline bağlayın - Port
data_in'iinput_datasinyaline bağlayın - Port
data_out'uoutput_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.
Temeller bölümündeki tüm dersler
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicKendi başına pratik yap: Online Verilog derleyicisi