Forum: FPGA, VHDL & Co. dynamische Datenstruktur in VHDL


von Peter (Gast)


Lesenswert?

Ich kann mir die Antwort schon fast selbst geben, trozdem: Gibt es in 
VHDL eine Möglichkeit eine dynamische Datenstruktur aufzubauen? Also 
sowas wie eine verkettete Liste?
Ich muss ein paar Daten vorausberechnen, auf die ich hinterher zugreifen 
muss. Dabei ist die Anzahl der Daten per Register einstellbar

von Mark (Gast)


Lesenswert?

Hallo Peter,

in VHDL kannst Du (fast) alles machen, meine 1. Frage ist:
soll das synthesefähig sein oder nicht?

2. warum muss es eine verkettete Liste sein? (Ich nehme jetzt mal
an, die Datenblöcke sind unterschiedlich groß)
also wenns unbedingt so eine Liste sein soll, dann baust
Du Dir einfach eine entspr. RAM-Struktur.
z.B. 1. Byte=Anzahl Blöcke, dann jeweils pro Block 1.Byte=Block-Nr., 
2.Byte = Blocklänge, damit hast Du eine einfache Liste.

Ist es das, was Du suchst?

von Peter (Gast)


Lesenswert?

Hi Marc! Danke für deine Antwort.
Zu 1.: ja, der Code soll synthetisierbar sein.
Zu 2.: so richtig habe ich das nicht verstanden.
Ich erkläre mein Problem mal vielleicht etwas ausführlicher.
Per mathematischer Funktion werden Stützstellen einer Funktion 
berechnet. Die Anzahl der Stützstellen hängt von verschiedenen 
Parametern ab, die über Register eingestellt werden.

von Klaus F. (kfalser)


Lesenswert?

> Zu 1.: ja, der Code soll synthetisierbar sein.

Nein, dann geht es nicht, schließlich muss VHDL in Hardware umgesetzt 
werden und man kann (leider noch ) nicht Transistoren dynamisch 
erzeugen.

Du muss mit der maximalen Anzahl von Stützstellen rechnen, bzw. den Kode 
für den größten Fall dimensionieren.

von Mark (Gast)


Lesenswert?

Hallo Peter,

hmm, mal angenommen so eine Stützstelle lässt sich mit Hilfe eines
Records beschreiben. Und die Anzahl dieser Records ist erstmal
nicht bekannt. Dann kann man doch einfach eine Funktion schreiben,
die so einen Record in eine RAM-Adresse X schreiben kann.
In dem Record gibt es ein Flag z.B. 'Last_Record'. Das setzt Du
auf 1 beim Schreiben des letzten Datums.
Der Ablauf wäre nun wie folgt:
1) Math-Funktion liefert Datum (Record)
2) Record im RAM ablegen, beim letzten das Flag setzen
3) Adresse inkrementieren
4) Loop solange wiederholen bis alle Datensätze abgelegt wurden.

Die RAMs müssen natürlich - da hat Klaus Recht - in der max. möglichen
Anzahl verfügbar sein. Das ist aber bei einem PC auch nicht anders -
OK da gibts noch andere Speichermöglichkeiten - aber wenn das RAM
voll ist dann ist eben Schluss.

von Klaus F. (kfalser)


Lesenswert?

Das ist viel zu PC-mäßig gedacht.
Wenn es nur darum geht, Daten vorauszuberechen, dann ist es besser diese 
am PC zu rechnen und an das FPGA zu überspielen.

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.