Arrays $size,$bits,verilog

Arrays $size,$bits,verilog,arrays,verilog,system-verilog,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$size应返回维度中的元素数量,该数量相当于$high-$low+1。它与尺寸有关,而不仅仅是与位计数有关。如果类型为1D压缩数组或整数类型,则等于$bits $bits系统函数返回将表达式保存为位流所需的位数 $bits ( [expression|type_identifier]

verilog中的
$size
$bits
运算符之间有什么区别。? 如果我有变量,
[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()
给出了单个维度的位数
$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()
是一样的。

$size(a)
=10,
$size(b)=7
$bits(b)
=7:
c你是对的。但我只是不知道是打字错误还是
c的真正意图啊,是的,打字错误17+7-1。还要注意的是,这个问题没有变量,它只是一个范围,所以它不是有效的verilog。@jclin,是的。你是对的。我说的是数组范围,[n+:m]和[n-:m]。你能解释一下在这种类型中表示范围的意义吗。感谢数组范围表达式
[n+:m]
[n-:m]
n
是起始索引,
+:
-:
是递增或递减方向
m
是要向上/向下计数的元素数。例如
[4+:4]
==
[4:7]
[3-:4]
==
[3:0]