For Loop
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 58 / 90.
Verilog'daki döngüler, bir kod bloğunu birden çok kez çalıştırmanıza olanak tanır. Tekrarlayan test desenleri oluşturmak, memory'yi başlatmak ve diziler üzerinde yineleme yapmak için özellikle testbench'lerde kullanışlıdır. Paralel olarak çalışan donanım açıklamalarının aksine, döngüler sırayla yürütülür; bu da onları simülasyon ve test için ideal kılar.
En yaygın kullanılan döngü, belirli bir sayıda tekrarlanan <strong>for</strong> döngüsüdür. Bir for döngüsü, her yinelemede değişen bir döngü değişkeniyle birlikte bir kod bloğunu tekrar tekrar çalıştırır. Tam olarak kaç kez çalışacağını siz kontrol edersiniz.
Sözdizimi:
for (initialization; condition; increment) begin
// Tekrarlanacak kod
end| Parça | Ne Yapar | Örnek |
|---|---|---|
initialization | Başlangıç değerini belirler | i = 0 |
condition | Ne zaman duracağını belirler | i < 10 |
increment | Her loop'ta değişir | i = i + 1 |
Basit Örnek
integer i;
for (i = 0; i < 5; i = i + 1) begin
$display("i = %d", i);
endÇıktı:
i = 0
i = 1
i = 2
i = 3
i = 4loop 5 kez çalışır (i = 0, 1, 2, 3, 4).
Testbench'lerde For Döngüsü
For döngüleri, tüm giriş kombinasyonlarını test etmek için yaygın olarak kullanılır:
integer test_value;
for (test_value = 0; test_value < 16; test_value = test_value + 1) begin
$display("test_value = %d", test_value);
endBu, 4 bitlik bir sinyalin olası 16 değerinin tümünü test eder.
Dizilerle For Döngüsü
reg [7:0] memory [0:9];
integer i;
initial begin
for (i = 0; i < 10; i = i + 1) begin
memory[i] = i * 8;
end
endBu, 10 bellek konumunu başlatır.
Önemli Kurallar
| Kural | Açıklama |
|---|---|
Loop değişkeni integer veya reg olmalıdır | wire olamaz |
Birden fazla ifade için begin/end kullanın | Birden fazla satır için gereklidir |
| Sonsuz Loop'lardan kaçının | condition değerinin sonunda false olduğundan emin olun |
| En iyi testbench'lerde kullanılır | Loop'ların çoğu sentezlenebilir değildir |
Görev
Yapılacaklar:
0'dan 3'e kadar olan sayıları yazdırmak için eksik for döngüsünü ekleyin.
Kendin dene
module for_challenge;
integer i;
initial begin
$display("Printing 0 to 3:");
// TODO: for döngüsü ekle
// i = 0 olarak başlat
// i < 4 iken döngü yap
// i = i + 1 olarak artır
// İçeride şununla yazdır: $display("i = %d", i);
$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
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicKendi başına pratik yap: Online Verilog derleyicisi