vector system-verilog

vectores embalados frente a los desempaquetados en el sistema verilog



system-verilog (4)

Antes de saber qué son las matrices empaquetadas y desempaquetadas, también veamos cómo puedes saber qué matriz es qué, solo con su declaración. Las matrices empaquetadas tienen un nombre de objeto antes de la declaración de tamaño. Por ejemplo:

bit [3][7] a;

Matriz desempaquetada tiene un nombre de objeto viene después de la declaración de tamaño. Por ejemplo:

bit a[3];

La matriz empaquetada hace memoria mientras que no está empaquetada. Puede acceder / declarar un conjunto desempaquetado como este también

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

Puede mezclar matriz empaquetada y sin empaquetar para crear una memoria multidimensional. Por ejemplo:

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

Hace una matriz de 4 (es decir, 4 * 8) bytes con una profundidad de 3.

Mirando un código que estoy manteniendo en System Verilog veo algunas señales que se definen así:

node [range_hi:range_lo]x;

y otros que se definen así:

node y[range_hi:range_lo];

Entiendo que x se define como empaquetado, mientras que y se define como desempaquetado. Sin embargo, no tengo idea de lo que eso significa.

¿Cuál es la diferencia entre los vectores empaquetados y no empaquetados en System Verilog?

Editar: Respondiendo a la respuesta de @ Empi, ¿por qué un diseñador de hardware que escribe en SV se preocupa por la representación interna de la matriz? ¿Hay momentos en los que no debería o no puedo usar señales empaquetadas?


Este artículo proporciona más detalles sobre este tema: http://electrosofts.com/systemverilog/arrays.html , especialmente la sección 5.2.

Una matriz empaquetada es un mecanismo para subdividir un vector en subcampos a los que se puede acceder cómodamente como elementos de matriz. En consecuencia, se garantiza que una matriz empaquetada se representará como un conjunto contiguo de bits. Una matriz desempaquetada puede estar representada o no. Una matriz empaquetada difiere de una matriz no empaquetada en que, cuando una matriz empaquetada aparece como primaria, se trata como un único vector.


La matriz empaquetada se utiliza principalmente para el uso efectivo de la memoria cuando escribimos un [3: 0] [7: 0] A [4: 0] lo que significa que en ubicaciones de memoria de 32 bits 4slices cada uno de 8 bits se empaquetan para formar un bit de 32 bits. El valor del lado derecho significa que hay 5 rebanadas de ese tipo están allí.


Las matrices desempaquetadas le proporcionarán más comprobaciones de error de tiempo de compilación que las matrices empaquetadas.

Veo arreglos desempaquetados en las definiciones de los puertos de los módulos por este motivo. El compilador producirá un error si las dimensiones de la señal no son exactamente las mismas que en el puerto con las matrices desempaquetadas. Con las matrices empaquetadas, normalmente continuará y cableará las cosas lo mejor que pueda, sin emitir un error.