Menu
Coddy logo textTech

Instrukcja if

Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 52 z 90.

Instrukcja if to blok podejmujący decyzje, który wykonuje kod tylko wtedy, gdy warunek jest prawdziwy. Instrukcja if sprawdza warunek.

Jeśli warunek jest true (1), kod wewnątrz zostaje wykonany. Jeśli warunek jest false (0), kod jest pomijany.

Składnia:

if (condition) begin
  // Kod wykonuje się, gdy condition ma wartość true
end

Prosty przykład

if (reset) begin
  count = 0;
end

W tym przykładzie:

  • begin i end służą do oznaczenia początku i końca bloku kodu
  • Jeśli reset ma wartość 1 (prawda), kod między begin a end zostaje wykonany → count przyjmuje wartość 0
  • Jeśli reset ma wartość 0 (fałsz), kod wewnątrz jest pomijany → nic się nie dzieje

begin i end działają jak nawiasy klamrowe { } w innych językach programowania. Grupują instrukcje, dzięki czemu Verilog wie, który kod należy do warunku if. Chociaż jest tu tylko jedna instrukcja, używanie begin i end nadal jest dobrą praktyką, która zapewnia spójność.

Instrukcja if w bloku always

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

Uwaga: W przypadku pojedynczej instrukcji begin i end są opcjonalne. Na przykład w powyższym bloku always po if nie trzeba używać begin/end, ponieważ zawiera on tylko jedną instrukcję.

Warunkiem może być dowolne wyrażenie

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

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

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

Ważne zasady

ZasadaWyjaśnienie
Warunkiem może być dowolne wyrażenieWartości różne od zera (i znane) są traktowane jako prawda, a zero jako fałsz
Do wielu instrukcji potrzebne są begin / endPodobnie jak { } w innych językach
Bez begin/end następuje tylko jedna instrukcjaTylko następny wiersz
challenge icon

Wyzwanie

Co zrobić:

  1. Dodaj brakującą instrukcję if, aby to działało.
  • Gdy enable ma wartość 1, out powinno być równe a & b
  • Gdy enable ma wartość 0, out powinno pozostać równe 0 (nie zmieniać się)

Kod początkowy inicjuje out = 0 i testuje oba przypadki.

Spróbuj swoich sił

module if_challenge;
  reg a, b, enable;
  reg out = 0;
  
  initial begin
    a = 1;
    b = 1;
    
    // Przypadek testowy 1: enable = 1
    enable = 1;
    // TODO: Dodaj instrukcję if (out = a & b)
    $display("enable=1: out = %d (should be 1)", out);
    
    // Przypadek testowy 2: enable = 0
    enable = 0;
    out = 0; 
    // TODO: out powinno pozostać równe 0
    $display("enable=0: out = %d (should be 0)", out);
    
    $finish;
  end
endmodule
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online