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