SystemVerilog:初期化順序について

SystemVerilogの変数初期化についてのお話です。
まずはサンプルコードを見てください。

サンプルコード


 1|module tb;
 2|
 3|  integer i = 10;
 4|  integer j = i;
 5|
 6|  initial begin
 7|    $display("--- i = %2d, j = %2d", i, j);
 8|    $finish;
 9|  end
10|
11|endmodule
この記述を Verilog HDLとしてコンパイルした場合と
SystemVerilogとしてコンパイルした場合の挙動を見てみます。

Verilog HDLとしてコンパイル


vlib work
vlog tb.v
Model Technology ModelSim ALTERA vlog 10.0d Compiler 2012.01 Jan 18 2012
-- Compiling module tb
** Error: tb.v(4): Initializer must be a constant value or constant expression.
make: *** [compile] エラー 2
# Error loading design
このようにコンパイルエラーになります。

SystemVerilogとしてコンパイル


拡張子が「.v」などで予めVerilog HDLファイルをして認識されるものは、
「-sv」オプションを指定することで SystemVerilogファイルとして認識されます。
vlib work
vlog -sv tb.v
Model Technology ModelSim ALTERA vlog 10.0d Compiler 2012.01 Jan 18 2012
-- Compiling module tb

Top level modules:
tb
vsim -c -L work tb -do "run -all; quit"
Reading /home/kocha/tools/modelsim/12.0/modelsim_ase/tcl/vsim/pref.tcl

# 10.0d

# vsim -L work -do {run -all; quit} -c tb
# Loading sv_std.std
# Loading work.tb
# run -all
# --- i = 10, j = 10
# ** Note: $finish : tb.v(8)
# Time: 0 ps Iteration: 0 Instance: /tb
SystemVerilogでは正常にコンパイルでき、「j」に想定した値が代入されています。
これは、SystemVerilogにて初期化の順序が明確化されているから。らしいです。
関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!(^o^)/
E-mail
github:Kocha
イベントカレンダー

カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数