web-dev-qa-db-ja.com

$ size、$ bits、verilog

違いは何ですか $sizeおよび$bits verilogの演算子。変数がある場合、[9:0]a[6:0]b[31:0]c

c <= [($size(a)+$size(b)-1]-:$bits(b)];

上記の式の「c」での出力はどうなりますか?

15
Suhas

_$size_は、次元の要素数を返します。これは、_$high - $low + 1_と同等です。これは、ビット数だけでなく、次元に関連しています。型が1Dパック配列または整数型の場合、_$bits_と等しくなります。

_$bits_システム関数は、式をビットストリームとして保持するために必要なビット数を返します。

_$bits ( [expression|type_identifier] )
_

現在空の動的サイズの型で呼び出されると、0を返します。 _$bits_システム関数を動的にサイズ設定された型識別子と共に直接使用すると、エラーになります。

あなたの質問、c <= [($size(a)+$size(b)-1]-:$bits(b)];についてはわかりません。 RHSで有効な式ですか? _[n +: m]_または_[n -: m]_の配列範囲式について話していますか?

12
jclin

$size()は、1次元のビット数を示します。 $bits()は、変数を完全に表すビット数を示します。

例えば:

_reg [9:0] a;
reg [9:0] b [5:0];

initial begin
  $display("a Size ", $size(a));
  $display("a Bits ", $bits(a));
  $display("b Size ", $size(b));
  $display("b Bits ", $bits(b)) ;
end
_

与える:

_a Size          10
a Bits          10
b Size           6 // Depth of memory
b Bits          60 // Width * Depth
_

あなたの場合、メモリや構造体ではなく、1次元配列しかないので、$size()$bits()は同じものになります。

25
Morgan