mikrocontroller.net

Forum: FPGA, VHDL & Co. Matrix erstellen


Autor: Jerry P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Jerry P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Morpheus (Gast)
Datum:

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

Wir, alles, und Neo

Autor: Kalump (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.