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.
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...
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
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
Lothar Miller schrieb: > Was wird in der Matrix gespeichert? Bits, Bytes, Worte...? Wir, alles, und Neo
@ 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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.