工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> VHDL

VHDL で Wait On と Wait until を使用する方法

前のチュートリアルでは、シグナルと変数の主な違いを学びました。シグナルは、1 つのプロセス内でしかアクセスできない変数よりも広い範囲を持っていることがわかりました。では、複数のプロセス間の通信にシグナルを使用するにはどうすればよいでしょうか?

wait; の使い方はすでに学習済みです。 無限に待ち、wait for 特定の時間待機すること。 VHDL にはさらに 2 種類の待機ステートメントが存在します。

このブログ投稿は、基本的な VHDL チュートリアル シリーズの一部です。

Wait On ステートメントは、指定されたシグナルのいずれかが変化するまでプロセスを一時停止します:
wait on <signal_name1>, <signal_name2> ...;

Wait Until ステートメントは、イベントによって条件が真になるまで一時停止します:
wait until <condition>;

実際、Wait On、Wait until、Wait For を組み合わせることができます。
wait on <signal_name1> until <condition> for <time_value>;

この例では、10 ナノ秒、または signal1 まで一時停止します。 変更と signal2 signal3 に等しい :
wait on signal1 until signal2 = signal3 for 10 ns;

エクササイズ

このビデオ チュートリアルでは、VHDL でのプロセス間通信に Wait On および Wait until ステートメントを使用する方法を学習します。

このチュートリアルで作成した最終的なコード:

entity T07_WaitOnUntilTb is
end entity;

architecture sim of T07_WaitOnUntilTb is

    signal CountUp   : integer := 0;
    signal CountDown : integer := 10;

begin

    process is
    begin

        CountUp   <= CountUp + 1;
        CountDown <= CountDown - 1;
        wait for 10 ns;

    end process;

    process is
    begin

        wait on CountUp, CountDown;
        report "CountUp=" & integer'image(CountUp) &
            " CountDown=" & integer'image(CountDown);

    end process;

    process is
    begin

        wait until CountUp = CountDown;
        report "Jackpot!";

    end process;


end architecture;

ModelSim で実行ボタンを押したときのシミュレータ コンソールへの出力:

VSIM 2> run
# ** Note: CountUp=1 CountDown=9
#    Time: 0 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=2 CountDown=8
#    Time: 10 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=3 CountDown=7
#    Time: 20 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=4 CountDown=6
#    Time: 30 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=5 CountDown=5
#    Time: 40 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: Jackpot!
#    Time: 40 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=6 CountDown=4
#    Time: 50 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=7 CountDown=3
#    Time: 60 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=8 CountDown=2
#    Time: 70 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=9 CountDown=1
#    Time: 80 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=10 CountDown=0
#    Time: 90 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=11 CountDown=-1
#    Time: 100 ns  Iteration: 1  Instance: /t07_waitonuntiltb

分析

最初のプロセスは CountUp をインクリメントします カウンターし、CountDown を減らします カウンター。それらは同時に更新されます。 2 つのシグナルのシグナル割り当てはプロセス内の別の行にありますが、割り当てられたシグナル値は、プログラムが Wait ステートメントにヒットしたときにのみ有効になります。プロセスは、シミュレーションの開始時にこの操作を実行し、その後は 10 ナノ秒ごとに実行します。

2 番目のプロセスの最初の行は wait on CountUp, CountDown; です .プログラムは、シグナルの一方または両方が変化するまで、この行で待機します。プリントアウトからわかるように、これはカウンタが最初に変更された 0 ns のシミュレーション時間で発生し、その後変更されるたびに発生します。

3 番目のプロセスの最初の行は wait until CountUp = CountDown; です .プログラムは、最初のプロセスと同様に、2 つのシグナルのいずれかが変化するたびに起動します。ただし、式が true と評価された場合にのみ続行されます 、それ以外の場合はスリープ状態に戻ります。印刷物からわかるように、「ジャックポット!」両方のカウンターが同じ値を持つ場合、40 ns で 1 回だけ出力されます。

テイクアウト

次のチュートリアルに進む »


VHDL

  1. VHDL のプロセスでプロシージャを使用する方法
  2. VHDL で不純な関数を使用する方法
  3. VHDL で関数を使用する方法
  4. VHDL でプロシージャを使用する方法
  5. VHDL で定数とジェネリック マップを使用する方法
  6. VHDL でポート マップのインスタンス化を使用する方法
  7. VHDL で Case-When ステートメントを使用する方法
  8. VHDL で署名付きおよび署名なしを使用する方法
  9. VHDL シミュレーターとエディターを無料でインストールする方法
  10. PIC18マイクロコントローラー:その概要と使用方法
  11. 参照指定子とは何ですか?アセンブリでどのように使用しますか?