VHDL で時間を遅らせる方法:Wait For
前のチュートリアルでは、プロセスをプログラム スレッドと見なすことができることを学びました。また、wait;
ステートメントは、プログラムを無期限に一時停止させます。しかし、プログラムを永久以外の時間値まで待機させる方法はありますか?
wait;
を削除すると 完全にプログラムをコンパイルしようとすると、コンパイラは無限ループについて文句を言います。コンパイラが参照しているループは プロセス ループ です . VHDL のプロセス スレッドは決して終了せず、begin
間で継続的にループします。 と end process;
ステートメント。 wait
が必要です プロセス ループ内のどこかのステートメント。
このブログ投稿は、基本的な VHDL チュートリアル シリーズの一部です。
wait;
の間 wait for
の場合、プログラムは永久に一時停止します。 ステートメントを使用して、プログラムを任意の時間遅らせることができます。
wait for
の構文 ステートメントは次のとおりです:wait for <time_value> <time_unit>;
ここで <time_value>
は数字で、<time_unit>
次の時間単位のいずれかです:
fs | フェムト秒 |
ps | ピコ秒 |
ns | ナノ秒 |
私たち | マイクロ秒 |
ミリ秒 | ミリ秒 |
秒 | 秒 |
分 | 分 |
時間 | 時間 |
エクササイズ
このチュートリアル ビデオでは、wait for
の使用方法を紹介します。 一定時間プロセスを一時停止するステートメント。
このチュートリアルで作成したコード:
entity T02_WaitForTb is end entity; architecture sim of T02_WaitForTb is begin process is begin -- This is the start of the process "thread" report "Peekaboo!"; wait for 10 ns; -- The process will loop back to the start from here 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
を使用しました 、10 ナノ秒を意味します。 MHz クロック周波数で動作するデジタル ロジックを使用する場合、通常はナノ秒単位で作業します。
シミュレーターでコードを実行すると、「Peekaboo!」と出力されました。 10 ns ごとにコンソールに送信します。これはシミュレーションなので、report
ステートメントは時間がかからず、ループにも時間がかかりません。
テイクアウト
- プロセス スレッドは
wait for
で一時停止します 指定された正確な時間 wait
以外のすべてのステートメント ステートメントのシミュレーション時間はゼロ
次のチュートリアルに進む »
VHDL