工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Verilog

Verilog制御フローのマスター:if-else、case、ループ

ハードウェアの動作を実装するには、条件文やロジックのフローを制御する他の方法が不可欠です。Verilogには、これを実現するための制御フローブロックとメカニズムが用意されています。

if-else-if

この条件文は、特定の文を実行するかどうかを決定するために使用されます。これはC言語のif-else-if文と非常に似ています。式が真と評価された場合、最初の文が実行されます。式が偽と評価され、else部分が存在する場合、else部分が実行されます。

構文
// else部分なしのif文
if (expression) [statement]

// else部分ありのif文
if (expression) [statement] else [statement]

// 複数文のif-elseは"begin"と"end"で囲む
if (expression) begin
  [multiple statements]
end else begin
  [multiple statements]
end

// if-else-if文
if (expression) [statement]
else if (expression) [statement]
else [statement]

else部分は省略可能ですが、ネストしたif文でelseが省略されている場合、混乱を招く可能性があります。この混乱を避けるには、elseをelseを持たない直前のifに常に結びつけるか、文をbegin-endブロックで囲むのが簡単です。最後のelse部分は、他の条件のいずれも満たされなかった場合の「それ以外」またはデフォルトケースを処理します。

if-else-ifについて詳しくはこちら

ループは、ブロック内の単一または複数の文を1回以上繰り返し実行する方法を提供します。Verilogには4種類のループ文があります。

foreverループ

ブロック内の文を継続的に実行します。

forever [statement]
forever begin
  [multiple statements]
end

例

module my_design;
  initial begin
    forever begin
      $display ("This will be printed forever, simulation can hang ...");
    end
  end
endmodule
ncsim> run
This will be printed forever, simulation can hang ...
This will be printed forever, simulation can hang ...
...
This will be printed forever, simulation can hang ...
This will be printed forever, simulation can hang ...
This will be printed forever, simulation can hang ...
This will be printed forever, simulation can hang ...
Result reached the maximum of 5000 lines. Killing process.

repeatループ

文を決められた回数実行します。式がXまたはZと評価された場合、ゼロとして扱われ、まったく実行されません。

repeat ([num_of_times]) begin
  [statements]
end

repeat ([num_of_times]) @ ([some_event]) begin
  [statements]
end

例

module my_design;
  initial begin
    repeat(4) begin
      $display("This is a new iteration ...");
    end
  end
endmodule
ncsim> run
This is a new iteration ...
This is a new iteration ...
This is a new iteration ...
This is a new iteration ...
ncsim: *W,RNQUIE: Simulation is complete.

whileループ

式が真である限り文を実行し、条件が偽になると終了します。最初から条件が偽の場合、文は一度も実行されません。

while (expression) begin
  [statements]
end

例

module my_design;
  integer i = 5;
  initial begin
    while (i > 0) begin
      $display ("Iteration#%0d", i);
      i = i - 1;
    end
  end
endmodule
ncsim> run
Iteration#5
Iteration#4
Iteration#3
Iteration#2
Iteration#1
ncsim: *W,RNQUIE: Simulation is complete.

forループ

for (initial_assignment; condition; increment_variable) begin
  [statements]
end

以下の3ステップで文を制御します:

例

module my_design;
  integer i = 5;
  initial begin
    for (i = 0; i < 5; i = i + 1) begin
      $display ("Loop #%0d", i);
    end
  end
endmodule
ncsim> run
Loop #0
Loop #1
Loop #2
Loop #3
Loop #4
ncsim: *W,RNQUIE: Simulation is complete.

forループについて詳しくはこちら

Verilog

  1. C# の式、文、ブロック:実践例で徹底理解
  2. Verilogマスター:デジタル回路設計のための完全チュートリアル
  3. Verilog連結マスター:実践ガイド
  4. Verilog代入文の理解:種類、構文、ベストプラクティス
  5. Verilogブロッキング代入とノンブロッキング代入:違いを徹底解説
  6. Verilog制御フローのマスター:if-else、case、ループ
  7. Verilog関数のマスター:効率的なRTL設計のために
  8. Verilogタスクの理解:関数との違い、構文、使用法
  9. Verilog遅延制御の理解:タイミング技術とベストプラクティス
  10. Verilogクロックジェネレータ:設計と実装ガイド
  11. Javaの式、文、ブロックを理解する