Forum: FPGA, VHDL & Co. unconstrained Array von Arrays - Wie korrekt Größe deklarieren?


von dfgh (Gast)


Lesenswert?

Ich möchte bei einem Zweidimensionalen Array einzeln auf die Spalten 
zugreifen können, also habe ich ein Array von Arrays erstellt:
1
type Daten_Array is array (natural range <>) of Daten;
2
type Daten_Array2 is array (natural range <>) of Daten_Array;
Da nun aber beide Typen in der Größe erst nachher festgelegt werden 
sollen, benötige ich so etwas wie
1
variable Puffer : Daten_Array2(0 to LAENGE-1)(0 to BREITE-1);
was aber offenbar in VHDL nicht geht (Fehlermeldung).

Wie macht man so etwas nun am besten?

von user (Gast)


Lesenswert?

du kannst das Array so definieren

type type_arr is array(natural range <>, natural range <>) of Daten;

von dfgh (Gast)


Lesenswert?

Das ist mir soweit auch klar, aber wie greife ich dann auf die 
Zeile/Spalte zu, also
1
variable Puffer : Daten_Array2(0 to LAENGE-1, 0 to BREITE-1);
2
variable Pufferzeile : Daten_Array(0 to BREITE-1);
3
Pufferzeile := Puffer(index);
Bei einem Zweidimensionalen Array wir ja immer auch eine Angabe für die 
zweite Dimension benötigt, die ich hier aber weglassen will.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

dfgh schrieb:
> was aber offenbar in VHDL nicht geht (Fehlermeldung).
Welche?

> Wie macht man so etwas nun am besten?
Was willst du denn überhaupt machen?
Soll das nur eine Testbench geben oder willst du das in ein FPGA packen?

von dfgh (Gast)


Lesenswert?

Fehlermeldung:
1
ERROR:HDLCompiler:1174 Illegal syntax for subtype indication

Das Ganze soll Teil eines Puffers im FPGA werden, von dem ich sowohl die 
Ein/Ausgangsbreite als auch die Pufferlänge einstellbar lassen will. Mit 
Generics müsste ich dann nur einmal im ganzen Projekt die Pufferbreite 
Umstellen und schön könnten doppelt so viele Kanäle verarbeitet werden.

Der Puffer hat mehrere Eingänge vom Typ "Daten", die alle gleichzeitig 
ein und wieder ausgelesen werden, d.h. ich benötige Zugriff auf die 
volle Breite des Puffers (Schleifendurchläufe wären eher ungünstig), 
also auf eine Spalte/Zeile des Arrays, nicht auf die einzelnen Elemente 
(wie es bei einem "normalen" 2D-Array der Fall ist).

von Christoph Z. (christophz)


Lesenswert?

dfgh schrieb:
> Bei einem Zweidimensionalen Array wir ja immer auch eine Angabe für die
> zweite Dimension benötigt, die ich hier aber weglassen will.

Ich habe bei mir das so gelöst, dass ich für den Zugriff auf eine Zeile 
eine function definiert habe. Als Parameter bekommt diese Funktion das 
Array und die angabe für die erste Dimension und liefert eine ganze 
Zeile zurück (Länge der Zeile kann man mit 'Range ja problemlos 
herausfinden).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.