For-Schleife
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 58 von 90.
Schleifen in Verilog ermöglichen es Ihnen, einen Codeblock mehrmals auszuführen. Sie sind besonders nützlich in Testbenches für das Erzeugen von sich wiederholenden Testmustern, das Initialisieren von Speicher und das Iterieren über Arrays. Im Gegensatz zu Hardwarebeschreibungen, die parallel ablaufen, werden Schleifen sequenziell ausgeführt, was sie ideal für Simulationen und Tests macht.
Die am häufigsten verwendete Schleife ist die <strong>for</strong>-Schleife, die eine bestimmte Anzahl von Malen wiederholt wird. Eine for-Schleife führt einen Codeblock wiederholt aus, mit einer Schleifenvariable, die sich bei jeder Iteration ändert. Sie steuern genau, wie oft sie ausgeführt wird.
Syntax:
for (initialization; condition; increment) begin
// Zu wiederholender Code
end| Teil | Funktion | Beispiel |
|---|---|---|
initialization | Setzt den Startwert | i = 0 |
condition | Wann gestoppt werden soll | i < 10 |
increment | Änderung bei jedem Durchlauf | i = i + 1 |
Einfaches Beispiel
integer i;
for (i = 0; i < 5; i = i + 1) begin
$display("i = %d", i);
endAusgabe:
i = 0
i = 1
i = 2
i = 3
i = 4Die Schleife wird 5 Mal durchlaufen (i = 0, 1, 2, 3, 4).
For-Schleife in Testbenches
For-Schleifen werden häufig verwendet, um alle Eingangskombinationen zu testen:
reg [3:0] test_value;
for (test_value = 0; test_value < 16; test_value = test_value + 1) begin
$display("test_value = %d", test_value);
endDies testet alle 16 möglichen Werte eines 4-Bit-Signals.
For-Schleife mit Arrays
reg [7:0] memory [0:9];
integer i;
initial begin
for (i = 0; i < 10; i = i + 1) begin
memory[i] = i * 8;
end
endDies initialisiert 10 Speicherstellen.
Wichtige Regeln
| Regel | Erklärung |
|---|---|
Schleifenvariable muss integer oder reg sein | Kann nicht wire sein |
Verwenden Sie begin/end für mehrere Anweisungen | Erforderlich für mehr als eine Zeile |
| Endlosschleifen vermeiden | Stellen Sie sicher, dass die Bedingung schließlich falsch wird |
| Am besten in Testbenches zu verwenden | Die meisten Schleifen sind nicht synthetisierbar |
Aufgabe
Was zu tun ist:
Füge die fehlende for-Schleife hinzu, um die Zahlen von 0 bis 3 auszugeben.
Spickzettel
Die for-Schleife in Verilog wiederholt einen Codeblock eine bestimmte Anzahl von Malen:
for (initialization; condition; increment) begin
// Zu wiederholender Code
endBeispiel für die Ausgabe von 0 bis 4:
integer i;
for (i = 0; i < 5; i = i + 1) begin
$display("i = %d", i);
endWichtige Regeln:
- Die Schleifenvariable muss
integeroderregsein (nichtwire) - Verwenden Sie
begin/endfür mehrere Anweisungen - Stellen Sie sicher, dass die Bedingung schließlich falsch wird, um Endlosschleifen zu vermeiden
- Schleifen werden am besten in Testbenches verwendet (meistens nicht synthetisierbar)
Probier es selbst
module for_challenge;
integer i;
initial begin
$display("Printing 0 to 3:");
// TODO: for-Schleife hinzufügen
// Initialisiere i = 0
// Schleife solange i < 4
// Inkrementiere i = i + 1
// Innerhalb der Schleife, i ausgeben
$finish;
end
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen