Pregunta

Al mirar algún 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 desempaquetados en System Verilog?

Editar: En respuesta a la respuesta de @ Empi, ¿por qué un diseñador de hardware que escribe en SV debe preocuparse por la representación interna de la matriz? ¿Hay algún momento en que no debería o no usar señales empaquetadas?

¿Fue útil?

Solución

Este artículo brinda más detalles sobre este problema: 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 la matriz. En consecuencia, se garantiza que una matriz empaquetada se represente como un conjunto contiguo de bits. Una matriz desempaquetada puede o no estar representada de esta manera. Una matriz empaquetada difiere de una matriz empaquetada en que, cuando una matriz empaquetada aparece como primaria, se trata como un solo vector.

Otros consejos

Antes de saber qué son exactamente las matrices empaquetadas y desempaquetadas, veamos también cómo puede saber qué matriz es qué, simplemente por 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;

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

bit a[3];

La matriz empaquetada crea memoria mientras que la no empaquetada no. Puede acceder / declarar una matriz desempaquetada como esta también

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

Puede mezclar tanto la matriz empaquetada como la descomprimida para crear una memoria multidimensional. Por ejemplo:

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

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

La matriz empaquetada se utiliza principalmente para un 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 se empacan 4 segmentos cada uno de 8 bits para formar un 32 bit. El valor del lado derecho significa que hay 5 de esos sectores.

Las matrices desempaquetadas le proporcionarán más verificación de errores en tiempo de compilación que las matrices empaquetadas.

Veo arreglos desempaquetados en las definiciones de puerto 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 las del puerto con matrices desempaquetadas. Con las matrices empaquetadas, normalmente continuará y conectará las cosas lo mejor que pueda, sin emitir un error.

bit [3: 0] a - > matriz empaquetada La matriz empaquetada se puede usar como una matriz completa ( a = 'd1 ) o simplemente como parte de una matriz ( a [0] =' b1 )

bit a [3: 0] - > matriz desempaquetada La matriz desempaquetada no se puede usar como a [0] = 'b1 , se debe usar como a={8{'b1}}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top