リテラル
・ integer/logic
SystemVerilogでは、次のようにアポストロフィー( ' )の後に値を書くと、
代入する変数や比較する変数(式)の幅に合わせてビット拡張されます。
'0 , '1 , 'z , 'Z , 'x , 'X
たとえば、
logic [7:0] a;
a = 'z;
は、
a = 8'bzzzz_zzzz;
と同じになります。
・ real
固定小数点や指数のデフォルトの型は、 real です。
real から shortreal への型変換は、キャストすることになります。
shortreal b;
real c;
c = 1.2;
b = ( shortreal'( c );
・ time
時間は、整数あるいは固定小数点で表します。
そして、数値の後にスペースを書けることなくタイムユニット( fs, ps, ns, us, ms, s )を指定することもできます。
0.1fs
10.5us
時間を表す変数を定義したいときは、 realtime 型の変数を定義します。
realtime time_up;
・ string
文字列を表すには、文字列を " で囲みます。
そのとき、非印字文字や特殊文字に対しては、バックスラッシュ( \ ) を前に置く必要があります。
\t : タブ
\a : ベル
\x03 : 16進数の値(ここでは、3)
文字列は、1行でなければいけません。
複数行にまたがるときは、改行の前にバックスラッシュ( \ )が必要です。
このとき、バックスラッシュと改行は文字列には含まれません。
文字列を代入するときに、代入する文字列より代入される変数の方が長いときは右寄せ(左側が空白)になります。一方、代入する文字列より代入される変数の方が短いときは左寄せになります。
文字列は、byteの配列や8ビット幅のbitの配列だけでなく、stringにも代入できます。
・ arrary
配列への初期化は、Verilog HDLと似ています。
例えば、
int a[1:0][2:0] = '{'{2,1,0},'{3{-3}}};
{3{-3}}の部分は、{-3, -3, -3} と同じです。
また、インデックスやデフォルトキーワード( default ) も指定することができます。
int c [4:0] = {4:6, 2:3, default:-2};
は、
c[4] = 6;
c[3] = -2;
c[2] = 3;
c[1] = -2;
c[0] = -2;
と同じになります。
インデックスを指定するときは、
インデックス:値
になります。
デフォルト値を指定する場合は、インデックスの部分を default にします。
インデックスを指定していないすべての値が default で指定した値になります。
・ structure
構造体への初期化は、配列とほとんど同じです。
typedef struct {string str; int val;} x_struct;
x_struct y;
y = '{"sample", -2};
初期化する構造体の各メンバーの型および数は同じでなければいけません。
構造体の配列の場合は、
x_struct y2[2];
y2 = '{ '{"sample-1", -2}, '{"sample-2", -1} };
のように、'{} で囲む必要があります。
y2 = '{ "sample-1", -2, "sample-2", -1 };
上記のような、C言語ライクな書き方はできません。
配列と同じように構造体では、メンバー名での初期化やデフォルト値を指定することもできます。
y = '{ str:"sample-x", default:1};
この例では、メンバー(str)は"simple-x"に、その他(val)は1で初期化します。