Menu
Coddy logo textTech

Atama Gecikmeleri

Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 69 / 90.

Önceki derslerde genel gecikmeleri (#10 a = b;) ve kapı gecikmelerini (and #5 (out, a, b);) ele almıştık. Şimdi ise bir atama ifadesinin parçası olarak bir prosedürel bloğun (initial veya always gibi) içinde gerçekleşen gecikmeler olan atama gecikmelerini ele alıyoruz.

Bir atama gecikmesi (assignment delay) belirtilen bir süre boyunca bekler, ardından atamayı gerçekleştirir. Gecikme, # simgesinden sonra ve atamadan önce yerleştirilir.

Sözdizimi:

variable = #delay expression;

Genel bir delay #10 a = b; (delay sonrasında assign) aksine, bir assignment delay a = #10 b; o andaki b değerini alır, 10 time units waits, ardından bunu a'ya assigns eder.

Assignment Delay vs General Delay

 General DelayAssignment Delay
Syntax#10 a = b;a = #10 b;
When is value read?At time of assignment (after delay)Immediately (before delay)
What value is assigned?Value of b at that momentValue of b at time 0 (or read time)
When is value assigned?After delayAfter delay

Örnek: Fark

initial begin
  b = 1;
  #5 b = 0;
  
  // Genel gecikme
  #10 a1 = b;     // 10 bekler, sonra b'yi okur (b=0) → a1=0
  
  // Atama gecikmesi
  a2 = #10 b;     // b'yi şimdi okur (b=0), 10 bekler, sonra atar → a2=0
end

Her ikisi de burada aynı result sonucunu verir. Fark, delay during boyunca b changes olduğunda ortaya çıkar.

Key Difference Example

To show b changing during the delay, we need two separate initial blocks that run in parallel:

initial begin
  b = 1;
  a1 = #10 b;     // Zaman 0'da b=1'i okur, zaman 10'da a1=1 atar
end

initial begin
  #5 b = 0;       // Zaman 5'te b'yi 0 yapar (gecikme sırasında)
end
  • 0 anında: a1, b = 1 değerini okur
  • 5 anında: b değeri 0 olarak değişir (a1 hala beklerken)
  • 10 anında: a1 değişkenine 0 değil, 1 (0 anında okunan değer) atanır

Ayrı bir bloktaki genel #10 a2 = b; gecikmesi ile b, 10 anında okunurdu (0 değeri).

Önemli Kurallar

KuralAçıklama
= işareti # işaretinden önce gelira #10 = b; değil a = #10 b;
Değer hemen okunurSağ taraf anında değerlendirilir
Atama gecikmeden sonra gerçekleşirSol taraf değeri daha sonra alır
Yalnızca prosedürel bloklar içindirinitial veya always içinde kullanılır
challenge icon

Görev

Ne yapılmalı:

Eksik assignment delay değerini ekleyin; böylece a, 15 time birimi after b değerini gets etsin, ancak b değerini hemen reads yapsın.

Kendin dene

module assignment_challenge;
  reg a, b;
  
  // Gecikme sırasında b'yi değiştirmek için ayrı blok
  initial begin
    b = 1;
    // TODO: Atama gecikmesi ekle
    // a, 15 zaman birimi sonra b'yi almalı
    // b'yi şimdi oku, gecikmeden sonra ata

  end
  
  initial begin
    #5 b = 0;      // Gecikme sırasında b'yi değiştirir
    #20 $display("Time %0t: a = %b", $time, a);
    $finish;
  end
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