В чем разница между оператором $size
и $bits
в verilog.?
если у меня есть переменные, [9:0]a
, [6:0]b
, [31:0]c
.
c <= [($size(a)+$size(b)-1]-:$bits(b)];
Каким будет вывод в 'c' из указанного выше выражения?
В чем разница между оператором $size
и $bits
в verilog.?
если у меня есть переменные, [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(a)+$size(b)-1]-:$bits(b)];
. Является ли это допустимым выражением в RHS? Вы говорите о выражении диапазона массива, [n +: m]
или [n -: m]
?
$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()
будут одинаковыми.