1

私は以下のコードで試しました:

module try;
int a[8];
initial
begin
a = 8'hCC;
$display(a);
end
endmodule

これは次のようなエラーを出しています:

Incompatible complex type assignment
  Type of source expression is incompatible with type of target expression. 
  Mismatching types cannot be used in assignments, initializations and 
  instantiations. The type of the target is 'bit$[0:7]', while the type of the
  source is 'bit[7:0]'.
4

1 に答える 1

1

少なくともコードでは、int 配列 ( ) のaように値 8'hCC を持つように配列を割り当てることはできませんが、 orとして定義したとしても、実行しようとしている種類の割り当てを行うことはできません。 . Verilog は 2 種類の「配列」として記述されています (ただし、わかりやすくするために、パックされた配列を「ベクター」、アンパックされた配列を「配列」と呼んでいます)。2 つの違いの詳細については、次を参照してください。aint a[8]abit a[8]logic a[8]

システム Verilog でのパック ベクトルとアンパック ベクトル

つまり、アンパックされた配列の内部表現は、配列要素の関係について何も保証しません。つまり、各要素は分離されており、メモリ内の要素間の間隔は実装に依存します。したがって、ステートメント like で 2 つの隣接する要素を代入しようとすることa = 8'hCCは違法であり、定義されていません ( ais がタイプbitであっても、 の 2 番目の 0 はとの間のどこか8'hCCに移動する可能性があります)。これが、パック配列が存在する理由です。パックされていない配列には、通常、テストベンチで、またはバラバラな繰り返し信号の束を定義する場所があります。ただし、実行しようとしている割り当てのタイプにはパック配列を使用する必要があります (これは隣接性を保証します)。代わりにあなたが。a[1]a[0]a[1]bit [7:0] a

于 2014-11-13T17:28:52.027 に答える