While Döngüsü
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 59 / 90.
while döngüsü, bir koşul doğru olduğu sürece bir kod bloğunu tekrarlar. for döngüsünün aksine, yerleşik bir sayacı yoktur — döngü değişkenini kendiniz güncellemelisiniz.
Bir while döngüsü, her yinelemeden önce bir koşulu kontrol eder. Koşul doğruysa döngü çalışır. Yanlışsa döngü durur.
Sözdizimi:
while (condition) begin
// Tekrarlanacak kod
endBasit Örnek
integer i = 0;
while (i < 5) begin
$display("i = %d", i);
i = i + 1;
endÇıktı:
i = 0
i = 1
i = 2
i = 3
i = 4Döngü, i < 5 olduğu sürece çalışır.
While ve For Döngüsü
| For Döngüsü | While Döngüsü | |
|---|---|---|
| Sayaç | Yerleşik | Siz yönetirsiniz |
| Ne zaman kullanılır | Yineleme sayısı bilindiğinde | Döngünün ne zaman duracağı bilinmediğinde |
| Sözdizimi | for (i=0; i<5; i=i+1) | while (i < 5) |
Testbench'lerde While Döngüsü
While döngüleri, tam olarak kaç yinelemeye ihtiyacınız olduğunu bilmediğiniz durumlarda kullanışlıdır:
integer i = 0;
while (i < 16) begin
$display("Testing value %d", i);
i = i + 1;
endBelirli Bir Değeri Bulma
integer i = 0;
reg [7:0] data;
while (data[i] != 1) begin
i = i + 1;
end
$display("First 1 found at position %d", i);Önemli Kurallar
| Kural | Açıklama |
|---|---|
| Koşul yanlış (false) olmalıdır | Aksi takdirde sonsuz döngü oluşur |
| Döngü değişkenini içeride güncelleyin | Yoksa döngü asla bitmez |
Döngü değişkeni integer olmalıdır | reg olamaz |
Birden fazla ifade için begin/end kullanın | Birden fazla satır için gereklidir |
Görev
Yapılacaklar:
0'dan 2'ye kadar olan sayıları yazdırmak için eksik olan while döngüsünü ekleyin.
Kopya kağıdı
while döngüsü, bir koşul doğru olduğu sürece bir kod bloğunu tekrarlar. Döngü değişkenini manuel olarak güncellemeniz gerekir.
integer i = 0;
while (i < 5) begin
$display("i = %d", i);
i = i + 1;
endTemel kurallar:
- Döngü değişkeni
integerolmalıdır (regdeğil) - Sonsuz döngülerden kaçınmak için döngü değişkenini her zaman döngü içinde güncelleyin
- Birden fazla ifade için
begin/endkullanın
While ve For Karşılaştırması: Yineleme sayısı bilindiğinde for kullanın; durma koşulu dinamik olduğunda (örneğin, bir değer ararken) while kullanın.
// Finding first set bit
while (data[i] != 1) begin
i = i + 1;
endKendin dene
module while_challenge;
integer i;
initial begin
i = 0;
$display("Printing 0 to 2:");
// YAPILACAK: while döngüsü ekle
// i < 3 olduğu sürece döngüyü çalıştır
// İçeride, i değerini yazdır
// i değerini 1 artır
$finish;
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ığı