VHDL で While ループを使用する方法
前のチュートリアルでは、For ループを使用して整数範囲を反復処理する方法を学びました。しかし、固定の整数範囲だけでなく、ループをより詳細に制御したい場合はどうすればよいでしょうか?これには While ループを使用できます。
While ループは、テスト対象の式が true
と評価される限り、囲まれたコードを反復し続けます。 .したがって、While ループは、事前に必要な反復回数が正確にわからない状況に適しています。
このブログ投稿は、基本的な VHDL チュートリアル シリーズの一部です。
While ループの構文は次のとおりです。
while <condition> loop
end loop;
<condition>
ブール値の true
です または false
. true
と評価される式にすることもできます または false
.条件はループの反復ごとに評価され、条件が true
の場合にのみループが続行されます .
true
である式の例 i
の場合 は 10 未満です:
i < 10
true
である式の例 i
の場合 は 10 ではありません:
i /= 10
true
である式の例 i
の場合 0 以上 2
8
未満 =256:
i >= 0 and i < 2**8;
関係演算子:
= | 等しい |
/= | 等しくない |
< | 未満 |
<= | 以下 |
> | より大きい |
>= | 以上 |
論理演算子:
しない 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 等しい |
エクササイズ
このビデオ チュートリアルでは、変数を使用して While ループを制御する方法を学びます。
このチュートリアルで作成した最終的なコード:
entity T05_WhileLoopTb is end entity; architecture sim of T05_WhileLoopTb is begin process is variable i : integer := 0; begin while i < 10 loop report "i=" & integer'image(i); i := i + 2; end loop; wait; end process; end architecture;
ModelSim で実行ボタンを押したときのシミュレータ コンソールへの出力:
VSIM 2> run # ** Note: i=0 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=2 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=4 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=6 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=8 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb
分析
整数変数 i
を作成しました i
である限り true になる式を While ループで使用しました。 i
をインクリメントしていたため、10 未満です。 各繰り返しで 2 ずつ、出力された最後の数字は 8 でした。
次の繰り返しでは、i < 10
false
と評価される 10 は 10 未満ではないためです。ループが終了した後、プログラムは wait;
にヒットしました。 無限に一時停止しました。
テイクアウト
- 条件が
true
である限り、While ループは継続します - 条件は、While ループの各反復の前に評価されます
- 変数はプロセス内で宣言および使用できます
基本的な VHDL クイズに答える – パート 1 »
または
次のチュートリアルに進む »
VHDL