Continuous Assignment
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 37 / 90.
Donanımda bir bağlantı, bir devredeki iki noktayı birbirine bağlayan fiziksel bir wire'dır. wire yerine yerleştirildiğinde bağlantı kalıcıdır ve always etkindir. Bir end değişirse diğer end hemen değişir.
Verilog'da bu davranışı modellemek için bir yola ihtiyacımız var. Bir değeri bir wire üzerine aktarmak ve onu sonsuza dek bağlı tutmak istiyoruz. Bunu yapma sürecine continuous assignment adı verilir.
Continuous assignment, bir wire ile bir expression arasında kalıcı bir bağlantı oluşturmak için assign anahtar sözcüğünü kullanır. wire, tıpkı fiziksel bir wire gibi, expression değerini continuously alır.
Bunu bir değeri bir kez yazmaktan ziyade bir wire lehimlemek olarak düşün.
Sözdizimi
assign wire_name = expression;| Bölüm | Anlamı |
|---|---|
assign | continuous assignment işlemini başlatan anahtar sözcük |
wire_name | Sürülen wire (reg olamaz) |
expression | wire'ı süren değer |
Basit Örnek
wire out;
assign out = a & b;Bu şu anlama gelir: out is always equal to a AND b. a veya b değiştiğinde out hemen değişir.
Nasıl Çalışır
Bir değeri depolayan reg'in aksine, sürekli atama içeren bir wire sürekli olarak güncellenir:
module continuous_demo;
reg a, b;
wire c;
assign c = a & b; // c her zaman a AND b'yi takip eder
initial begin
a = 0; b = 0;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=0
a = 1;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=0 (1&0=0)
b = 1;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=1 (1&1=1)
$finish;
end
endmoduleÇıktı:
a=0, b=0, c=0
a=1, b=0, c=0
a=1, b=1, c=1a veya b her değiştiğinde c otomatik olarak güncellenir.
Birden Çok Atama
Bir modülde birden çok continuous atama olabilir:
module multiple_assign (
input a, b, c,
output x, y
);
assign x = a & b;
assign y = x | c; // y, x'e bağlıdır
endmoduleTüm atamalar paralel olarak, continuously çalışır.
Yaygın Kullanımlar
continuous assignment'lar şunlar için kullanılır:
- Basit kombinasyonel mantık (AND, OR, XOR)
- wire'ları birbirine bağlama
- Üç durumlu arabellekler oluşturma
- Kombinasyonel expression'lar ile output'ları sürme
Görev
Ne yapılmalı:
-
z'yix AND y'ye equal yapan missing continuous assignment'ı Add.
Kendin dene
module continuous_challenge (
input x,
input y,
output z
);
// TODO: z'yi x AND y'ye eşit yapan eksik continuous assignment'ı 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