Menu
Coddy logo textTech

Sürekli Atama

Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 37 / 90.

Donanımda bağlantı, bir devredeki iki noktayı birbirine bağlayan fiziksel bir teldir. Tel yerine yerleştirildiğinde bağlantı kalıcıdır ve her zaman etkindir. Uçlardan biri değişirse diğer uç da hemen değişir.

Verilog'da bu davranışı modellemek için bir yola ihtiyacımız var. Bir değeri bir kabloya aktarmak ve onu sonsuza kadar bağlı tutmak istiyoruz. Bunu yapma sürecine sürekli atama denir.

Sürekli atama, bir tel ile ifade arasında kalıcı bir bağlantı oluşturmak için assign anahtar sözcüğünü kullanır. Tel, tıpkı fiziksel bir tel gibi ifadenin değerini sürekli olarak alır.

Bunu, bir değeri bir kez yazmaktan ziyade bir kabloyu lehimlemek gibi düşün.

Sözdizimi

assign wire_name = expression;
BölümAnlamı
assignSürekli atamayı başlatan anahtar kelime
wire_nameSürülen kablo (reg olamaz)
expressionKabloyu süren değer

Basit Örnek

wire out;
assign out = a & b;

Bu şu anlama gelir: out her zaman a AND b'ye eşittir. 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 Fazla Atama

Bir modülde birden fazla sürekli atama yapabilirsiniz:

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 sürekli çalışır.

Yaygın Kullanımlar

Sürekli atamalar şu amaçlarla kullanılır:

  • Basit kombinasyonel mantık (AND, OR, XOR)
  • Kabloları birbirine bağlama
  • Üç durumlu arabellekler oluşturma
  • Kombinasyonel ifadelerden çıkışları sürme
challenge icon

Görev

Yapılacaklar:

  1. z'yi x AND y'ye eşit yapan eksik sürekli atamayı 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.

Temel Bilgiler bölümündeki tüm dersler

Kendi başına pratik yap: Online Verilog derleyicisi