www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Geschwindigkeit Blockram


Autor: Spartakus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi...
Ich stöbere grad im Manual Xapp463 um die geschwindigkeit für den
Blockram beim Spartan-3 zu ermitteln, nur leider finde ich dort nichts.
Kann ich den Speicher mit 300 Mhz Takten? oder ist der blockram nixcht
so fix?

Autor: Patric (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
IIRC stand da glaube ich maximal 200MHz.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch erst mal eine SChaltung zu erstellen, mit der Du den BlockRAM
mit 200 MHz ansteuern kannst, dann wirst Du sicherlich schnell
feststellen, das man dafür sehr gut sein muss.

Mal ein kleiner Tip. Wenn Du z.B 5 BlockRAMs benutzt, dann benötigst Du
keine 300MHz Takt, sondern 60 MHz. Du nimmst einen FIFO. Dort schreibst
Du alle 5 Werte rein (Zwischenspeicher) Wenn dieser voll ist, dann
übergibst Du den ersten Wert aus den FIFO an den RAM, den zweiten,
dritten ... . (einfach die Datenleitungen des RAMS mit dem FIFO
verbinden)

Alle RAMs bekommen den den gleichen Adresszähler und die gleiche
Enable-Leitung.

Hoffe es hat DIr geholfen

Grüsse

Michael

Autor: Konstantin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Äh?
@Michael: sorry, aber Dein Tip ist irgendwie komisch :-o Irgendwie kann
ich mir da nichts zusammenreimen.
Hast Du denn selber sowas gemacht? Und hat es funktioniert? ;-)

Gruß

Konstantin

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stelle dir 5 Datenkanäle vor, am Eingang liegen 5 schnelle
Zwischenspeicher mit jeweils zb 16Bit Breite, dahinter liegen 5
BlockRAMs. Diese 5 Zwischenspeicher = FIFO's werden nun gemeinsam in
einem Rutsch in deren BlockRAMs gespeichert. Wenn man die BlockRAMs mit
60Mhz aus diesen FIFO Zwischenspeicher beschreiben kann, dann kann man
die FIFO's selber mit 5 * 60 = 300MHz befüllen.
Damit das funktioniert muß dieser FIFO also 2*5*16Bit fassen, während
also 1 Bank a 5*16Bit des FIFOs mit 300Mhz befüllt wird, wird die
andere inaktive Bank a 5*16Bit in 5 BlockRams gespeichert.
Ergo: nur die FIFO Zwischenspeicher müssen für 300Mhz ausgelegt sein,
die BlockRAMs müssen max. 60MHz schaffen.

Das ist im Grunde nichts Anderes als ein Cache Mechanismus so ähnlich
wie bei großen CPU's.

Gruß Hagen

Autor: Konstantin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, egal...

also ich habe schon eine ganze MEnge Zeug gemacht (auch mit FIFOs und
LVDS und riesen Bandbreiten), aber das kapiere ich einfach nicht :-o
Also verstanden habe ich es (denke ich jedenfalls)

Du hast 5 Datenkanätte - je 16 Bit@300 Mhz. Soweit richtig?
Jetzt erklär mir bitte, wie man die in 5 Blockrams bei 60 MHz
unterbringen kann.

Wie es funktionieren könnte, wenn man nur EINEN Datenkanal bei 300 Mhz
hat. Und einfach jeweils einen 16 Bit Wert im BLOCK-Ram speichert
(insgesammt dann 5 Blockrams bei 60 Mhz). Meinst du das? RTL -
Zeichnung wäre schön, aber ich weis nicht, wie ich auf die schnelle
eine zeichnen könnte :-(

JEtzt mal ganz was anderes: was ist, wenn man FIFO im Blockram hat? :-o
;-) Henne - Ei...

Konstantin

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
anders ausgedrückt,

