www.mikrocontroller.net

Forum: FPGA, VHDL & Co. globalen buffer aus prozedur lesen


Autor: Hartmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ihr Leute,

ich moechte gerne aus zwei getrennten Prozessen auf einen globalen
Buffer zugreifen (r/w). Dieser Buffer ist im Top Modell deklariert und
soll dann an die beiden Prozessaufrufe uebergeben werden. Nur da
beginnt mein Problem:

wie kann ich auf diesem Buffer aus den Prozessen zugreifen???

Habe da so an ACCESS gedacht, aber im Netz habe ich gelesen, dass das
nicht sehr effektiv sein soll.

bitte helft mir, muss bald das Programm fertig haben.

Vielen Dank,

H.G

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da musst du schon etwas konkreter werden, was da genau
laufen soll.
Ein glob. Buffer hat einen Ein- und einen Ausgang, an beiden
Seiten wird ja ein Signal dran sein, auf das Du zugreifen
kannst - wo liegt das Problem?

Autor: Hartmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also mein Problem ist das ich an unterschiedliche Prozesse und
Prozeduren ein Bild uebergeben moechte, welche mindestens 320*240
Bildpunkte enthaelt. Wenn ich das Biild so uebergeben moechte, mueste
ich ja jedes bit einzeln uebergeben. Besser waere es dann, sie in einem
globale Buffer zu haben, auf welche dann die Prozesse zugreifen koennen.


OK, ich habe mir die globale Buffer so vorgestellt:

library IEEE;
use IEEE.STD_LOGIC_1164.all;

package my_pac is

  type IMAGE_MEM is array (integer range 0 to MAX_MEM_INDEX) of
std_logic_vector(0 to (PIXEL_WIDTH-1));

  shared variable image_global   :   IMAGE_MEM;
...
In jeden Prozess oder Prozedure, koennte ich dann auf diese Bereiche
zugreifen.

Frage ist jetzt: ist das ein guter Weg, oder kann man das irgendwie
besser machen???

Entschuldigt bitte die Unklarheit in der Frageformulierung. Doch ich
bin total neu im FPGA Gebiet. Sorry

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, dann hatte ich Dich missverstanden.

Ich denke, das wird mit einer Shared Variable nicht
funktionieren. Und 320 x 240 soll ja bestimmt in Block-RAMs
und nicht mit Distributed RAM realisiert werden ( ich geh
mal davon aus, dass Du nicht nur simulieren willst, sondern
das Teil soll auch synthetisierbar sein ?!)

Es kommt ganz konkret auf die Implementierung an. Angenommen,
auf einer Seite wird nur geschrieben und 2 Funktionen wollen
aus dem RAM lesen. Dann brauchst Du bei einem Single-Port-RAM
eine Zugriffssteuerung. Funktion 1 meldet z.B. mit einem Flag (Req),
dass sie lesen will. Wenn nicht gerade Funktion 2 liest, bekommt
sie Adress- und Datenbus und ein Ack-Signal. Ansonsten muss sie
warten, bis Funktion 1 mit Lesen fertig ist und ist danach dran.
Das Modul, welches das RAM beschreibt, muss natürlich auch über
diese Zugriffssteuerung gehen, da es ja nur einen Adressbus gibt.

Besser wäre hier ein Dual-Port-RAM. Da wäre wenigstens zum Schreiben
ein Port komplett frei und den anderen müssen sich die beiden
lesenden Funtionen teilen. Wenn Du genug RAMs hast, könntest Du
in diesem Fall auch 2 Dual-Port-RAMs parallel schalten und brauchst
dann evt. gar keine Steuerung mehr. Du musst aber das Verhalten
des RAMs kennen, wenn auf dieselbe Adresse geschrieben und gelesen
wird (falls das prinzipiell mögl. ist)

Klingt das so, wie das was Du machen willst oder liege ich daneben?

Autor: Hartmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo FPGA-User,

vielen Dank fuer die ausfuehrliche Antwort! Ich arbeite mit dem Spartan
Starter Kit von Xilinx, da es schon ein 2x256kbx16 RAM mit dran hat,
werde ich den natuerlich nutzen. OK.
Meine Idee war nun, dass ich nur einmal das Bild aus dem Speicher lese,
und global speichere. Dann damit arbeite, und dann wieder zurueck ins
RAM schreibe. Ich dachte, dass das Lesen aus dem RAM zu lange dauern
wuerde um direkt mit dem RAM zuarbeiten.

Vielen Dank nochmals fuer die Hilfe und Aufklaerung!

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.