Forum: FPGA, VHDL & Co. Matrix erstellen


von Jerry P. (Gast)


Lesenswert?

Hallo

Ich möchte gerne mit VHDL eine Matrix erstellen um Werten in einem BUS 
Positionen zu zuteilen. Die Matrix muss 1400 Werte in X Richtung und 600 
Werte in Y Richtung aufnehmen.

a(1,1)..........a(1,1400)
.               .
.               .
.               .
.               .
a(600,1)........a(600,1400)

Ich habe in meinem VHDL Buch leider nix gefunden.

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


Lesenswert?

Jerry P. schrieb:
> Ich möchte gerne mit VHDL eine Matrix erstellen um Werten in einem BUS
> Positionen zu zuteilen.
Was wird in der Matrix gespeichert? Bits, Bytes, Worte...?

Was du suchst heißt Array:
http://www.lothar-miller.de/s9y/categories/32-Arrays

> Die Matrix muss 1400 Werte in X Richtung und 600
> Werte in Y Richtung aufnehmen.
Das wären also 840000 Werte. Wenn das Bytes sind, dann brauchst du also 
einen Speicher mit 6,72 MBit. Da brauchst du dann schon ein größeres 
FPGA:
http://www.xilinx.com/products/devices.htm

> Ich habe in meinem VHDL Buch leider nix gefunden.
Welches hast du? Falsch gesucht?

> a(1,1)
In der Hardware-Welt (und auch bei den Softies) wird sehr gern bei (0,0) 
begonnen zu zählen...

von Jerry P. (Gast)


Lesenswert?

Lothar Miller schrieb:
> Was wird in der Matrix gespeichert? Bits, Bytes, Worte...?

Je Position 1 Byte.

Lothar Miller schrieb:
> 6,72 MBit.

nur wenn ich alle Werte / Positionen nutze. Ich möchte aber immer nur 
einige bestimmte Werte ändern. Oder muss ich den Speicherbereich 
trotzdem komplett bereitstellen?

Lothar Miller schrieb:
> Welches hast du? Falsch gesucht?

VHDL Synthese

von D. I. (Gast)


Lesenswert?

Jerry P. schrieb:
> nur wenn ich alle Werte / Positionen nutze. Ich möchte aber immer nur
> einige bestimmte Werte ändern. Oder muss ich den Speicherbereich
> trotzdem komplett bereitstellen?

Wenn man sagen kann wieviele Werte maximal geändert werden, kann man 
Koordinatenkompression verwenden. Ist zwar eine Technik aus der 
Softwarewelt, sollte sich aber mit etwas Aufwand auch in Hardware 
übersetzen lassen

von Morpheus (Gast)


Lesenswert?

Lothar Miller schrieb:
> Was wird in der Matrix gespeichert? Bits, Bytes, Worte...?

Wir, alles, und Neo

von Kalump (Gast)


Lesenswert?

@ D. I. (grotesque)

Wenn ich mal kurz neugierig fragen darf, weil ich zu sprälich besetzten 
Matrizen auch was suche:

> ... kann man Koordinatenkompression verwenden.

Kannst Du da vielleicht mal einen Link mit einer guten Darstellung 
posten?

Ich finde zwar bei Google was unter "Koordinatenkompression ", aber das 
bezieht sich auf Grafiken und scheint vorauszusetzen, das immer 
wenigstens ein unmittelbarer Nachbarpunkt besetzt ist.

von D. I. (Gast)


Lesenswert?

Kalump schrieb:
>> ... kann man Koordinatenkompression verwenden.
>
> Kannst Du da vielleicht mal einen Link mit einer guten Darstellung
> posten?

Leider habe ich selbst keinen Link in Google gefunden der das gut 
beschreibt.
Aber das prinzipielle Vorgehen, wenn man die maximale Anzahl an Werten 
kennt, ist einfach die dimensionen von [1...x] auf [1....|Anzahl Werte|] 
zu mappen und sich das mapping zu merken. Am besten sortiert man die 
Werte vorher noch, dann kann man darauf auch komfortabel rechnen. Wenns 
nur um das Mapping geht, muss man das aber nicht.

Es gab da mal ne Aufgabe dazu:

http://2008.nwerc.eu/problems/nwerc08-problemset.pdf

Aufgabe F

http://2008.nwerc.eu/problems/nwerc08-solutions.pdf
http://2008.nwerc.eu/problems/nwerc08-solutions.tar.gz

Hier findest du 3 Beispielimplementierungen dieses Verfahrens in 
C++/Java

Eine andere Möglichkeit wenn sich die Anzahl der zu verändernden Daten 
nicht ändert wäre noch mittels CRS (Compressed Row Storage) zu 
speichern. CRS funktioniert zwar auch einfügen und entfernen, aber das 
wüsste ich nicht wie man das mal eben in Hardware gießt, ändert sich die 
Zahl nicht ist es nahezu trivial das in Hardware abzubilden. Das ist die 
Wahl bei dünn besetzten Matrizen, aber man kann das natürlich 
zweckentfremden wenn man nur auf bestimmte Werte Zugriff haben will

von D. I. (Gast)


Lesenswert?

Ich habe nochmal darüber nachgedacht:

Also in OPs Fall würde ich die CRS-Methode einsetzen. Es lässt sich 
sogar inklusive Werte einfügen / löschen implementieren (wenn man das 
braucht). Und zwar kann man das mithilfe verketteter Listen auf BRAM 
lösen, wenn einfügen und löschen gebraucht wird, in dem man sich immer 
ein Tupel fester Größe aus Wert und Adresse des nächsten Tupels 
speichert. Ansonsten kann man einfach die Zugriffstabelle hinterlegen.

Beitrag #5197367 wurde von einem Moderator gelöscht.
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.