Question

En regardant le code que je tiens à jour dans System Verilog, je vois des signaux définis comme suit:

node [range_hi:range_lo]x;

et d'autres définis comme ceci:

node y[range_hi:range_lo];

Je comprends que x est défini comme étant compressé, alors que y est défini comme non compressé. 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?

Modifier: 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 devrais pas ou ne pas utiliser des signaux groupés?

Était-ce utile?

La solution

Cet article donne plus de détails sur ce problème: http://electrosofts.com/systemverilog/arrays.html , en particulier de 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é est 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 principal, il est traité comme un vecteur unique.

Autres conseils

Avant de savoir ce que sont exactement les tableaux empaquetés et non empaquetés, voyons également comment savoir quel tableau est 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];

La matrice empaquetée crée de la mémoire alors que celle non décompressée. Vous pouvez accéder / déclarer un tableau non compressé comme ceci aussi

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

Vous pouvez combiner un tableau compressé et un tableau décompressé pour créer une mémoire multidimensionnelle. Par exemple:

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

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

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 empaquetées pour former un 32 bits. La valeur de droite indique qu'il y a 5 tranches de ce type.

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

Pour cette raison, je vois des tableaux décompressés sur les définitions de ports des modules. Le compilateur générera une erreur si les dimensions du signal ne sont pas exactement les mêmes que celles du port avec des 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.

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top