配列の初期化は、以下を使用しても使用しなくても実行できます'
。
int a[8] = '{0,1,2,3,4,5,6,7}; // Packed
int b[8] = {0,1,2,3,4,5,6,7}; // Unpacked
配列がint、stringなどのパック不可能な型を使用すると仮定すると、正しい方法はありますか? どちらの方法もうまくいくようです。
EDA Playground の完全なコード例: http://www.edaplayground.com/x/3Tc
配列の初期化は、以下を使用しても使用しなくても実行できます'
。
int a[8] = '{0,1,2,3,4,5,6,7}; // Packed
int b[8] = {0,1,2,3,4,5,6,7}; // Unpacked
配列がint、stringなどのパック不可能な型を使用すると仮定すると、正しい方法はありますか? どちらの方法もうまくいくようです。
EDA Playground の完全なコード例: http://www.edaplayground.com/x/3Tc
IEEE 1800-2009 に基づく:
配列代入パターン(1) には、パターンの前に型名を付けることで、自己決定型の代入パターン式を作成するために使用できるという利点があります。さらに、割り当てパターンの項目は、'{ n{element} } などの構文を使用して複製でき、default: 構文を使用してデフォルト設定できます。ただし、配列代入パターンのすべての要素項目は、ターゲット配列の要素型と同じ型である必要があります。対照的に、アンパックされた配列連結(2) は複製、デフォルト設定、および明示的な型付けを禁止しますが、要素と配列の任意の組み合わせから配列値を構成するという追加の柔軟性を提供します。
そう:
int A3[1:3];
int A9[1:9];
A3 = '{1, 2, 3}; #legal
A9 = '{3{A3}}; #illegal
A9 = {A3, 4, 5, A3, 6}; #legal
A9 = '{9{1}}; #legal
A9 = {9{1}}; #illegal
あなたが示したような単純なケースでは、割り当てパターンとアンパックされた配列連結の間で機能が重複しています。実際、SystemVerilog の非常に初期のバージョンでは、まったく同じ構文 (' なし) を使用していましたが、代入コンテキストの型指定規則が複雑すぎてまったく同じ構文を使用できないことが判明したため、2 つを区別するために ' プレフィックスが追加されました。