Menu
CoddyTech

If文

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

if文は、条件が真の場合にのみコードを実行する、判断を行うブロックです。if文は条件を確認します。

条件が真(1)の場合、中のコードが実行されます。条件が偽(0)の場合、コードはスキップされます。

構文:

if (condition) begin
  // condition が true のとき、コードが実行されます
end

簡単な例

if (reset) begin
  count = 0;
end

この例では:

  • begin と end は、コードブロックの開始と終了を示すために使われます
  • 「reset」が1(真)の場合、beginとendの間のコードが実行される → countは0になる
  • 「reset」が0(偽)の場合、中のコードはスキップされる → 何も起こらない

begin と end は、ほかのプログラミング言語の波かっこ { } と同じように機能します。これらを使って文をまとめることで、Verilog はどのコードが if 条件に属するのかを認識できます。ここでは文が1つしかありませんが、一貫性を保つために begin と end を使うのは、やはりよい習慣です。

alwaysブロック内のif文

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

注: 1つの文の場合、beginとendは省略できます。たとえば、上記の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

重要なルール

ルール説明
条件には任意の式を指定できますゼロ以外の(既知の)値はtrue、ゼロはfalseとして扱われます
複数の文にはbegin / endが必要です他の言語の{ }と同様です
begin/endがない場合、後に続く文は1つだけです次の文だけがifに属します
challenge icon

チャレンジ

行うこと:

  1. これが動作するように、不足している if 文を追加してください。
  • enable が 1 のとき、out は a & b と等しくなる必要があります
  • enable が 0 のとき、out は 0 のまま(変化しない)である必要があります

スターターコードでは out = 0 を初期化し、両方のケースをテストします。

自分で試してみよう

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腕試し

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

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