Frage

Mit Blick auf einige Code, den ich in Systemverilog bin Aufrechterhaltung 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 ist definiert als gepackt, während y als entpackte definiert ist. Allerdings habe ich keine Ahnung, was das bedeutet.

Was ist der Unterschied zwischen verpackter und unverpackten Vektoren im System Verilog?

Edit: Als Reaktion auf @ Empi Antwort, warum sollte ein Hardware-Designer, der in SV Sorge um die interne Darstellung des Arrays schreibt? Gibt es Zeiten, in denen I sollte nicht oder kann nicht Verwendung verpackt Signale?

War es hilfreich?

Lösung

Dieser Artikel gibt weitere Details zu diesem Thema: http://electrosofts.com/systemverilog/arrays.html , insbesondere Abschnitt 5.2.

  

A gepackte Anordnung ist ein Mechanismus, einen Vektor in Subfeldern zur Unterteilung, die in geeigneter Weise als Array-Elemente erreicht werden kann. Folglich wird eine gepackte Anordnung garantiert als eine zusammenhängende Gruppe von Bits dargestellt werden. Eine entpackte Array kann nicht sein oder kann so dargestellt. Eine gepackte Anordnung unterscheidet sich von einem entpackten Array daß, wenn eine gepackte Anordnung als primäre erscheint, als ein einziger Vektor behandelt wird.

Andere Tipps

Bevor zu wissen, was genau verpackt und ausgepackt Arrays sind, können sehen, auch, wie Sie wissen können, welche Array was ist, nur durch ihre Erklärung. Verpackt Arrays haben einen Objektname vor Größe Erklärung kommt. Zum Beispiel:

bit [3][7] a;

Entpackte Array haben ein Objektnamen nach Größe Erklärung kommt. Zum Beispiel:

bit a[3];

Packed Array Speicher während Entpackte tun sie nicht machen. Sie können diese ausgepackt Array wie auch Zugriff / deklarieren

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

Sie können sowohl verpackt und ausgepackt Array mischen, um eine multidimensionale Speicher zu machen. Zum Beispiel:

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

Es ist eine Reihe von 4 (d 4 * 8) Bytes mit einer Tiefe von 3.

gepackte Anordnung wird hauptsächlich für eine effektive Speichernutzung verwendet, wenn wir schreiben [3: 0] [7: 0], A [4: 0], die in 32-Bit-Speicherstellen bedeuten 4slices jeweils 8-Bit-gepackt a zu bilden 32 Bit. Die rechte Seite Wert bedeutet, es gibt 5 solche Scheiben sind.

Entpackte Arrays werden Sie mehr Zeit Fehler kompilieren als gepackten Anordnungen zu überprüfen.

Ich sehe entpackten Arrays auf den Port-Definitionen von Modulen aus diesem Grunde. Die Compiler Fehler, wenn die Abmessungen des Signals nicht exakt die gleichen wie die Port mit ungepackten Arrays. Mit gepackten Anordnungen wird es in der Regel gehen Sie einfach weiter und Draht Dinge die gut es kann, nicht einen Fehler ausgibt.

bit[3:0] a -> gepackte Anordnung Die gepackten Anordnung kann als Voll Array (a='d1) oder nur einen Teil eines Arrays (a[0]='b1) verwendet werden

bit a [3:0] -> ausgepackt Array Die entpackte Array kann nicht als a[0]='b1 verwendet werden, hat es sich als Voll a={8{'b1}} verwendet werden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top