17

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

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

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

4

2 回答 2

31

$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()同一回事。

于 2012-11-12T14:58:22.153 回答
14

$size应返回维度中的元素数,相当于$high - $low + 1. 它与尺寸有关,而不仅仅是位数。如果类型是一维压缩数组或整数类型,则等于$bits

$bitssystem 函数返回将表达式保存为位流所需的位数。

$bits ( [expression|type_identifier] )

当使用当前为空的动态大小的类型调用时,它返回 0。$bits直接使用带有动态大小的类型标识符的系统函数是错误的。

我不知道你的问题,c <= [($size(a)+$size(b)-1]-:$bits(b)];。它是 RHS 中的有效表达式吗?您是在谈论数组范围表达式,[n +: m]还是[n -: m]

于 2012-11-12T13:28:30.363 回答