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