VHDLのWhileループをマスター:動的な反復制御
前回の for ループの探求に続き、今回は while ループに焦点を当てます。これは、事前に決まった範囲ではなく、動的な条件に基づいて反復を制御できる強力な構造です。
while ループは、指定された条件が true である限り、その本体を繰り返し実行します。これにより、反復回数が実行時のデータや複雑なロジックに依存するシナリオに最適です。
本記事は「Basic VHDL Tutorials」シリーズの一部です。
構文
while <condition> loop
-- ループ本体
end loop;
<condition> はブール値に評価される必要があります。単純な比較でも、より複雑な式でも構いません。条件は各パスの前にチェックされるため、真である間のみループが継続します。
条件の例
i < 10–iが10未満の間真。i /= 10–iが10と等しくない間真。i >= 0 and i < 2**8– 0から255の値の間真。
関係演算子
| = | 等しい |
| /= | 等しくない |
| < | より小さい |
| <= | 以下 |
| > | より大きい |
| >= | 以上 |
論理演算子
| not a | a が偽なら真 |
| a and b | a と b がともに真なら真 |
| a or b | a または b が真なら真 |
| a nand b | a または b が偽なら真 |
| a nor b | a と b がともに偽なら真 |
| a xor b | a と b のどちらか一方だけ真なら真 |
| a xnor b | a と b が等しければ真 |
演習
以下のビデオチュートリアルで、変数が while ループを駆動する様子をご覧ください:
サンプルコード
entity T05_WhileLoopTb is end entity;
architecture sim of T05_WhileLoopTb is
begin
process is
variable i : integer := 0;
begin
while i < 10 loop
report "i=" & integer'image(i);
i := i + 2;
end loop;
wait;
end process;
end architecture;
シミュレータ出力
VSIM 2> run # ** Note: i=0 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=2 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=4 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=6 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=8 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb
解説
i を0で初期化し、ループガードとして i < 10 を使用します。ループは i を毎回2ずつ増やすため、最後に表示される値は8です。次のパスでは条件が偽(10は10未満ではない)と評価され、ループを抜けます。続く wait; はプロセスを無期限に休止させ、テストベンチでよくあるパターンです。
重要なポイント
whileループは条件がtrueの間実行され続けます。- 条件は各反復の前に評価されます。
- 変数はプロセス内で宣言し、ループ内で更新できます。
Basic VHDL Quiz – part 1 を受けるか、次のチュートリアルへ進む。
VHDL
- カッターグラインダー技術の習得:実践ガイド
- モリブデンが現代産業を形作る仕組み:用途、利点、需給動向
- VHDLで文字列リストを作成する: ベスト・プラクティスと実装例
- VHDLテストベンチ・シミュレーションを優雅に終了させる方法
- VHDLでPWMコントローラを実装: 設計、シミュレーション、FPGAデモ
- VHDLで乱数生成: 一様分布からOSVVMまで
- プロセス内プロシージャでVHDLステートマシンをクリーンに設計
- VHDLにおける不純関数の活用:FSMの可読性と保守性向上
- VHDL関数マスター:効率的な設計のための実践ガイド
- VHDLで有限ステートマシンを設計:信号機の実践例
- VHDLプロシージャ活用:再利用可能なコードで設計をシンプルに