VHDLのForループ完全ガイド:実践的な使い方
前回のチュートリアルでは、loop 文で無限ループを作り、exit で抜ける方法を学びました。では、ループを特定の回数だけ回したい場合はどうすればよいでしょうか?Forループ が最もシンプルな解決策です。
Forループは、整数や列挙値の固定範囲を反復します。現在の反復値は、暗黙的に宣言される定数としてループ内で自動的に利用できます。
本記事は「Basic VHDL Tutorials」シリーズの一部です。
構文
for <constant> in <range> loop
-- ループ本体
end loop;
<constant> はループカウンタのユーザー定義名、<range> は整数範囲(昇順・降順)や列挙値の集合を指定できます。
整数範囲の例
- 昇順:
0 to 9– 0,1,2,…,9 と反復。 - 降順:
9 downto 0– 9,8,7,…,0 と反復。 - 単一値:
0 to 0– 0のみ反復。 - 空範囲:
0 to -1– ループ本体は実行されない。
サンプルコード
entity T04_ForLoopTb is end entity;
architecture sim of T04_ForLoopTb is
begin
process is
begin
for i in 1 to 10 loop
report "i=" & integer'image(i);
end loop;
wait;
end process;
end architecture;
シミュレーション出力(ModelSim)
VSIM 2> run # ** Note: i=1 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=2 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=3 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=4 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=5 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=6 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=7 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=8 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=9 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=10 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
解説
Forループはちょうど10回反復し、カウンタ値をシミュレーション時間0で出力します。ループ内に wait がないため、ループ全体が瞬時に完了します。最後の wait; でプロセスを無限休止させ、テストベンチの典型的なパターンとなっています。
また、2つの重要な文字列操作も示しました:
integer'image(i)– 整数を文字列に変換。&– 文字列連結。
重要なポイント
- Forループは昇順(
to)と降順(downto)の両方に対応。 - 整数値は
integer'image()で文字列化。 - 文字列連結には
&演算子を使用。
より深いVHDL概念については、次のチュートリアルへ進んでください。
VHDL
- カッターグラインダー技術の習得:実践ガイド
- モリブデンが現代産業を形作る仕組み:用途、利点、需給動向
- VHDLで文字列リストを作成する: ベスト・プラクティスと実装例
- VHDLテストベンチ・シミュレーションを優雅に終了させる方法
- VHDLでPWMコントローラを実装: 設計、シミュレーション、FPGAデモ
- VHDLで乱数生成: 一様分布からOSVVMまで
- プロセス内プロシージャでVHDLステートマシンをクリーンに設計
- VHDLにおける不純関数の活用:FSMの可読性と保守性向上
- VHDL関数マスター:効率的な設計のための実践ガイド
- VHDLで有限ステートマシンを設計:信号機の実践例
- VHDLプロシージャ活用:再利用可能なコードで設計をシンプルに