2017-05-05 3 views
0

verpackt Ich habe eine Struktur innerhalb eines Moduls wie folgt erklärt:Verilog zwingen Struktur zu

module myModule; 

    struct { 
    logic a; 
    logic b; 
    logic [A - 1:0] c[0:B - 1]; 
    logic [C - 1:0] d; 
    } [D - 1:0] e [0:E - 1][0:F - 1]; 

endmodule 

Ich möchte c wie ein ausgepackt Array verwenden, aber Verilog dies nicht zulässt. Es wirft einen Fehler auf der Linie, wo c definiert:

Unsupported: Unpacked array in packed struct/union 

Gibt es eine Möglichkeit, um dieses?

+1

Da 'c' eine entpackte Variable ist, können Sie' gepackte' Strukturen von SV nicht verwenden. Folgendes wird funktionieren: 'typedef struct packed {logic a; Logik b; Logik [A - 1: 0] c [0: B - 1]; Logik [C - -1: 0] d; } mystruct; mystruct e [0: E - 1] [0: F - 1]; 'Beachten Sie, dass' e' keine gepackte Dimension haben sollte, da es sich um ein Array von Strukturvariablen handelt. – sharvil111

Antwort

2

Um ein gepacktes Array zu haben, müssen alle Elemente gepackt werden. Also entweder die Struktur verpackt machen:

struct packed { 
    logic a; 
    logic b; 
    logic [A - 1:0] [0:B - 1] c; 
    logic [C - 1:0] d; 
    } [D - 1:0] e [0:E - 1][0:F - 1]; 

oder machen die E-Array all ausgepackt

struct { 
     logic a; 
     logic b; 
     logic [A - 1:0] [0:B - 1] c; 
     logic [C - 1:0] d; 
     } e [0:E - 1][0:F - 1][D - 1:0]; 

BTW, ist es sehr empfehlenswert, dass Sie ein typedef für Ihre Struktur verwenden stattdessen einen anonymen Strukturtyp zu haben.

+0

Danke. Die Lösung bestand darin, die Struktur als gepackt zu markieren und das e-Array zu entpacken. Ich habe auch ein Typedef für die Struktur hinzugefügt. – NmdMystery