スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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
イベントカレンダー

カレンダー
06 | 2012/07 | 08
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 31 - - - -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。