Menu
Coddy logo textTech

Atama Gecikmeleri

Coddy'nin Verilog Journey'sinin Temel Bilgiler 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 aldık. Şimdi, bir atama ifadesinin parçası olarak prosedürel bir blokta (örneğin initial veya always) içeride gerçekleşen gecikmeler olan atama gecikmelerini ele alıyoruz.

Bir atama gecikmesi, belirlenen bir süre bekler ve ardından atamayı gerçekleştirir. Gecikme, # sembolünün ardına ve atamanın önüne yerleştirilir.

Sözdizimi:

variable = #delay expression;

Genel bir gecikmenin (#10 a = b; geciktirip ardından atama yapar) aksine, atama gecikmesi a = #10 b;, o anda b'nin değerini alır, 10 zaman birimi bekler ve ardından bu değeri a'ya atar.

Atama Gecikmesi ve Genel Gecikme Karşılaştırması

 Genel GecikmeAtama Gecikmesi
Sözdizimi#10 a = b;a = #10 b;
Değer ne zaman okunur?Atama sırasında (gecikmeden sonra)Hemen (gecikmeden önce)
Hangi değer atanır?O andaki b değeri0 anındaki (veya okuma anındaki) b değeri
Değer ne zaman atanır?Gecikmeden sonraGecikmeden sonra

Ö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

Burada ikisi de aynı sonucu verir. Fark, gecikme sırasında b değiştiğinde ortaya çıkar.

Temel Fark Örneği

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 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. zamanda: a1, b = 1 değerini okur
  • 5. zamanda: b, 0 olarak değişir (a1 hâlâ beklerken)
  • 10. zamanda: a1'e 0 değil, 0. zamanda okunan değer olan 1 atanır

Ayrı bir blokta genel bir gecikme olan #10 a2 = b; kullanıldığında, b 10. zamanda okunur (değeri 0).

Önemli Kurallar

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

Görev

Yapılacaklar:

Eksik atama gecikmesini ekleyerek a değerini 15 zaman birimi sonra b'nin değerini alacak, ancak b'yi hemen okuyacak şekilde düzenleyin.

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.

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

Kendi başına pratik yap: Online Verilog derleyicisi