違いは何ですか $size
および$bits
verilogの演算子。変数がある場合、[9:0]a
、[6:0]b
、[31:0]c
。
c <= [($size(a)+$size(b)-1]-:$bits(b)];
上記の式の「c」での出力はどうなりますか?
_$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]
_の配列範囲式について話していますか?
$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()
は同じものになります。