Menu
Coddy logo textTech

Sürekli Atama

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 kablodur. Kablo yerine yerleştirildikten sonra bağlantı kalıcıdır ve her zaman aktiftir. Bir uç değişirse, diğer uç derhal değişir.

Verilog'ta bu davranışı modellemek için bir yola ihtiyacımız var. Bir değeri bir wire üzerine aktarmak ve onu sonsuza kadar bağlı tutmak istiyoruz. Bu işlemi yapma sürecine continuous assignment denir.

Sürekli atama (continuous assignment), bir wire ile bir ifade (expression) arasında kalıcı bir bağlantı oluşturmak için assign anahtar sözcüğünü kullanır. Tıpkı fiziksel bir kabloda olduğu gibi, wire ifadenin değerini sürekli olarak alır.

Bunu tek bir kez değer yazmak yerine bir kablo lehimlemek gibi düşünün.

Sözdizimi

assign wire_name = expression;
BölümAnlam
assigncontinuous assignment başlatan anahtar kelime
wire_nameSürülen wire (reg olamaz)
expressionwire'ı süren değer

Basit Örnek

wire out;
assign out = a & b;

Bunun anlamı şudur: out, a AND b ifadesine always equal olur. a veya b ne zaman değişirse, out hemen değişir.

Nasıl Çalışır

Bir değeri depolayan reg yapısının aksine, continuous assignment yapılan bir wire sürekli olarak update edilir:

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

Output:

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.

Çoklu Assignment'lar

Bir module içinde birden fazla continuous assignment bulunabilir:

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 assignment'lar paralel ve continuous olarak çalışır.

Yaygın Kullanımlar

Sürekli atamalar (`continuous` `assignment`) şunlar için kullanılır:

  • Basit kombinasyonel mantık (AND, OR, XOR)
  • Kabloları (`wire`) birbirine bağlama
  • Üç durumlu (tri-state) tamponlar oluşturma
  • Kombinasyonel ifadelerden (`expression`) çıkışları (`output`) sürme
challenge icon

Görev

Yapılacaklar:

  1. z değişkenini x AND y ile equal yapan eksik continuous assignment'ı ekleyin.

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