VHDLのWait-For文で実行を遅延させる
前回のチュートリアルでは、VHDLプロセスをプログラムスレッドに例え、wait; 文でプロセスを無期限に休止させる方法を学びました。では、プロセスを特定の期間だけ一時停止したい場合はどうすればよいでしょうか?
wait; を完全に削除するとコンパイルエラーになります。なぜなら、すべてのVHDLプロセスは無限ループであり、少なくとも1つの wait 文を含まなければならないからです。ループは begin と end process; の間で継続的に実行されます。
本記事は「Basic VHDL Tutorials」シリーズの一部です。
wait; が永遠に停止するのに対し、wait for 構造を使えば、任意の時間間隔でプロセスを遅延できます。
wait for の構文:
wait for <time_value> <time_unit>;
<time_value> は数値リテラル、<time_unit> には以下が使用できます:
| fs | フェムト秒 |
| ps | ピコ秒 |
| ns | ナノ秒 |
| us | マイクロ秒 |
| ms | ミリ秒 |
| sec | 秒 |
| min | 分 |
| hr | 時間 |
演習
チュートリアルビデオで、wait for がユーザー定義の期間でプロセスを一時停止する様子をご覧ください。
構築したVHDL例:
entity T02_WaitForTb is end entity;
architecture sim of T02_WaitForTb is
begin
process is
begin
-- プロセス「スレッド」開始
report "Peekaboo!";
wait for 10 ns; -- 先頭に戻る
end process;
end architecture;
ModelSimでの実行結果:
VSIM 2> run # ** Note: Peekaboo! # Time: 0 ns Iteration: 0 Instance: /t02_waitfortb # ** Note: Peekaboo! # Time: 10 ns Iteration: 0 Instance: /t02_waitfortb # ** Note: Peekaboo! # Time: 20 ns Iteration: 0 Instance: /t02_waitfortb ...
解説
この例の 10 ns 遅延は、MHz帯で動作するロジックでは典型的で、ナノ秒粒度がクロック周期と一致します。
シミュレーション中、report 文やループ制御はゼロ時間で実行され、シミュレーション時間を進めるのは wait for 文だけです。
まとめ
- VHDLプロセスは
wait forで指定された期間だけ正確に休止します。 - プロセス内の他のすべての文はシミュレーション時間では瞬時に実行されます。
次のチュートリアルへ →
VHDL
- 保全ジョブプランニングにおける詳細さと効率のバランス
- 初めての自動車保険:お得に加入するためのステップバイステップガイド
- RCおよびRL回路で目標電圧に達するまでの時間計算
- 金属製造アウトソーシングの正確なリードタイム見積もり
- ロボット溶接トレーニングを加速:時間短縮と効率向上
- クレーンブレーキメンテナンスの実施時期:見逃せない重要指標
- VHDLで文字列リストを作成する: ベスト・プラクティスと実装例
- Tcl駆動テストベンチでVHDLコード・ロック・モジュールを検証する
- プロセス内プロシージャでVHDLステートマシンをクリーンに設計
- VHDL関数マスター:効率的な設計のための実践ガイド
- 無料VHDLシミュレータ&エディタ導入ガイド:学生向けステップバイステップ