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 condition true (1) ist, executes der Code darin. Wenn die condition false (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 Start 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. Obwohl hier nur eine Anweisung steht, ist die Verwendung von begin und end aus Gründen der Konsistenz dennoch eine gute Praxis.

If-Anweisung in Always-Block

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

Hinweis: Für ein einzelnes statement sind begin und end optional. Beispielweise wird im always-Block oben kein begin/end nach if benötigt, da er nur ein statement hat.

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
condition kann jeder beliebige Ausdruck seinWerte ungleich null (und bekannte Werte) werden als true behandelt, null als false
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üge die fehlende if-Anweisung hinzu, damit dies funktioniert.
  • Wenn enable 1 ist, sollte out gleich a & b sein
  • Wenn enable 0 ist, sollte out 0 bleiben (sich nicht ändern)

Der Startcode 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
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