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

VHDL で条件ステートメントを使用する方法:If-Then-Elsif-Else

前のチュートリアルでは、Wait until ステートメントで条件式を使用しました。この式により、2 つのカウンター シグナルが等しい場合にのみプロセスがトリガーされるようになりました。しかし、プロセス内のプログラムに、さまざまな入力に基づいてさまざまなアクションを実行させたい場合はどうでしょうか?

If-Then-Elsif-Else ステートメントを使用して、プログラムに分岐を作成できます。変数の値または式の結果に応じて、プログラムは異なるパスを取ることができます。

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

基本的な構文は次のとおりです:

if <condition> then
elsif <condition> then
else
end if;

elsif そして else はオプションで、elsif 複数回使用することができます。 <condition> ブール値の true にすることができます または false 、または true に評価される式にすることができます または false .

true である式の例 MyCounter の場合 は 10 未満です:

MyCounter < 10

関係演算子:

= 等しい
/= 等しくない
< 未満
<= 以下
> より大きい
>= 以上

論理演算子:

しない a a の場合は true は偽です
a そして b a の場合は true そしてb 本当です
a または b a の場合は true または b 本当です
a ナンド b a の場合は true または b 偽です
a b a の場合は true そしてb 偽です
a xor b a のうちの 1 つである場合は true または b 本当です
a xnor b a の場合は true そしてb 等しい

エクササイズ

このビデオ チュートリアルでは、VHDL で If-Then-Elsif-Else ステートメントを使用する方法を学習します。

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

entity T08_IfTb is
end entity;

architecture sim of T08_IfTb 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

        if CountUp > CountDown then
            report "CountUp is larger";
        elsif CountUp < CountDown then
            report "CountDown is larger";
        else
            report "They are equal";
        end if;

        wait on CountUp, CountDown;

    end process;

end architecture;

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

VSIM 2> run
# ** Note: CountDown is larger
#    Time: 0 ns  Iteration: 0  Instance: /t08_iftb
# ** Note: CountDown is larger
#    Time: 0 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: CountDown is larger
#    Time: 10 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: CountDown is larger
#    Time: 20 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: CountDown is larger
#    Time: 30 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: They are equal
#    Time: 40 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: Countup is larger
#    Time: 50 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: Countup is larger
#    Time: 60 ns  Iteration: 1  Instance: /t08_iftb
...

分析

CountDown を与えました 初期値 10、および CountUp 値は 0 です。最初のプロセスは、両方のカウンタ値を 10 ns ごとにまったく同時に変更します。これが発生すると、プログラムは常に wait on CountUp, CountDown; で待機するため、2 番目のプロセスがトリガーされます。 ライン。 If-Then-Elsif-Else およびレポート ステートメントはシミュレーション時間を消費しないため、プログラムは常にそこで待機します。

If-Then-Elsif-Else ステートメントにより、プログラムは作成した 3 つの分岐のいずれかを取ります。最初の 2 つの分岐は、2 つのカウンターの値が異なる場合をカバーします。単一の else を削除できた可能性があります 、および使用された elsif CountUp = CountDown then 同じ結果が得られたでしょう。しかし、すべてのブランチと else をカバーすることは良い設計方法です。 この条項は、意図的および予期しないすべてのケースをカバーしています。

プリントアウトからわかるように、2 番目のプロセスは、カウンターが変化するたびに 3 つの分岐のいずれかを取ります。

テイクアウト

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


VHDL

  1. モリブデンはどのように使用しますか?
  2. VHDL で文字列のリストを作成する方法
  3. VHDL テストベンチでシミュレーションを停止する方法
  4. VHDL で PWM コントローラーを作成する方法
  5. VHDL で乱数を生成する方法
  6. VHDL のプロセスでプロシージャを使用する方法
  7. VHDL で不純な関数を使用する方法
  8. VHDL で関数を使用する方法
  9. VHDL で有限ステート マシンを作成する方法
  10. VHDL でプロシージャを使用する方法
  11. カッターグラインダーの使い方