web-dev-qa-db-fra.com

vecteurs emballés vs non emballés dans le système Verilog

En regardant le code que je gère dans System Verilog, je vois des signaux définis comme suit:

node [range_hi:range_lo]x;

et d'autres qui sont définis comme ceci:

node y[range_hi:range_lo];

Je comprends que x est défini comme emballé, alors que y est défini comme non emballé. Cependant, je n'ai aucune idée de ce que cela signifie.

Quelle est la différence entre les vecteurs compressés et non compressés dans System Verilog?

Edit: En réponse à la réponse de @ Empi, pourquoi un concepteur de matériel qui écrit en SV se soucie-t-il de la représentation interne du tableau? Existe-t-il des cas où je ne devrait pas ou ne peut pas utiliser des signaux groupés?

26
Nathan Fellman

Cet article donne plus de détails sur ce problème: http://electrosofts.com/systemverilog/arrays.html , en particulier la section 5.2. 

Un tableau compacté est un mécanisme permettant de subdiviser un vecteur en sous-champs auxquels on peut facilement accéder en tant qu'éléments de tableau. Par conséquent, il est garanti qu'un tableau compacté sera représenté sous la forme d'un ensemble contigu de bits. Un tableau non compressé peut être représenté ou non. Un tableau condensé diffère d'un tableau non compressé en ce que, lorsqu'un tableau condensé apparaît en tant que réseau principal, il est traité comme un vecteur unique.

13
empi

Avant de savoir ce que sont exactement les tableaux empaquetés et non empaquetés, voyons comment vous pouvez savoir quel tableau correspond à quoi, juste par leur déclaration . Les tableaux empaquetés ont un nom d'objet précédant la déclaration de taille. Par exemple:

bit [3][7] a;

Les tableaux décompressés ont un nom d'objet après la déclaration de taille. Par exemple:

bit a[3];

Les tableaux empaquetés font de la mémoire alors que Unpacked ne .. ... Vous pouvez accéder/déclarer un tableau non empaqueté comme ceci aussi 

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

Vous pouvez mélanger un tableau compacté et non compressé pour créer une mémoire multidimensionnelle. Par exemple:

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

Il fait un tableau de 4 (c'est-à-dire 4 * 8) octets avec une profondeur de 3.

5

Les tableaux empaquetés sont principalement utilisés pour une utilisation efficace de la mémoire lorsque nous écrivons un [3: 0] [7: 0] A [4: 0], ce qui signifie que dans des emplacements de mémoire 32 bits, 4 tranches de 8 bits sont empilées pour former un 32 bits. La valeur de droite indique qu'il y a 5 tranches de ce type. 

2
INKULA GUNNESH

bit[3:0] a -> tableau compacté Le tableau compacté peut être utilisé comme un tableau complet (a='d1) ou seulement comme partie d'un tableau (a[0]='b1)

bit a [3:0] -> tableau non compressé Le tableau non compressé ne peut pas être utilisé en tant que a[0]='b1, il doit être utilisé en tant que complet a={8{'b1}}

0
Milan Parmar

Les tableaux décompressés vous donneront plus de vérification d'erreur de compilation que les tableaux compactés.

Je vois des tableaux décompressés sur les définitions de ports des modules pour cette raison. Le compilateur générera une erreur si les dimensions du signal ne sont pas exactement les mêmes que celles du port avec les tableaux décompressés. Avec des matrices remplies, il suffit normalement de câbler les choses du mieux qu’elles peuvent, sans émettre d’erreur. 

0
Pedro_Uno