Подтвердить что ты не робот

Упакованные или распакованные векторы в системном верилоге

Глядя на некоторый код, который я поддерживаю в System Verilog, я вижу некоторые сигналы, которые определены следующим образом:

node [range_hi:range_lo]x;

и другие, которые определены следующим образом:

node y[range_hi:range_lo];

Я понимаю, что x определяется как упакованный, а y определяется как распакованный. Однако я понятия не имею, что это значит.

В чем разница между упакованными и распакованными векторами в System Verilog?

Изменить: Отвечая на ответ @Empi, почему разработчик аппаратного обеспечения, который пишет в SV, заботится о внутреннем представлении массива? Есть ли время, когда я не должен или не могу использовать упакованные сигналы?

4b9b3361

Ответ 1

В этой статье приводится более подробная информация об этой проблеме: http://electrosofts.com/systemverilog/arrays.html, особенно раздел 5.2.

Упакованный массив - это механизм для разбиения вектора на подполя, к которым удобно обращаться как элементы массива. Следовательно, упакованный массив гарантированно будет представлен как непрерывный набор бит. Неопубликованный массив может быть или не быть представлен таким образом. Упакованный массив отличается от распакованного массива тем, что, когда упакованный массив появляется как первичный, он рассматривается как один вектор.

Ответ 2

Прежде чем знать, что такое упакованные и распакованные массивы, давайте также посмотрим, как вы можете узнать, какой массив - это то, что их объявление. У упакованных массивов имя объекта появляется до объявления размера. Например:

bit [3][7] a;

Нераспакованный массив имеет имя объекта после объявления размера. Например:

bit a[3];

Упакованный массив создает память, тогда как Unpacked dont. Вы можете также открыть/распаковать распакованный массив

reg unpacked_array [7:0] = '{0,0,0,0,0,0,0,1};

Вы можете смешивать как упакованный, так и распакованный массив, чтобы сделать многомерную память. Например:

bit [3:0][7:0]a[2:0].

Он создает массив из 4 (т.е. 4 * 8) байтов с глубиной 3.

Ответ 3

Упакованный массив в основном используется для эффективного использования памяти, когда мы пишем [3: 0] [7: 0] A [4: 0], что означает, что в 32-битных ячейках памяти 4 сектора каждый из 8 бит упаковывается, чтобы сформировать 32 бит. Правое значение означает, что есть 5 таких срезов.

Ответ 4

Распакованные массивы дадут вам больше времени проверки ошибок компиляции, чем упакованные массивы.

По этой причине я вижу распакованные массивы на определениях портов портов. Компилятор будет ошибочным, если размеры сигнала не совсем совпадают с размером порта с распакованными массивами. С упакованными массивами он, как правило, просто продвигается вперед и прокладывает все самое лучшее, что может, не выдавая ошибки.