Menu
Coddy logo textTech

Sonsuz Döngü

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

forever döngüsü bir kod bloğunu sürekli olarak, sonsuza kadar tekrarlar. Kendi kendine asla durmaz.

Bir forever döngüsü sonu olmadan sürekli olarak yürütülür. Testbench'lerde saat sinyalleri ve diğer sürekli sinyalleri üretmek için kullanışlıdır.

Sözdizimi:

forever begin
  // Sonsuza kadar tekrar eden kod
end

Basit Örnek

forever begin
  $display("This prints forever");
end

Bu durum sonsuza kadar yazdıracak ve simülasyonunuzu çökertecektir. Her zaman bir gecikme veya bir durdurma koşulu ekleyin.

Saat Sinyali Oluşturma (Yaygın Kullanım)

forever döngüsünün en yaygın kullanımı bir saat sinyali (clock) üretmektir:

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;   // Her 5 zaman biriminde değiştir
  end
end

Bu, tüm simülasyon boyunca çalışan bir `clk` oluşturur.

Disable ile Forever

Bir forever döngüsünü disable ifadesi kullanarak durdurabilirsiniz:

initial begin : clock_gen   // İsim burada eklendi
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end
initial begin
  #100;
  disable clock_gen;   // Şimdi bu çalışıyor
end

Forever vs Diğer Loops

LoopDurur mu?Ne Zaman Kullanılır
forEvet (sabit yinelemeden sonra)Bilinen repeats sayısı
whileEvet (koşul yanlış olduğunda)Bilinmeyen durma koşulu
repeatEvet (sabit yinelemeden sonra)Bilinen repeats sayısı
foreverHayır (asla)Sürekli sinyaller (clock)

Önemli Kurallar

KuralAçıklama
Bir gecikme içermelidir#10 veya @(posedge clk)
Gecikme olmadan simülasyon kilitlenirZaman ilerlemesi olmayan sonsuz döngü
Durdurmak için disable ile kullanınAksi takdirde simülasyon asla sona ermez
En iyi testbench'lerde kullanılırSentezlenemez
challenge icon

Görev

Ne yapılmalı:

Her 10 zaman biriminde bir durum değiştiren bir saat sinyali üretmek için eksik olan forever döngüsünü ekleyin.

Kendin dene

module forever_challenge;
  reg clk;
  
  initial begin
    clk = 0;
    // TODO: clk'yi her 10 zaman biriminde değiştirmek için forever döngüsü ekle
  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