Menu
Coddy logo textTech

if - else 文

CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 53/90。

if-else statementを使用すると、conditionに基づいて2つの異なるアクションから選択できるようになります。conditionが真の場合、一方のブロックが実行されます。偽の場合、もう一方のブロックが実行されます。

if-else ステートメントはコードに分岐点を与えます。条件が true の場合は 1 つの処理を実行し、条件が false の場合は別の処理を実行します。

構文:

if (condition) begin
  // condition が true (1) のときに実行される
end else begin
  // condition が false (0) のときに実行される
end

シンプルな例

if (reset) begin
  count = 0;
end else begin
  count = count + 1;
end
  • reset が 1 の場合 → count は 0 になります
  • reset が 0 の場合 → count は 1 増加します

複数の文

複数のステートメントを実行する場合は、beginend を使用します:

if (enable) begin
  out = data_in;
  valid = 1;
end else begin
  out = 0;
  valid = 0;
end

複数の条件を持つ If-Else

if-else ステートメントは連鎖させることができます:

if (a > b) begin
  max = a;
end else if (b > a) begin
  max = b;
end else begin
  max = a;  // a と b は等しい
end

重要なルール

ルール説明
else は任意ですelse なしの if を使用できます
else は最も近い if に属しますネストに注意してください
複数の文には begin/end を使用します2行以上の場合に必要です
challenge icon

チャレンジ

行うこと:

  1. 不足している if-else ステートメントを追加して動作させてください。
  2. enable が 1 のとき、outa & b と等しくなる必要があります。
  3. enable が 0 のとき、outa | b と等しくなる必要があります。

自分で試してみよう

module ifelse_challenge;
  reg a, b, enable;
  reg out;
  
  initial begin
    a = 1;
    b = 0;
    enable = 1;
    
    // TODO: if-else文を追加
    // enableが1の場合: out = a & b
    // それ以外: out = a | b
    
    $display("out = %d (should be 0 because 1&0=0)", out);
    $finish;
  end
endmodule
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン