2009-01-25 11 views
23

Buscando en algún código que estoy manteniendo en el Sistema Verilog veo algunas señales que se definen así:lleno vs vectores descomprimidos en el sistema de Verilog

node [range_hi:range_lo]x; 

y otras personas que se definen como esto:

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?

Edit: 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ían o no pueden usar señales empaquetadas?

Respuesta

13

Este artículo proporciona 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 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.

5

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

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

bit a[3]; 

Packed array make memory while Unpacked dont. Puede acceder/declarar la matriz descomprimido como esto también

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

Usted puede mezclar tanto conjunto empaquetado y desempaquetado para hacer una memoria multidimensional. Por ejemplo:

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

Se hace una serie de 4 (es decir, 4 * 8) bytes con la profundidad de 3.

+0

"Packed array make memory while Unpacked dont". Qué significa eso? Hay muchas herramientas de síntesis FPGA que convertirán matrices desempacadas en algún tipo de memoria (FF o RAM). –

1

conjunto empaquetado se utilizan principalmente para el uso de memoria eficaz cuando estamos escribiendo un [3: 0 ] [7: 0] A [4: 0] lo que significa que en ubicaciones de memoria de 32 bits 4slices cada una de 8 bits están empaquetadas para formar un bit de 32 bits. El valor del lado derecho significa que hay 5 rebanadas de ese tipo están allí.

0

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

Veo las matrices desempacadas 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.