Forum: FPGA, VHDL & Co. Dual Ported Ram


von Fresh (Gast)


Lesenswert?

Hi

Ich habe folgendes Problem. Ich habe 2 Module die sich ein menge an 
Daten (ca 25kbit). Ein Modul schreibt die Daten nur und das andere liest 
die Daten. Daher wäre es doch sinnvoll einen DualPorted Ram zu nehmen? 
Benutze einen Xilinx Sparten 3 und will mir den Ram mit de Core 
Generator erstellen. Gibt es da etwas auf das ich speziel achten muss 
bzw. wie sieht es da mit den timing aus?

MFG Gast

von Falk B. (falk)


Lesenswert?

@  Fresh (Gast)

>die Daten. Daher wäre es doch sinnvoll einen DualPorted Ram zu nehmen?

Ja. Wenn das ganze aber eher einen Datemstrom darstellt, dann eher ein 
FIFO.

>Benutze einen Xilinx Sparten 3 und will mir den Ram mit de Core
>Generator erstellen.

Dann tu das.

> Gibt es da etwas auf das ich speziel achten muss

Nicht direkt.

>bzw. wie sieht es da mit den timing aus?

Steht im Datenblatt. Ist aber trivial.

MFG
Falk

von Fresh (Gast)


Lesenswert?

Hi

Danke für die Antwort. Das mit der FiFo habe ich mir auch überlegt aber 
es ist kein Datenstrom. Das Modul welches was hineinschreibt macht dies 
so ab und zu. Das lesende Modul liest regelmässig alle Speicherblöcke 
durch. Beim Timing stellt sich mir die Frage was passsiert wenn beide 
gleichzeitig auf die selbe Speicherstelle zugreifen wollen?!

MFG Gast

von Falk B. (falk)


Lesenswert?

@  Fresh (Gast)

>durch. Beim Timing stellt sich mir die Frage was passsiert wenn beide
>gleichzeitig auf die selbe Speicherstelle zugreifen wollen?!

Steht im Datenblatt. Der Leser bekommt den aktuellen Wert, der Schreiber 
überschrieb den im nächstzen Takt mit dem neuen Wert.

MFG
Falk

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Beim Timing stellt sich mir die Frage was passsiert wenn beide
> gleichzeitig auf die selbe Speicherstelle zugreifen wollen?!
Definiere "gleichzeitig"  :-o
Theoretisch mußt du dann mit korrupten Daten rechnen.

Hast du den selben Takt am Eingang und am Ausgang?
Dann wirst du kein Problem haben.

von Fresh (Gast)


Lesenswert?

Hi

also ich verwende im gesamten Design den selben Takt. Auch das Ram wird 
bei Port A und bei Port B den selben Takt erhalten. Aber es kann ja 
trotzdem passieren das der eine auf den speicherbereich schreibt von den 
der andere liest oder wird der Ausgang zwischengespeichert?!

Beim schreiben und lesen muss ich nehme ich an in einen Takt das enable 
signal anlegen und die adresse und im nächsten Takt sind die Daten 
bereit bzw gespeichert oder?

MFG Fresh

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> wird der Ausgang zwischengespeichert?!
Ja, das kannst du sogar (begrenzt) einstellen.
Lies mal das Manual zum Thema BRAM.

> Beim schreiben und lesen muss ich nehme ich an in einen Takt das enable
> signal anlegen und die adresse und im nächsten Takt sind die Daten
> bereit bzw gespeichert oder?
Ja, und wenn jetzt Daten an die selbe Adresse geschrieben und von der 
selben Adresse gelesen werden, hast du fast zwangsläufig die alten 
Daten. Du kannst allerdings eine Art "Transparentmodus" einschalten, 
dann bekommst du gleich die aktuellen Daten.

von Fresh (Gast)


Lesenswert?

Bin gerade dabei die Beschreibung von BlockMemory Generator v2,7 von 
Xilinx zu lesen. Habe schon festgestellt das ich gar kein True Dual Post 
Ram brauch sondern ein Simple Dual Port reicht. Weil diese unterstützt 
genau meinen Anwendungsfall. Das mit den Speichern am Ausgang ist nehme 
ich an das Register an Port B oder?

MFG Fresh

von Max (Gast)


Lesenswert?

jip

von Fresh (Gast)


Lesenswert?

Macht es auch sinn diese Register am Ausgang zu verwenden bei einen 
Simple Dual Port? Dadruch dauert das lesen ja einen Zyklus länger was 
mich allerdings nicht stören würde da ich mindestens 100 Zyklen bei 
80MHz zeit habe um etwas zu lesen. Wenn ich die Register nicht verwende 
kann es zu einen fehler kommen oder?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Nicht bei 80 MHz...

Hintergrund:
Das Signal hat aus der Speicherzelle heraus bis an den Port des RAMs 
eine gewisse Laufzeit. Diese Laufzeit addiert sich zu deinem 
anschliessenden Routing+Kombinatorik. Mit dem Register dazwischen 
entkoppelst du die Laufzeit des RAMs und deine Routinglaufzeit. Damit 
wird dein Design u.U. schneller, du hast aber einen Takt Latenz.

von Fresh (Gast)


Lesenswert?

Hi
Habe es nun eh mit eine Register am Ausgang erstellt. Die Latenz ist 
aber nur ein Zyklus von den 80MHz oder? also ich lege die Adresse und 
das Enable SIgnal an Port B an und einen 2Takte Später habe ich den 
Inhalt der Speicherzelle oder verstehe ich das falsch?!

MFG Fresh

von D. I. (Gast)


Lesenswert?

Fresh schrieb:
> Hi
> Habe es nun eh mit eine Register am Ausgang erstellt. Die Latenz ist
> aber nur ein Zyklus von den 80MHz oder? also ich lege die Adresse und
> das Enable SIgnal an Port B an und einen 2Takte Später habe ich den
> Inhalt der Speicherzelle oder verstehe ich das falsch?!
>
> MFG Fresh

Nein so ist es richtig

von Fresh (Gast)


Lesenswert?

HI habe noch ne kleine Frage zum schreiben in den Ram. Das schreiben 
dauert ja auch zwei Zyklen oder? Sprich ich lege mit den Takt die 
adresse und die daten an und setzte das Wea bit und beim nächsten Takt 
wird es übernommen oder?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> lege mit den Takt die adresse und die daten an und setzte das Wea bit
> und beim nächsten Takt wird es übernommen oder?
Richtig, aber nach allgemeiner Lesart ist das nur 1 Takt, denn den einen 
Takt zur Vorbereitung der Adressen bräuchtest du sowieso...

Andersherum wird ein Schuh daraus:
Rechtzeitig vor der Taktflanke müssen die Daten, die Adressen und das 
Enable richtig anliegen, dann wird beim nächsten Takt geschrieben.

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.