Когда использовать галочку (') для инициализации массива Verilog?

Инициализацию массива можно выполнить как с ', так и без него:

int a[8] = '{0,1,2,3,4,5,6,7}; // Packed
int b[8] = {0,1,2,3,4,5,6,7};  // Unpacked

Существует ли правильный способ, предполагающий, что массив использует неупаковываемый тип, такой как int, string и т. д.? Оба способа работают нормально.

Полный пример кода на EDA Playground: http://www.edaplayground.com/x/3Tc


person Victor Lyuboslavsky    schedule 18.04.2014    source источник


Ответы (2)


На основе IEEE 1800-2009:

Шаблоны присваивания массивов (1) имеют то преимущество, что их можно использовать для создания выражений шаблонов присваивания самоопределяемого типа путем добавления к шаблону префикса с именем типа. Кроме того, элементы в шаблоне назначения могут быть реплицированы с использованием синтаксиса, такого как '{ n{элемент}}, и могут быть установлены по умолчанию с использованием синтаксиса по умолчанию:. Однако каждый элемент элемента в шаблоне назначения массива должен иметь тот же тип, что и тип элемента целевого массива. Напротив, объединения неупакованных массивов (2) запрещают репликацию, использование по умолчанию и явную типизацию, но они обеспечивают дополнительную гибкость при составлении значения массива из произвольного сочетания элементов и массивов.

So:

int A3[1:3];
int A9[1:9];

A3 = '{1, 2, 3}; #legal
A9 = '{3{A3}};   #illegal
A9 = {A3, 4, 5, A3, 6}; #legal
A9 = '{9{1}}; #legal
A9 = {9{1}}; #illegal
person Qiu    schedule 19.04.2014

В простых случаях, как вы показали, функциональные возможности шаблонов присваивания и конкатенации распакованного массива частично совпадают. Фактически, в самых ранних версиях SystemVerilog использовался точно такой же синтаксис (без '), но правила типизации контекста присваивания оказались слишком сложными для использования точно такого же синтаксиса, поэтому был добавлен префикс ', чтобы различить их.

person dave_59    schedule 21.04.2014