Menu
Coddy logo textTech

If-Anweisung

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 Bedingung wahr (1) ist, wird der darin enthaltene Code ausgeführt. Wenn die Bedingung falsch (0) ist, wird der Code übersprungen.

Syntax:

if (condition) begin
  // Code wird ausgeführt, wenn die Bedingung wahr ist
end

Einfaches Beispiel

if (reset) begin
  count = 0;
end

In diesem Beispiel:

  • begin und end werden verwendet, um den Anfang und das Ende des Codeblocks zu markieren
  • Wenn reset 1 (true) ist, wird der Code innerhalb von begin und end ausgeführt → count wird 0
  • Wenn reset 0 (false) ist, wird der Code darin ü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 hier nur eine Anweisung steht, ist die Verwendung von begin und end aus Gründen der Konsistenz dennoch eine gute Praxis.

If-Anweisung im Always-Block

always @(posedge clk) begin
  if (reset)
    count <= 0;
end

Hinweis: Für eine einzelne Anweisung sind begin und end optional. Zum Beispiel ist im obigen always-Block kein begin/end nach if erforderlich, da er nur eine Anweisung enthält.

Bedingung kann ein beliebiger Ausdruck sein

if (a > b) begin
  max = a;
end

if (a && b) begin
  out = 1;
end

if (data == 8'hFF) begin
  match = 1;
end

Wichtige Regeln

RegelErklärung
Bedingung muss ein einzelnes Bit seinOder ein Ausdruck, der zu 0 oder 1 ausgewertet wird
begin / end für mehrere Anweisungen erforderlichWie { } in anderen Sprachen
Ohne begin/end folgt nur eine AnweisungNur die nächste Zeile
challenge icon

Aufgabe

Was zu tun ist:

  1. Fügen Sie die fehlende if-Anweisung hinzu, damit dies funktioniert.
  • Wenn enable den Wert 1 hat, sollte out gleich a & b sein.
  • Wenn enable den Wert 0 hat, sollte out bei 0 bleiben (sich nicht ändern).

Der Startcode initialisiert out = 0 und testet beide Fälle.

Spickzettel

Die if-Anweisung führt Code nur aus, wenn eine Bedingung wahr (1) ist, und überspringt ihn, wenn sie falsch (0) ist.

if (condition) begin
  // wird ausgeführt, wenn die Bedingung wahr ist
end

Für eine einzelne Anweisung sind begin/end optional:

always @(posedge clk) begin
  if (reset)
    count <= 0;
end

Bedingungen können jeder Ausdruck sein, der zu 0 oder 1 ausgewertet wird:

if (a > b) begin max = a; end
if (a && b) begin out = 1; end
if (data == 8'hFF) begin match = 1; end

Wichtige Regeln:

  • Verwenden Sie begin/end, um mehrere Anweisungen zu gruppieren (wie { } in anderen Sprachen)
  • Ohne begin/end gehört nur die unmittelbar folgende Zeile zur if-Anweisung

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
endmodule
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen