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
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?
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.