VHDL で For ループを使用する方法
前のチュートリアルでは、loop
を使用して無限ループを作成する方法を学びました。 声明。また、exit
を使用してループから抜け出す方法も学びました。 声明。しかし、ループを特定の回数反復させたい場合はどうすればよいでしょうか? For ループは、これを実現する最も簡単な方法です。
For ループを使用すると、固定範囲の整数または列挙項目を反復処理できます。現在の反復に属するアイテムは、暗黙的に宣言された定数を介してループ内で使用できます。
このブログ投稿は、基本的な VHDL チュートリアル シリーズの一部です。
For ループの構文は次のとおりです。
for <c> in <r> loop
end loop;
<c>
ループ内で使用できる定数の任意の名前です。 <r>
ループが反復する整数または列挙値の範囲です。整数範囲は、増分または減分のいずれかです。
0 から 9 までの 10 個の数字すべてを含む増分範囲の VHDL コード:
0 to 9
9 から 0 までの 10 個の数字すべてを含む減少範囲の VHDL コード:
9 downto 0
数値 0 のみを含む範囲の VHDL コード:
0 to 0
数値をまったく持たない空の範囲の VHDL コード:
0 to -1
エクササイズ
このチュートリアルで作成した最終的なコード:
entity T04_ForLoopTb is end entity; architecture sim of T04_ForLoopTb is begin process is begin for i in 1 to 10 loop report "i=" & integer'image(i); end loop; wait; end process; end architecture;
ModelSim で実行ボタンを押したときのシミュレータ コンソールへの出力:
VSIM 2> run # ** Note: i=1 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=2 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=3 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=4 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=5 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=6 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=7 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=8 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=9 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=10 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
分析
まったく予想外ではありませんが、For ループは終了するまでに 10 回繰り返しました。 i
の値 シミュレーション時間 0 で、シミュレータ コンソールに 10 回出力されます。ループ内に待機ステートメントがないため、ループが完了するまでの時間はゼロです。最後に、プログラムは wait;
で無限に一時停止します .
integer'image()
を使用して整数を文字列に変換する方法を学びました 、そして &
を使用しました 2 つの文字列を結合する文字。
テイクアウト
- For ループは、増加または減少する整数範囲を反復できます
- 増分範囲は
to
で示されます 、およびdownto
ずつ減少する範囲 integer'image()
を使用して整数を文字列に変換できます- 2 つの文字列は、文字列連結文字
&
を使用して結合できます
次のチュートリアルに進む »
VHDL