Hallo miteinander, ich bastel mir gerade ein Design auf meinem Spartan-3E und hänge nun an folgender Frage. Ich habe mir mit dem Xilinx Tool den DualPortRam eingbaut mit der Konfiguration 5 downto 0 Adressen und 63 downto 0 Daten. Nun möchte ich von einer Seite des DPRs mit einer Entity lesend und schreibend zugreifen das macht auch keine Probleme, nur auf der anderen Seite bin ich am überlegen wie ich das handhabe, da dort jeweils 2 lesend und 2 schreibende Entities angeschlossen sind die per Chipselect gepollt werden um den Speicherzugriff zu schützen. Wird im Endeffekt von einem Scheduler gesteurt. Ich dachte jetzt, dass die Synthese das schon checkt durch den Scheduler aber ich bekomme immernoch die Fehlermeldung: Multi-source in Unit <top_prototyp> on signal <addr2<0>>; this signal is connected to multiple drivers. Meine Frage ist nun sollte ich eine zusätzlich Weiche einbauen (entweder komplett zusätzliche Entity oder im Scheduler) welche mir die Adressen nur im bestimmten Fall durchschleift? Zur Verdeutlichung: -------------| |---------------| |----------| Entity1 |-----| DualPortBlock |------o-------| Entity 2 |_ | | | \ |----------| \ -------------| |---------------| \ \ | \ |----------| | | \---| Entity 3 | |cs2 \ |----------| | \ | | \ cs0 cs1 \-------|-----------|-------------------/ / | Scheduler | / |-----------|------------------------------/ Naja ich hoffe ist klar, ansonsten muss ichs doch noch genauer Zeichnen. Für weitere offene Fragen die ich in der Eile vergessen haben sollte, bin ich natürlich jederzeit zu sprechen.
> Meine Frage ist nun sollte ich eine zusätzlich Weiche einbauen
Ja, diese "Weiche" heißt Multiplexer. Den brauchst du, um die Signale
entsprechend deiner CS1 und CS2 umzuschalten...
-------------| |---------------| |----------| Entity1 |-----| DualPortBlock |-----MUX------| Entity 2 |_ | | | \ |----------| \ -------------| |---------------| \ \ | \ |----------| | | \---| Entity 3 | |cs2 \ |----------| | \ | | \ cs0 cs1 \-------|-----------|-------------------/ / | Scheduler | / |-----------|------------------------------/ Ok, dachte ich mir schon. In diesem Sinne ist meine Frage auch schon beantwortet, danke Lothar
je nach verwendeter Taktrate ist es auch möglich die zweite seite doppelt so schnell zu takten und beide zugriffe in einem "originaltakt" abzuarbeiten. Dann brauchst du auch den scheduler nicht.
Hab nur eine Taktdomain. Läuft also alles synchron, daher auch der Scheduler der alles nacheinader abholt. Soll später auch noch um weitere Entities erweitert werden. Ist nur mein erstes FPGA, VHDL Projekt und weiss noch nicht so genau wo ich mir was sparen kann. Aber wie gesagt - Danke für die fleißige Hilfe :)
Nimm einen Cyclone statt des Spartan. Der hat einen dritten RAM-Anschluss
>... Der hat einen dritten >RAM-Anschluss 3. RAM-Anschluss? Welcher M4K/M9K in welchem Zyklon kann dass? Hardwareseitig werden nur 2 Ports unterstützt.
Sigi schrieb: > Hardwareseitig werden nur 2 Ports unterstützt. Man kann bei allen anderen FPGA-Herstellern auch zwei RAMs so verschalten, dass von einer Seite geschrieben und von zwei (oder noch mehr) Seiten gelesen werden kann. Dazu werden dann einfach ein paar RAMs parallelgeschaltet. Das geht aber nicht mehr, wenn (wie hier) von mehreren Seiten geschrieben werden soll.
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.