Menu
Coddy logo textTech

if 文

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

if statementは、conditiontrueであるwhenonlyコードをexecutesする意志決定ブロックです。if statementconditionをチェックします。

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

構文:

if (condition) begin
  // condition が true のときにコードが実行される
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

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

Condition は任意の式を指定可能

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

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

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

重要なルール

ルール説明
Condition はどのような式にすることもできます非ゼロ(かつ既知)の値は true として扱われ、ゼロは false として扱われます
複数の statement には begin / end が必要です他の言語の { } のようなものです
begin/end がないと、1つの statement のみが続きます次の行のみ
challenge icon

チャレンジ

作業内容:

  1. これを動作させるために不足している if statement を追加してください。
  • enable1 のとき、outa & b と等しくなる should
  • enable0 のとき、out0 のまま維持される should (変更しない)

スターターコードは 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腕試し

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

基礎のすべてのレッスン