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?
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
Ä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
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
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
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
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
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
"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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.