Menu
Coddy logo textTech

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ümAnlamı
assigncontinuous assignment işlemini başlatan anahtar sözcük
wire_nameSürülen wire (reg olamaz)
expressionwire'ı 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=1

a 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
endmodule

Tü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
challenge icon

Görev

Ne yapılmalı:

  1. z'yi x 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
  

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