Menu
Coddy logo textTech

Gecikmeler Nedir

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

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

Gecikmelere Neden İhtiyaç Duyulur

Gerçek donanımda sinyallerin kablolar ve kapılar üzerinden iletilmesi 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ıza olanak tanır
  • Saatler ve durum makineleri gibi zamanlamaya duyarlı tasarımları test etmeye yardımcı olurlar

Gecikme Türleri

Gecikme TürüAmaç
Kapı GecikmeleriMantık kapıları üzerinden gecikme
Atama GecikmeleriDeğer atarken oluşan gecikme
Zaman Ölçeği YönergesiSimülasyon için zaman birimlerini ayarlar

Temel Sözdizimi

Gecikme, # işaretinden sonra bir sayı gelmesiyle yazılır:

#10 clk = ~clk;   // 10 zaman birimi bekle, ardından saati tersle
#5 a = b;         // 5 zaman birimi bekle, ardından a = b atamasını yap

# işaretinden sonraki sayı, beklenecek zaman birimi sayısıdır.

Basit Örnek

initial begin
  a = 0;
  #10 a = 1;   // 10 zaman birimi sonra, a 1 olur
  #5 a = 0;    // Bir 5 zaman birimi daha sonra, a 0 olur
end

Zamanlama:

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

Always Bloklarında Gecikmeler

always #5 clk = ~clk;   // Saati her 5 zaman biriminde bir tersle

Bu, sürekli bir saat sinyali oluşturur.

Önemli Kurallar

KuralAçıklama
# sembolüBir gecikmeyi işaretler
# 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 yapmalı:

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

Kopya kağıdı

Verilog'da, gecikmeler ifadelerin ne zaman yürütüleceğini kontrol etmek için # ve ardından gelen zaman birimlerini kullanır:

#10 a = 1;   // 10 zaman birimi bekle, sonra ata

Gecikmeler birikimlidir — her gecikme mevcut zamana eklenir:

initial begin
  a = 0;      // Zaman 0
  #10 a = 1;  // Zaman 10
  #5  a = 0;  // Zaman 15
end

Saat sinyalleri üretmek için always bloklarında kullanın:

always #5 clk = ~clk;  // Her 5 birimde bir tersle

Not: Gecikmeler yalnızca simülasyon içindir — sentezlenemez.

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