mikrocontroller.net

Forum: FPGA, VHDL & Co. Dual Ported Ram


Autor: Fresh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fresh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fresh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fresh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jip

Autor: Fresh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fresh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fresh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

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.