verilog中的$size运算符和$bits运算符有什么区别?如果我有变量,[9:0]a,[6:0]b,[31:0]c。
c <= [($size(a)+$size(b)-1]-:$bits(b)];上面的表达式在'c‘处的输出是什么?
发布于 2012-11-12 21:28:30
$size需要返回维度中的元素个数,相当于$high - $low + 1。它是与维度相关的,而不仅仅是位数。如果类型为一维压缩数组或整型,则等于$bits。
$bits系统函数以位流的形式返回保存表达式所需的位数。
$bits ( [expression|type_identifier] )当使用当前为空的动态大小类型调用时,它返回0。直接将$bits系统函数与动态调整大小的类型标识符一起使用是错误的。
我不知道你的问题,c <= [($size(a)+$size(b)-1]-:$bits(b)];。它是RHS中的有效表达式吗?你说的是数组范围表达式,[n +: m]还是[n -: m]?
发布于 2012-11-12 22:58:22
$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()应该是一回事。
https://stackoverflow.com/questions/13340301
复制相似问题