Forum: FPGA, VHDL & Co. Array's schachteln


von Tino (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Mal eine Frage zu Array's. Wie muss ich ein Array aufbauen, das 1200 
Byte breit ist und 500 lang. Dieses wäre das "Hauptarray". In diesem 
würden sich dann kleinere befinden die das "Hauptarray" füllen.

Oder brauch man das große "Hauptarray" gar nicht?

Ich möchte jedes Array einzeln anprechen können um es zu "füllen".

Das Bild soll nur ne grobe Skizze sein, die Array's sollen viel kleiner 
werden.

Danke für jede Anregung.

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


Lesenswert?

Tino schrieb:
> Wie muss ich ein Array aufbauen, das 1200
> Byte breit ist und 500 lang. Dieses wäre das "Hauptarray". In diesem
> würden sich dann kleinere befinden die das "Hauptarray" füllen.
Der Weg (und die Denkweise) ist genau umgekehrt: du definierst erst den 
"kleinsten" Typ und bastelst dir dann die "größeren" daraus zusammen...


Mach doch einfach ein Array von Arrays...
http://www.lothar-miller.de/s9y/categories/32-Arrays

Es gibt 1000 Wege nach Rom, und fast genausoviele als Lösung für deine 
Aufgabe...

Du definierst z.B. erst mal deinen Basistyp:
1
type BasisTyp is std_logic_vector(7 downto 0);
Dann definierst du ein "kleines" Array:
1
type SmallArrayTyp is array (0 to 100)(0 to 50) of BasisTyp;
Und dann definierst du dein "großes Array:
1
type BigArrayTyp is array (0 to 3)(0 to 2) of SmallArrayTyp;
Und dann legst du das Ding noch an:
1
signal MeinArray : BigArrayTyp;

Allerdings könnte ich mir anhand deiner Zählweise auch eine Liste von 
kleinen Arrays vorstellen:
1
type BigArrayTyp is array (0 to 11) of SmallArrayTyp;
Und dann weiter wie gehabt:
1
signal MeinArray : BigArrayTyp;

BTW: wo im FPGA soll das Ganze denn implementiert werden?

von Tino (Gast)


Lesenswert?

...die Frage stellte sich mir auch schon da ich mal von ausgehe, dass 
der Speicher nicht reicht. Ich hab hier nen Cyclone III EP3C80F484I7

Lothar Miller schrieb:
> Mach doch einfach ein Array von Arrays...
> http://www.lothar-miller.de/s9y/categories/32-Arrays

Deine Seite hat mir schon viel geholfen. Ich denke immer noch zu oft in 
C :). Das ist auch echt schwer nicht immer in Variablen zu denken. :)

von Tino (Gast)


Lesenswert?

ich würde so denken...bitte nicht gleich hauen wenns syntaktischer 
Unsinn ist.

architecture Behavioral of MultidimArray is

type SmallArray is array (0 to 4) of std_logic_vector(3 downto 0);
type FeldTyp0 is array (0 to 8) of SmallArray;
              FeldTyp0 :=  ((x"0",x"0",x"0",x"0",x"0"),
                            (x"0",x"1",x"1",x"1",x"0"),
                            (x"0",x"1",x"1",x"1",x"0"),
                            (x"0",x"1",x"0",x"0",x"1"),
                            (x"0",x"1",x"1",x"1",x"0"),
                            (x"0",x"1",x"1",x"1",x"0"),
                            (x"0",x"1",x"0",x"1",x"0"),
                            (x"0",x"1",x"0",x"1",x"0")
                            (x"0",x"0",x"0",x"0",x"0")); --A

type SmallArray is array (0 to 4) of std_logic_vector(3 downto 0);
type FeldTyp1 is array (0 to 8) of SmallArray;
              FeldTyp1 :=  ((x"0",x"0",x"0",x"0",x"0"),
                            (x"0",x"1",x"1",x"1",x"0"),
                            (x"0",x"1",x"0",x"1",x"0"),
                            (x"0",x"1",x"0",x"1",x"1"),
                            (x"0",x"1",x"1",x"1",x"0"),
                            (x"0",x"1",x"0",x"1",x"0"),
                            (x"0",x"1",x"0",x"1",x"0"),
                            (x"0",x"1",x"1",x"1",x"0")
                            (x"0",x"0",x"0",x"0",x"0")); --B


...das würde ich dann noch 10 mal machen und hätte meine 12 kleinen 
Array's

type BigArrayTyp is array (0 to 3)(0 to 2) of SmallArrayTyp;

Jetzt muss ich ja noch sagen das FeldTyp0 oben links hin soll daneben 
Feldtyp1 etc. Feldtyp5 müsste er ja automatisch unter Feldtyp0 machen.

von Tino (Gast)


Lesenswert?

...achso... über einen Zähler von 0 bis 11 müsste ich ja jedes Array im 
BigArray adressieren können um zu sagen welcher FeldTyp in welches Array 
soll...zumindest verstehe ich laut dem Bsp. hier so.

Lothar Miller schrieb:
> Mach doch einfach ein Array von Arrays...
> http://www.lothar-miller.de/s9y/categories/32-Arrays

von Tino (Gast)


Lesenswert?

was noch zu sagen wäre...der Inhalt der SmallArray's ist statisch. Nur 
die Positionierung der SmallArray's innerhalb des BigArray soll mal 
dynamisch werden.
Der Inhalt der Array's soll geprüft werden, also ob ein 0,1,2,3...etc 
drinsteht und für jede Zahl soll eine Aktion ausgeführt werden.

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


Lesenswert?

Tino schrieb:
> was noch zu sagen wäre...der Inhalt der SmallArray's ist statisch.
Dann pack die Dinger in Block-Rams (oder wie auch immer die bei Altera 
heißen).

> was noch zu sagen wäre...
Lies auf jeden Fall auch noch den User-Guide zu deinem Synthesizer. 
Xilinx XST verdaut solche Arrays nicht mehr:
1
XST supports multi-dimensional array types of up to three dimensions.
Da wäre also schon beim SmallArray Schluss...  :-/

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.