du möchtest sequientiell einen Datenstrom von 16Bit Werten die mit
300MHz reinkommen in den BlockRAM speichern. Du weist das der BlockRAM
nicht mit mehr als 200MHz angesprochen werden kann. Die Lösung des
Problemes: "mache aus 1 Kanal sequientiell einfach 5 Kanal
parallel".
Dazu wird der BlockRAM in 5 paralelle Speicherbereiche mit gemeinsammen
Addressbus zerlegt. Dann werden sequientiell 5 sehr schnelle Register
mit fünf 16 Bit Werten bei 300MHz nacheinander befüllt. Wenn das 5.
Register voll ist werden diese 5 Register in einem Rutsch in die
entsprechenden 5 BlockRAMs gespeichert.

Also: bei 300Mhz jeweils 16Bit, 300MHz / 5 = 60Mhz je 5 * 16Bit in
parallel in BlockRAMs gespeichert.

Ist das wirklich so "un-verständlich" ausgedrückt ?

Auf alle Fälle kannst du mit der richtigen Logik also auch langsamme
Speicher sehr schnell mit großen Datenmengen befüllen.

Gruß Hagen

Autor: Konstantin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab's kapiert, keine Sorge ;-)

Nur womit ich am Anfang Probleme hatte, waren eben FIFOs. Ich bin der
Meinung, dass die BEzeichnung einfach falsch ist. Verstehst Du wie ich
es meine? Also First In passt ja, aber First Out ist Blödsinn. Denn man
ließt ja mehrere Bytes (Werte) gleichzeitig aus :-o

Und eben das habe ich vorhin nicht kapiert :-) (bzw. falsch
interpretiert)

Gruß

Konstantin

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stimmt schon FIFO ist ein Algorithmus=Arbeitsanweisung beim dem das was
als erstes rein geht auch wieder raus kommt. Ein Schieberegister könnte
so ein FIFO sein. Aber das FIFO/FILO usw. sagt rein garnichts über
dessen Sepichertiefe in Bits oder sogar WAS dort drinnen gespeichert
wird aus. Ein FIFO kann also auch 16Bit breit sein und sozusagen
Word-basiert arbeiten. Es könnte aber auch ein Getreidesilo sein in dem
man Oben neues Getreide reinschüttet und Unten das alte Getreide wieder
rausholt -> also FIFO mäßig.

Ok, in diesem Thread sollte FIFO nur was über die allg. Vorgehensweise
aussagen und die Logik wie man welche Daten in die BlockRAMs speichert.
Und sequientiell betrachtet kommt das 1. Datenword in den FIFO und auch
als erstes wird es in den BlockRAM No. 1. gespeichert.

Denkt man Matthias Vorschlag weiter so könnte man auch einen FIFO mit
zb. 4 *5 Worten benutzen. Sozusagen ein FIFO mit 4 Spalten a 5 Word. So
entstünde ein Cache bei dem Spaltenweise die 5 Word in 5 BlockRAMs
gespeichert werden. Sinnvoll wird sowas wenn man zb. einen Trigger auf
Daten anwenden möchte. D.h. nur wenn nach 4*5 Datenworten ein ganz
bestimmtes Muster erkannt wurde, bei 300Mhz Sampling, möchte man die
Ausgabeworte des FIFOs auch wirklich in die BlockRAMs speichern, mit
dann 60Mhz.

Somit meine ich das Matthias mit dem FIFO schon den richtigen
Fachbegriff in die Runde geworfen hat.

Gruß Hagen

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Matthias" ist da nicht ganz richtig :-) (Michael ist mein Name aber
egal)

Auch einen FIFO mit 300MHz zu befüllen ist eine nicht gerade einfache
Aufgabe, wenn nicht fast unlösbar. Zudem musst Du auch noch andere
Prozesse mit der schnellen Geschwindigkeit abarbeiten (z.B. die
Digitalisierung)

Welchen FPGA Baustein möchtest Du denn dafür benutzen?

Gruss

Michael

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.