ループ文

ループ文としては、次の6種類があります。

1)、forever

2)、repeat()

3)、while()

4)、for( ; ; )

5)、do ... while ();

6)、foreach

6つのうち、forever、repeat、while、forはVerilog HDLからサポートされています。

ただし、forに関しては、次のような機能が追加されました。

for( int i = 0 ; i < 10 ; i++ )

最初の初期化部分で変数(この例では、i)の宣言ができるようになりました。

Verilog HDLでは、変数はfor文の外側で宣言する必要がありました。

また、最後の部分では、++や--などの構文も使えるようになりました。

++や--は、SystemVerilogで追加された構文です。この他に、+=、-=なども使えます。

残りの2つの構文(do ... whileとforeach)は、SystemVerilogで追加されたものです。

do ... whileは、whileに対して条件が最後になっただけです。

一方、foreachは配列などの各要素に対して繰り返し行う場合に使います。

string msg [2] = '{ "hello", "world" };

foreach( msg [ i ] )

$display( i , msg[i] );

この例では、文字列型の配列msgの各要素を表示するというものです。

foreachを使うことで、わかりやすい表現ができるようになりました。

これと同じことをforを使って行うと、次のようになります。

for( int i = 0 ; i < 2 ; i++ )

$display( i , msg[i] );

foreachの方が短いし、各配列に対する処理だということが分かります。

なお、foreachの中で使われる変数は、forと違って宣言する必要はありません。

配列が2次元以上の場合は、次元の数だけ変数を使うことになります。

int array[5][4][3];

foreach( array[i, j, k] )

foreachの中で [ と ] の間に次元数分の変数を書くことになります(次元数分の変数がなければいけません)。