упакованные vs распакованные векторы в системе verilog
глядя на некоторый код, который я поддерживаю в системе Verilog, я вижу некоторые сигналы, которые определены следующим образом:
node [range_hi:range_lo]x;
и другие, которые определяются следующим образом:
node y[range_hi:range_lo];
Я понимаю, что x
определяется как упакованный, в то время как y
определяется как распаковали. Однако, я понятия не имею, что это значит.
в чем разница между упакованными и распакованными векторами в системе Verilog?
Edit: отвечая на @Empi ответ: почему дизайнер оборудования, который пишет в SV, должен заботиться о внутреннем представлении массива? Бывают ли случаи, когда я не стоит или не могу использовать упакованные сигналы?
5 ответов
эта статья дает более подробную информацию об этой проблеме: http://electrosofts.com/systemverilog/arrays.html, в том числе в разделе 5.2.
упакованный массив-это механизм для разделения вектора на подполя, к которым можно удобно обращаться как к элементам массива. Следовательно, упакованный массив гарантированно будет представлен как непрерывный набор битов. Распакованный массив может быть или не быть представлен таким образом. Упакованный массив отличается от распакованного массива в что, когда упакованный массив отображается как первичный, он рассматривается как один вектор.
прежде чем знать, что именно упакованные и распакованные массивы, давайте также посмотрим, как вы можете знать, какой массив что, просто по их объявлению. Упакованные массивы имеют имя объекта перед объявлением размера. Например:
bit [3][7] a;
распакованный массив имеет имя объекта после объявления размера. Например:
bit a[3];
упакованный массив делает память тогда как распакованный не. Вы можете получить доступ/объявить распакованный массив, как это также
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:0][7:0]a[4: 0], что означает, что в 32-битных местах памяти 4slices каждый из 8 бит упакован, чтобы сформировать 32 бит. Значение правой стороны означает, что есть 5 таких срезов.
распакованные массивы дадут вам больше проверки ошибок времени компиляции, чем упакованные массивы.
Я вижу распакованные массивы на определениях портов модулей по этой причине. Компилятор будет ошибаться, если размеры сигнала не совпадают с размерами порта с распакованными массивами. С упакованными массивами он, как правило, просто идет вперед и связывает вещи как можно лучше, не выдавая ошибку.
bit[3:0] a
-> упакованный массив
Упакованный массив может использоваться как полный массив (a='d1
) или только часть массива (a[0]='b1
)
bit a [3:0]
-> распаковал массива
Распакованный массив нельзя использовать как a[0]='b1
, он должен использоваться как полный a={8{'b1}}