If Statement
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 52 von 90.
Die if-Anweisung ist ein Entscheidungsblock, der Code nur dann ausführt, wenn eine Bedingung wahr ist. Die if-Anweisung prüft eine Bedingung.
Wenn die condition true (1) ist, executes der darin enthaltene Code. Wenn die condition false (0) ist, wird der Code übersprungen.
Syntax:
if (condition) begin
// Code wird ausgeführt, wenn die Bedingung wahr ist
endEinfaches Beispiel
if (reset) begin
count = 0;
endIn diesem Beispiel:
beginundendwerden verwendet, um den Start und das Ende des Codeblocks zu markieren
- Wenn
reset1 (wahr) ist, executes der Code innerhalb vonbeginundend→countwird 0 - Wenn
reset0 (falsch) ist, wird der darin enthaltene Code übersprungen → nichts passiert
begin und end funktionieren wie geschweifte Klammern { } in anderen Programmiersprachen. Sie gruppieren Anweisungen, damit Verilog weiß, welcher Code zur if-Bedingung gehört. Auch wenn es hier nur eine Anweisung gibt, ist die Verwendung von begin und end weiterhin eine gute Praxis für Konsistenz.
If-Anweisung im Always-Block
always @(posedge clk) begin
if (reset)
count <= 0;
endHinweis: Für eine einzelne Anweisung sind begin und end optional. Zum Beispiel wird im obigen always-Block nach if kein begin/end benötigt, da er nur eine statement enthält.
Die Bedingung kann jeder Ausdruck sein
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
endWichtige Regeln
| Regel | Erklärung |
|---|---|
| Condition kann jeder Ausdruck sein | Werte ungleich null (und bekannte Werte) werden als wahr behandelt, null als falsch |
begin / end für mehrere Anweisungen erforderlich | Wie { } in anderen Sprachen |
Ohne begin/end folgt nur eine Anweisung | Nur die nächste Zeile |
Aufgabe
Was zu tun ist:
- Füge die fehlende
if-Anweisung hinzu, damit dies funktioniert.
- Wenn
enablegleich1ist, sollteoutgleicha & bsein. - Wenn
enablegleich0ist, sollteout0bleiben (sich nicht ändern).
Der Ausgangscode initialisiert out = 0 und testet beide Fälle.
Probier es selbst
module if_challenge;
reg a, b, enable;
reg out = 0;
initial begin
a = 1;
b = 1;
// Testfall 1: enable = 1
enable = 1;
// TODO: if-Anweisung hinzufügen (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// Testfall 2: enable = 0
enable = 0;
out = 0;
// TODO: out sollte 0 bleiben
$display("enable=0: out = %d (should be 0)", out);
$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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operators 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 LogicÜbe selbstständig: Online-Verilog-Compiler