$ size,$ bits,verilog

Suh*_*has 14 arrays verilog system-verilog

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

c <= [($size(a)+$size(b)-1]-:$bits(b)];
Run Code Online (Sandbox Code Playgroud)

上面表达式中'c'的输出是什么?

Mor*_*gan 26

$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
Run Code Online (Sandbox Code Playgroud)

给:

a Size          10
a Bits          10
b Size           6 // Depth of memory
b Bits          60 // Width * Depth
Run Code Online (Sandbox Code Playgroud)

你的情况,你只需要1个维数组,而不是记忆或结构等等$size(),并$bits()会是同样的事情.


jcl*_*lin 12

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

$bits system函数返回将表达式保存为位流所需的位数.

$bits ( [expression|type_identifier] )
Run Code Online (Sandbox Code Playgroud)

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

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

  • 数组范围表达式`[n +:m]`或`[n - :m]`,`n`是起始索引,`+:`或` - :`是增量或减量方向.`m`是要计数/减少的元素数量.例如`[4+:4]`==`[4:7]`,`[3-:4]`==`[3:0]` (2认同)