Menu
Coddy logo textTech

if 文

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

if 文は、条件が真(true)である場合にのみコードを実行する意思決定ブロックです。if 文は条件をチェックします。

もし条件が true (1) なら、内部のコードが実行されます。もし条件が false (0) なら、コードはスキップされます。

構文:

if (condition) begin
  // 条件が真のときにコードが実行されます
end

簡単な例

if (reset) begin
  count = 0;
end

この例では:

  • beginend は、コードブロックの 開始終了 をマークするために使用されます
  • reset が 1 (true) の場合、beginend の中のコードが実行され、count は 0 になります。
  • reset が 0 (false) の場合、中のコードはスキップされ、何も起こりません。

beginend は、他のプログラミング言語における波括弧 { } のように機能します。これらはステートメントをグループ化し、どのコードが if 条件に属するかをVerilogが認識できるようにします。ここではステートメントが1つしかありませんが、一貫性のために beginend を使用することは依然として良い習慣です。

Alwaysブロック内のIf文

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

注: 単一の文の場合、beginend は省略可能です。例えば、上記の always ブロックでは、文が1つしかないため、if の後に begin/end は必要ありません。

条件は任意の式にすることができます

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

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

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

重要なルール

ルール説明
条件は1ビットである必要がありますまたは、0か1に評価される式である必要があります
複数のステートメントには begin / end が必要です他の言語の { } のようなものです
begin/end がない場合、1つのステートメントのみが続きます次の行のみが対象となります
challenge icon

チャレンジ

作業内容:

  1. 不足している if 文を追加して、正しく動作するようにしてください。
  • enable1 のとき、 outa & b と等しくなる必要があります。
  • enable0 のとき、 out0 のまま(変化しない)である必要があります。

スターターコードは out = 0 を初期値として設定し、両方のケースをテストします。

チートシート

if文は、条件が真(1)の場合にのみコードを実行し、偽(0)の場合はスキップします。

if (condition) begin
  // 条件が真のときに実行されます
end

単一のステートメントの場合、begin/endは省略可能です:

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

条件は、0または1として評価される任意の式にすることができます:

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

主なルール:

  • 複数のステートメントをグループ化するには、begin/endを使用します(他の言語の{ }に相当します)
  • begin/endがない場合、直後の1行のみがifに属します

自分で試してみよう

module if_challenge;
  reg a, b, enable;
  reg out = 0;
  
  initial begin
    a = 1;
    b = 1;
    
    // テストケース 1: enable = 1
    enable = 1;
    // TODO: if文を追加 (out = a & b)
    $display("enable=1: out = %d (should be 1)", out);
    
    // テストケース 2: enable = 0
    enable = 0;
    out = 0; 
    // TODO: outは0のままにする
    $display("enable=0: out = %d (should be 0)", out);
    
    $finish;
  end
endmodule
quiz icon腕試し

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

基礎のすべてのレッスン