webentwicklung-frage-antwort-db.com.de

gepackte vs entpackte Vektoren in System Verilog

Beim Betrachten von Code, den ich in System Verilog verwalte, sehe ich einige Signale, die wie folgt definiert sind:

node [range_hi:range_lo]x;

und andere, die wie folgt definiert sind:

node y[range_hi:range_lo];

Ich verstehe, dass x als gepackt definiert ist, während y als ungepackt definiert ist. Ich habe jedoch keine Ahnung, was das bedeutet.

Was ist der Unterschied zwischen gepackten und unverpackten Vektoren in System Verilog?

Edit: Als Antwort auf die Antwort von @Empi sollte sich ein Hardware-Designer, der in SV schreibt, um die interne Darstellung des Arrays kümmern? Gibt es Zeiten, zu denen ich sollte nicht oder kann nicht gepackte Signale verwenden?

26
Nathan Fellman

Dieser Artikel enthält weitere Informationen zu diesem Problem: http://electrosofts.com/systemverilog/arrays.html , insbesondere Abschnitt 5.2. 

Ein gepacktes Array ist ein Mechanismus zum Unterteilen eines Vektors in Unterfelder, auf die als Arrayelemente bequem zugegriffen werden kann. Folglich wird garantiert, dass ein gepacktes Array als ein zusammenhängender Satz von Bits dargestellt wird. Ein entpacktes Array kann so dargestellt werden oder nicht. Ein gepacktes Array unterscheidet sich von einem nicht gepackten Array dadurch, dass ein gepacktes Array als primäres Element als einzelner Vektor behandelt wird.

13
empi

Bevor wir wissen, was genau gepackte und entpackte Arrays sind, wollen wir auch sehen, wie Sie wissen können, welches Array was ist, nur durch ihre Deklaration . Gepackte Arrays haben einen Objektnamen vor der Größendeklaration. Zum Beispiel:

bit [3][7] a;

Ungepackte Arrays haben einen Objektnamen nach der Größenangabe. Zum Beispiel:

bit a[3];

Gepacktes Array macht Speicher, wohingegen Unpacked dont . Sie können auch auf ungepacktes Array wie folgt zugreifen/deklarieren 

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

Sie können sowohl gepackte als auch entpackte Arrays zu einem mehrdimensionalen Speicher kombinieren. Zum Beispiel:

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

Es erzeugt ein Array von 4 (d. H. 4 * 8) Bytes mit einer Tiefe von 3.

5

Gepackte Arrays werden hauptsächlich für die effektive Speichernutzung verwendet, wenn wir ein [3: 0] [7: 0] A [4: 0] schreiben, dh in 32-Bit-Speicherstellen werden 4 Slices mit jeweils 8 Bit zu einem 32-Bit-Paket gepackt. Der Wert auf der rechten Seite bedeutet, dass 5 solcher Scheiben vorhanden sind. 

2
INKULA GUNNESH

bit[3:0] a -> gepacktes Array Das gepackte Array kann als vollständiges Array (a='d1) oder nur als Teil eines Arrays (a[0]='b1) verwendet werden.

bit a [3:0] -> entpacktes Array Das entpackte Array kann nicht als a[0]='b1 verwendet werden, es muss als vollständiger a={8{'b1}} verwendet werden.

0
Milan Parmar

Ungepackte Arrays bieten mehr Fehlerüberprüfungen bei der Kompilierung als gepackte Arrays.

Aus diesem Grund sehe ich in den Portdefinitionen der Module ungepackte Arrays. Der Compiler gibt einen Fehler aus, wenn die Abmessungen des Signals nicht genau mit dem Port mit nicht gepackten Arrays übereinstimmen. Bei gepackten Arrays wird es normalerweise so weit sein, dass die Dinge so verdrahtet werden, wie es nur geht, und es wird kein Fehler ausgegeben. 

0
Pedro_Uno