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


von Hartmut (Gast)


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

von FPGA-User (Gast)


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?

von Hartmut (Gast)


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

von FPGA-User (Gast)


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?

von Hartmut (Gast)


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!

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.