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


von Dito (Gast)


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

von Dito (Gast)


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.

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


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.

von Dito (Gast)


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

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


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.

von Matthias G. (mgottke)


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.

von Dito (Gast)


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. ;-)

von Klaus F. (kfalser)


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.

von Dito (Gast)


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.

von Klaus F. (kfalser)


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.

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.