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
endBasit Örnek
forever begin
$display("This prints forever");
endBu 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
endBu, 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
endinitial begin
#100;
disable clock_gen; // Artık bu çalışıyor
endForever ve Diğer Döngüler Karşılaştırması
| Döngü | Durur mu? | Ne Zaman Kullanılır |
|---|---|---|
for | Evet (sabit yinelemeden sonra) | Bilinen tekrar sayısı |
while | Evet (koşul yanlış olduğunda) | Bilinmeyen durma koşulu |
repeat | Evet (sabit yinelemeden sonra) | Bilinen tekrar sayısı |
forever | Hayır (asla) | Sürekli sinyaller (saat) |
Önemli Kurallar
| Kural | Açıklama |
|---|---|
| Bir gecikme içermelidir | #10 veya @(posedge clk) |
| Gecikme olmadan simülasyon donar | Zaman ilerlemesi olmayan sonsuz döngü |
Durdurmak için disable ile kullanın | Yoksa simülasyon asla bitmez |
| En iyi testbench'lerde kullanılır | Sentezlenemez |
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;
endTemel kurallar:
- Bir gecikme (
#10veya@(posedge clk)) içermelidir, aksi takdirde simülasyon kilitlenir - Durdurmak için
disablekullanı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
endmoduleBu 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
4Operatörler Bölüm 1
Aritmetik OperatörlerModül OperatörüKarşılaştırma OperatörleriÖzet - Basit MatematikBitsel Operatörler7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND OR NOT KapılarıXOR XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Yapıları
If İfadesiIf - ElseÖzet - Basit KarşılaştırıcıCase İfadesiCasex ve CasezÖzet - ALU Tasarımı5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörÖzet - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüRepeat DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiÖzet - Döngü Kalıpları3Sayı Sistemleri
İkilik GösterimBoyutlandırılmış SayılarBoyutlandırılmamış SayılarNegatif SayılarÖzel Değerler X ve ZÖzet - Sayı Formatları6Modüller
Modül YapısıGiriş ve Çıkış PortlarıInout PortlarıModül Örneklendirmeİsme Göre Port EşlemeSıraya Göre Port EşlemeÖzet - Bir Modül Oluşturun9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiEngelleyici AtamaEngelleyici Olmayan AtamaÖzet - Always vs Initial15Trafik Işığı Kontrolcüsü
Durumları TanımlamaDurum Makinesi Mantığı