29

System Verilog で管理しているコードを見ると、次のように定義されているシグナルがいくつか見られます。

node [range_hi:range_lo]x;

および次のように定義されているその他のもの:

node y[range_hi:range_lo];

xはパックされていると定義されていますが、yはアンパックされていると定義されています。しかし、私はそれが何を意味するのか分かりません。

System Verilog のパック ベクトルとアンパック ベクトルの違いは何ですか?

編集: @Empi の回答に応えて、SV で記述しているハードウェア設計者が配列の内部表現を気にする必要があるのはなぜですか? パックされたシグナルを使用すべきではない、または使用できない場合はありますか?

4

7 に答える 7

16

この問題の詳細については、http: //electrosofts.c​​om /systemverilog/arrays.html の記事、特にセクション 5.2 を参照してください。

パック配列は、配列要素として簡単にアクセスできるサブフィールドにベクトルを分割するためのメカニズムです。その結果、パック配列は、連続したビットのセットとして表現されることが保証されます。アンパックされた配列は、そのように表現される場合とそうでない場合があります。パックされた配列は、パックされた配列がプライマリとして表示される場合、単一のベクトルとして扱われるという点で、アンパックされた配列とは異なります。

于 2009-01-25T13:02:38.240 に答える
4

パックされた配列とアンパックされた配列が正確に何であるかを知る前に、宣言だけでどの配列が何であるかを知る方法も見てみましょう。パックされた配列では、サイズ宣言の前にオブジェクト名が来ます。例えば:

bit [3][7] a;

展開された配列は、サイズ宣言の後にオブジェクト名が続きます。例えば:

bit a[3];

パックされた配列はメモリを作成しますが、アンパックはメモリを作成しません。このようにアンパックされた配列にアクセス/宣言することもできます

reg unpacked_array [7:0] = '{0,0,0,0,0,0,0,1};

パックされた配列とアンパックされた配列の両方を混在させて、多次元メモリを作成できます。例えば:

bit [3:0][7:0]a[2:0].

深さ 3 の 4 (つまり 4*8) バイトの配列を作成します。

于 2012-04-12T10:58:58.950 に答える