Menu
Coddy logo textTech

Gecikmeler Nedir

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

Verilog'ta gecikmeler (delays), bir ifadenin ne zaman yürütüleceğini veya bir sinyalin ne zaman değişeceğini denetler. Gerçek donanım zamanlama davranışını modellemek için kullanılırlar.

Gecikmeler Sadece Neden Gereklidir

Gerçek donanımda sinyallerin kablolar ve mantık kapıları boyunca ilerlemesi zaman alır. Gecikmeler, bu zamanlama davranışını simüle etmenize olanak tanır.

  • Simülasyonda, gecikmeler olmadan, her şey 0 anında gerçekleşir
  • Gecikmeler olayları zamana yaymanızı sağlar
  • Saatler ve durum makineleri gibi zamanlamaya duyarlı tasarımları test etmeye yardımcı olurlar

Gecikme Türleri

Gecikme TürüAmaç
Gate DelaysMantar kapıları arasındaki gecikme
Assignment DelaysDeğer atama sırasındaki gecikme
Timescale DirectiveSimülasyon için zaman birimlerini ayarlar

Temel Sözdizimi

Bir gecikme (delay), # ve ardından bir sayı ile yazılır:

#10 clk = ~clk;   // 10 zaman birimi bekle, sonra saati değiştir
#5 a = b;         // 5 zaman birimi bekle, sonra a = b ata

# işaretinden sonraki sayı, beklenmesi gereken zaman birimi sayısıdır (time units).

Basit Örnek

initial begin
  a = 0;
  #10 a = 1;   // 10 zaman biriminden sonra, a 1 olur
  #5 a = 0;    // Başka 5 zaman biriminden sonra, a 0 olur
end

Zamanlama:

  • Time 0: a = 0
  • Time 10: a = 1
  • Time 15: a = 0

Always Bloklarında Delays

always #5 clk = ~clk;   // Her 5 zaman biriminde saati değiştir

Bu, sürekli bir saat sinyali oluşturur (clk değişkeninin önce bir initial bloğunda 0 olarak başlatıldığı varsayımıyla — aksi takdirde ~x ifadesi x olarak kalır).

Önemli Kurallar

KuralAçıklama
# sembolüGecikmeyi belirtir
# işaretinden sonraki sayıKaç zaman birimi bekleneceği
Gecikmeler kümülatiftir#10 ardından #20 toplam 30 bekler
SentezlenemezGecikmeler yalnızca simülasyon içindir
challenge icon

Görev

Ne yapılmalı:

Bu kodun 0, 10, 25 ve 40 zamanlarında mesaj basmasını sağlamak için eksik gecikmeleri (delays) ekleyin.

Kendin dene

module delay_challenge;
  
  initial begin
    $display("Time %0t: Start", $time);
    // TODO: 10 zamanına ulaşmak için gecikme ekle
    $display("Time %0t: After first delay", $time);
    // TODO: 25 zamanına ulaşmak için gecikme ekle
    $display("Time %0t: After second delay", $time);
    // TODO: 40 zamanına ulaşmak için gecikme ekle
    $display("Time %0t: End", $time);
    $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