mikrocontroller.net

Forum: FPGA, VHDL & Co. Zwei RAM Blöcke für FIFO nutzen


Autor: Dito (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

die Xilinx FPGAs der Spartan 3E-Reihe haben ja auf dem Chip mehrere RAM 
Blöcke, die sich mit dem Core Generator instanziieren lassen.

Mir schwebt nun vor vor, ein FIFO zu bauen, welches aus zwei RAM-Blöcken 
besteht. Der Ausgang von FIFO 1 ist also der Eingang von FIFO 2. Dies 
mache ich, um am Ausgang von FIFO 1 den Bitvektor zusätzlich abgreifen 
und weiter verarbeiten zu können (jepp, für eine spätere 2D-Faltung ;-) 
)

Das funktioniert natürlich nur, wenn die RAM Blöcke unabhängig 
voneinander instanziierbar sind. Ist dies der Fall? Ich denke ja, bin 
mir aber nicht ganz sicher, da ich mit den RAM Blöcken noch nie 
gearbeitet habe.

Danke sagt
Dito

Autor: Dito (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, für den kleinen inhaltlichen Fauxpas: Ich rede erst von einem und 
dann von zwei FIFOS.

Ich meine einen "großen" FIFO, der sich aus zwei hintereinander 
geschalteten "kleinen" FIFOS, FIFO 1 und FIFO 2, zusammensetzt.

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

Bewertung
0 lesenswert
nicht lesenswert
> wenn die RAM Blöcke unabhängig voneinander instanziierbar sind.
Sind sie.

Du kannst sogar aus einen BRAM zwei (z.B. halb soi große) Single-Port 
RAMS oder ROMs machen. Das ist schön, wenn man mehrere kleine Tabellen 
abzulegen hat.

Autor: Dito (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Du kannst sogar aus einen BRAM zwei (z.B. halb soi große) Single-Port
RAMS oder ROMs machen.

Funktioniert denn beim Single-Port auch das gleichzeitige Lesen UND 
Schreiben in einem Takt? Für ein FIFO ist das ja wichtig.... :-)

Dito

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

Bewertung
0 lesenswert
nicht lesenswert
> Funktioniert denn beim Single-Port auch das gleichzeitige Lesen UND
> Schreiben in einem Takt?
Eigentlich schon sich schon, aber das macht keinen Sinn, weil ein 
Single-Port-RAM ja nur 1 Adressbus hat. Es könnte also nur genau die 
Adresse gelesen werden, die gleichzeitig auch beschrieben wird.

Autor: Matthias G. (mgottke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du könntest auch einfach zwei FiFos mit je einem RAM-Block generieren. 
Genauer gesagt eigntlich einen, den Du zwei mal instanziierst. Dort 
baust Du einfach die Weiterleitung der Daten zweischen rein. So hast Du 
auch gleichzeitig zugriff auf die Daten zwischen den Fifos.

Autor: Dito (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Lothar:
Oder man simuliert/emuliert ein FIFO, also bei einem Takt schreiben, 
beim anderen lesen (was aber nur die Hälfte so schnell wäre). Wäre 
warscheinlich auch kein FIFO im eigentlichen Sinne....

@ Matthias:
Ich brauche leider zwei RAM Blöcke, da der FIFO 2400 Elemente aufnehmen 
soll. Bei max. 2048 Elementen würde ich mit einem RAM Block auskommen. 
Dadurch habe ich zwar einen hohen Verschnitt, muss (und kann) ich mit 
leben. ;-)

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur eine Frage :
Warum laßt Du Dir vom Core Generator nicht die FIFOs erstellen?
Dann brauchst Du Dir um BlockRam usw. keine Gedanken machen.
Außerdem funktionieren diese garantiert besser als ein selbstgebautes.

Autor: Dito (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Klaus Falser:
Die FIFOs werde ich mir natürlich mit dem Core Generator erstellen. Mir 
ging es mehr um die korrekte Zusammenschaltung der FIFO-Instanzen.

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Core Generator verwendet für jedes Fifo sicherlich getrennte BRAMs, 
weil jedes Fifo beide Ports der BRAMs verwendet.

Falls es deine Frage war, ob das 2. Fifo den nicht verwendeten Teil des 
1. Blockrams sozusagen "wiederverwertet", dann ist die Antwort ein 
klares Nein.
Das geht nicht.

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.