$ size,$ bits,verilog

时间:2012-11-12 08:19:35

标签: arrays verilog system-verilog

verilog中$size$bits运算符之间有什么区别? 如果我有变量,[9:0]a[6:0]b[31:0]c

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

上述表达式中“c”的输出是什么?

2 个答案:

答案 0 :(得分:25)

$size()给出单个维度的位数。 $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

在你的情况下,你只有一维数组,而不是记忆或结构,所以$size()$bits()是相同的。

答案 1 :(得分:12)

$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]

相关问题