Domanda

Guardando un codice che sto mantenendo in System Verilog vedo alcuni segnali definiti in questo modo:

node [range_hi:range_lo]x;

e altri definiti in questo modo:

node y[range_hi:range_lo];

Comprendo che x è definito come compresso, mentre y è definito come non compresso. Tuttavia, non ho idea di cosa significhi.

Qual è la differenza tra vettori imballati e non imballati in System Verilog?

Modifica: rispondendo alla risposta di @ Empi, perché un progettista hardware che sta scrivendo in SV dovrebbe preoccuparsi della rappresentazione interna dell'array? Ci sono momenti in cui non dovrei o non posso usare segnali pieni?

È stato utile?

Soluzione

Questo articolo fornisce ulteriori dettagli su questo problema: http://electrosofts.com/systemverilog/arrays.html , in particolare la sezione 5.2.

  

Un array compresso è un meccanismo per suddividere un vettore in sottocampi a cui è possibile accedere comodamente come elementi dell'array. Di conseguenza, si garantisce che un array compresso sia rappresentato come un insieme contiguo di bit. Un array decompresso può essere o meno rappresentato in questo modo. Un array compresso differisce da un array decompresso in quanto, quando un array compresso appare come primario, viene trattato come un singolo vettore.

Altri suggerimenti

Prima di sapere che cosa sono esattamente gli array impacchettati e spacchettati, vediamo anche come puoi sapere quale array è cosa, semplicemente con la loro dichiarazione. Le matrici compresse hanno un nome oggetto che precede la dichiarazione di dimensione. Ad esempio:

bit [3][7] a;

L'array decompresso ha un nome oggetto dopo la dichiarazione di dimensione. Ad esempio:

bit a[3];

L'array compresso crea memoria mentre non compresso. Puoi accedere / dichiarare anche array decompressi come questo

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

È possibile combinare array compressi e non compressi per creare una memoria multidimensionale. Ad esempio:

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

Crea un array di 4 (ovvero 4 * 8) byte con una profondità di 3.

Gli array compressi vengono utilizzati principalmente per un utilizzo efficace della memoria quando stiamo scrivendo un [3: 0] [7: 0] A [4: 0] che significa che in posizioni di memoria a 32 bit 4 sezioni ciascuna di 8 bit vengono impacchettate per formare un 32 bit. Il valore del lato destro indica che ci sono 5 sezioni simili.

Gli array non compressi ti daranno più controllo degli errori di compilazione rispetto agli array compressi.

Vedo array non compressi sulle definizioni delle porte dei moduli per questo motivo. Il compilatore genererà un errore se le dimensioni del segnale non coincidono esattamente con la porta con array non compressi. Con gli array compressi normalmente andrà avanti e collegherà le cose il meglio che può, senza emettere un errore.

bit [3: 0] a - > matrice imballata L'array compresso può essere utilizzato come un array completo ( a = 'd1 ) o solo parte di un array ( a [0] =' b1 )

bit a [3: 0] - > array non imballato L'array decompresso non può essere usato come a [0] = 'b1 , deve essere usato come a={8{'b1}}

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top