🔁 SystemVerilog Döngüler ve Kontrol Akışı Yapıları #
SystemVerilog, döngü yapıları ve kontrol akışı mekanizmaları açısından oldukça zengindir. Bu yapılar, hem RTL modellemesi hem de testbench geliştirmeleri için esneklik ve okunabilirlik sağlar. Söz dizimi C diline benzer, ancak donanım modelleme kurallarına dikkat edilmelidir.
🔄 SystemVerilog’ta Döngü Türleri #
1. for
Döngüsü
#
C stilinde klasik döngü yapısıdır.
for (int i = 0; i < 10; i++) begin
$display("i = %0d", i);
end
- İterasyon (tekrar) sayısı biliniyorsa uygundur
- Sayaç değişkeni içeride ya da dışarıda tanımlanabilir
2. while
Döngüsü
#
Koşul doğru olduğu sürece döngü devam eder.
int i = 0;
while (i < 5) begin
$display("i = %0d", i);
i++;
end
- Sonsuz döngü riski nedeniyle RTL’de dikkatle kullanılmalıdır
3. do...while
Döngüsü
#
Koşulu döngü sonunda kontrol eder, en az bir kez çalışır.
int i = 0;
do begin
$display("i = %0d", i);
i++;
end while (i < 3);
- En az bir kez döngü çalıştırmak istenen durumlar için uygundur
4. foreach
Döngüsü
#
Dizi elemanları üzerinde kolay gezinmeyi sağlar.
int arr[5] = '{0, 1, 2, 3, 4};
foreach (arr[i]) begin
$display("arr[%0d] = %0d", i, arr[i]);
end
- Array üzerinden daha sade ve okunabilir şekilde geçiş yapar
- Özellikle testbenchlerde çok kullanılır
🧭 Kontrol Akışı Komutları #
break
#
İçinde bulunduğu döngüden hemen çıkmak için kullanılır.
for (int i = 0; i < 10; i++) begin
if (i == 5) break;
$display("i = %0d", i);
end
💡 Belirli bir durumda döngüyü bitirmek için kullanılır.
continue
#
Bulunduğu iterasyonu atlar, döngünün bir sonraki turuna geçer.
for (int i = 0; i < 5; i++) begin
if (i == 2) continue;
$display("i = %0d", i);
end
💡 Belirli durumları es geçmek istediğinizde faydalıdır.
return
#
Fonksiyon veya task içinden erken çıkmak için kullanılır.
function int square(int x);
if (x < 0)
return 0;
return x * x;
endfunction
- Döngü değil, fonksiyon ya da task çıkışı içindir
⚠️ Donanım Tasarımı Uyarısı #
- RTL tasarımda sonsuz
while
veyado...while
döngülerinden kaçının break
vecontinue
sentezlenemez, donanımda kullanılmaz- Bu yapılar genellikle testbench, UVM ve davranışsal modellerde tercih edilir
✅ Özet Tablosu #
Anahtar Sözcük | Amacı | Sentezlenebilir mi? | Yaygın Kullanım |
---|---|---|---|
for |
Sayaçla döngü | ✅ (sınırlıysa) | Sayaçlı iterasyon |
while |
Koşullu döngü | ⚠️ (RTL’de dikkat) | Testbench kontrolü |
do...while |
En az bir kez çalışan döngü | ❌ | Davranışsal modelleme |
foreach |
Dizi elemanlarında gezinti | ❌ | Testbench dizi erişimi |
break |
Döngüyü anında sonlandırır | ❌ | Erken çıkış |
continue |
İterasyonu atlar, devam eder | ❌ | Bazı değerleri atlama |
return |
Fonksiyon veya task’tan çıkış | ✅ | Koşullu fonksiyon dönüşü |
SystemVerilog’un bu kontrol akışı yapıları, özellikle testbenchlerde esnek ve okunabilir yapılar kurmayı sağlar. RTL’de ise sınırlı ve deterministik döngüler kullanmak kritik önemdedir.