Menu
Coddy logo textTech

What Are Delays

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ın zamanlama davranışını modellemek için kullanılırlar.

Gecikmeler Neden Gereklidir

Gerçek donanımda sinyallerin kablolar ve kapılardan geçerek ilerlemesi zaman alır. Gecikmeler, bu zamanlama davranışını simüle etmenizi sağlar.

  • Simülasyonda, delay olmadan her şey time 0'da gerçekleşir
  • Gecikmeler, olayları time boyunca aralıklı hâle getirmenizi sağlar
  • clock 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ındaki gecikme
Atama GecikmeleriDeğerler atanırken oluşan gecikme
Timescale YönergesiSimülasyon için zaman birimlerini ayarlar

Temel Sözdizimi

Bir gecikme, ardından bir sayı gelen # ile yazılır:

#10 clk = ~clk;   // 10 zaman birimi bekle, sonra saati tersine çevir
#5 a = b;         // 5 zaman birimi bekle, sonra a = b ata

# işaretinden sonraki sayı, beklenecek time units sayısıdır.

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 Gecikmeler

always #5 clk = ~clk;   // Her 5 zaman biriminde saati tersine çevir

Bu, sürekli bir saat sinyali oluşturur (clk'nin bir initial bloğunda first olarak 0'a başlatıldığı varsayılır. Aksi takdirde ~x, x olarak kalır).

Önemli Kurallar

KuralAçıklama
# sembolüBir gecikmeyi belirtir
# işaretinden sonraki sayıKaç zaman birimi bekleneceğini belirtir
Gecikmeler birikimlidir#10 ardından #20 toplam 30 bekler
Sentezlenebilir değildirGecikmeler yalnızca simülasyon içindir
challenge icon

Görev

Yapılacaklar:

Bu kodun iletileri 0, 10, 25 ve 40 zamanlarında yazdırmasını sağlamak için eksik gecikmeleri 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

Kendi başına pratik yap: Online Verilog derleyicisi