почему мне не разрешено определять переменную распакованного массива с помощью 8'CC в системном Verilog?

Я пробовал использовать следующий код:

module try;
int a[8];
initial
begin
a = 8'hCC;
$display(a);
end
endmodule

Это дает ошибку как:

Incompatible complex type assignment
  Type of source expression is incompatible with type of target expression. 
  Mismatching types cannot be used in assignments, initializations and 
  instantiations. The type of the target is 'bit$[0:7]', while the type of the
  source is 'bit[7:0]'.

person Megha Brahmbhatt    schedule 16.09.2014    source источник


Ответы (1)


По крайней мере, в вашем коде вы не можете присвоить массиву a значение 8'hCC, поскольку a является массивом int (int a[8]), но даже если вы определите a как bit a[8] или logic a[8], вы все равно не сможете задание, которое вы пытаетесь выполнить. Verilog как два типа «массивов» (хотя я люблю называть упакованные массивы «векторами», а неупакованные массивы «массивами» для ясности). Подробнее о разнице между ними можно прочитать здесь:

упакованные и распакованные векторы в системном Verilog

Короче говоря, внутреннее представление распакованного массива ничего не гарантирует о взаимосвязи элементов массива, то есть о том, что каждый элемент является отдельным, а расстояние между элементами в памяти зависит от реализации. Таким образом, попытка назначить два соседних элемента с помощью оператора типа a = 8'hCC является недопустимой и не определена (даже если a имеет тип bit, второй 0 в 8'hCC может перейти к a[1] или где-то между a[0] и a[1]). Вот почему существуют упакованные массивы. Распакованные массивы имеют свое место, как правило, в тестовых стендах или при определении группы повторяющихся сигналов, которые не пересекаются; но вы должны использовать упакованные массивы для типа присваивания, которое вы пытаетесь выполнить (что ДЕЙСТВИТЕЛЬНО гарантирует смежность); так что вы bit [7:0] a вместо этого.

person Unn    schedule 13.11.2014