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 olmaksızın tekrar tekrar yürütülür. Testbench'lerde saatler ve diğer sürekli sinyaller oluşturmak için kullanışlıdır.

Sözdizimi:

forever begin
  // Sonsuza kadar tekrarlanan kod
end

Basit Örnek

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

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

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

forever ifadesinin en yaygın kullanımı bir saat sinyali (clock) oluşturmaktır:

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;   // Her 5 zaman biriminde bir tersle
  end
end

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

Disable ile Forever

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

initial begin : clock_gen   // Name added here
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end
initial begin
  #100;
  disable clock_gen;   // Artık bu çalışıyor
end

Forever ve Diğer Döngüler Karşılaştırması

DöngüDurur mu?Ne Zaman Kullanılır
forEvet (sabit yinelemeden sonra)Bilinen tekrar sayısı
whileEvet (koşul yanlış olduğunda)Bilinmeyen durma koşulu
repeatEvet (sabit yinelemeden sonra)Bilinen tekrar sayısı
foreverHayır (asla)Sürekli sinyaller (saat)

Önemli Kurallar

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

Görev

Ne yapmalı:

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

Kopya kağıdı

forever döngüsü, bir kod bloğunu durmaksızın sürekli olarak tekrarlar. Simülasyonun kilitlenmesini önlemek için her zaman bir gecikme ekleyin.

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk; // Toggle every 5 time units
  end
end

İsimlendirilmiş bir blok ile disable kullanarak bir forever döngüsünü durdurun:

initial begin : clock_gen
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end

initial begin
  #100;
  disable clock_gen;
end

Temel kurallar:

  • Bir gecikme (#10 veya @(posedge clk)) içermelidir, aksi takdirde simülasyon kilitlenir
  • Durdurmak için disable kullanın, aksi takdirde simülasyon asla bitmez
  • Sentezlenemez — yalnızca testbench kullanımı içindir

Kendin dene

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