2009-01-25 7 views
23

irgend Code sucht ich in Systemverilog bin Aufrechterhaltung ich einige Signale sehen, die wie folgt definiert sind:vs entpackte Vektoren verpackt in Systemverilog

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 unverpackt definiert ist. Ich habe jedoch keine Ahnung, was das bedeutet.

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

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

Antwort

13

Dieser Artikel enthält weitere Details 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 bequem als Array-Elemente zugegriffen werden kann. Folglich wird garantiert, dass ein gepacktes Array als ein zusammenhängender Satz von Bits dargestellt wird. Ein entpacktes Array kann oder kann nicht so dargestellt werden. Ein gepacktes Array unterscheidet sich von einem entpackten Array dadurch, dass ein gepacktes Array als primärer Vektor betrachtet wird.

5

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

bit [3][7] a; 

Unpacked Array haben einen Objektnamen kommt nach Größe Deklaration. Zum Beispiel:

Packed Array machen Speicher, während Unpacked nicht. Sie können ausgepackt Array wie folgt auch

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

Sie können sowohl verpackt und ausgepackt Array mischen Zugriff/deklarieren, um einen mehrdimensionalen Speicher zu machen. Zum Beispiel:

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

Es ist eine Reihe von 4 (dh 4 * 8) Bytes mit der Tiefe von 3.em

+0

"Packed Array machen Speicher, während nicht verpackt nicht." Was bedeutet das? Es gibt viele FPGA-Synthese-Tools, die entpackte Arrays in eine Art von Speicher (entweder FFs oder RAMs) konvertieren. –

1

gepackte Anordnung wird hauptsächlich für eine effektive Speichernutzung verwendet, wenn wir schreiben a [3: 0 ] [7: 0] A [4: 0], was bedeutet, dass in 32-Bit-Speicherstellen 4 Slices von jeweils 8 Bit gepackt sind, um ein 32-Bit zu bilden. Der Wert auf der rechten Seite bedeutet, dass 5 solcher Scheiben vorhanden sind.

0

Unverpackte Arrays bieten mehr Fehler bei der Kompilierungszeit als gepackte Arrays.

Aus diesem Grund sehe ich entpackte Arrays auf den Port-Definitionen von Modulen. Der Compiler wird fehlerhaft, wenn die Abmessungen des Signals nicht genau dem Port mit entpackten Arrays entsprechen.Bei gepackten Arrays wird es normalerweise einfach weitergehen und die Dinge so gut wie möglich verkabeln, ohne einen Fehler auszugeben.