Hallo, ich habe ein 200Mhz DDR Ram mit 16 Bit Datenbus und Burst=4 an einem Spartan6-3. Es wird nur kontinuierlich aufeinanderfolgend gelesen oder geschrieben. Die Bandbreite von 800Mbyte/s schafft man doch nur während einem Burst. Gibt es eine Daumenregel wieviel Bandbreite davon in der Praxis übrig bleibt ? Danke schon mal im Voraus :)
@ Hans-georg Lehnard (h-g-l) >Gibt es eine Daumenregel wieviel Bandbreite >davon in der Praxis übrig bleibt ? Hmm, bin da nicht ganz up to date. Aber vor einigen Jahren hab ich mal an einem Board gebaut, dort liefen 10 Gbit/s drüber, u.a. in einem DDR-Ram zwischengepuffert. 10Gbit/s-> 1,25 Gbyte/s. Da das ein FIFO war, muss jedes Datum gelesen und geschieben werden. -> 2,5 Gbyte/s Der DDR-RAM war 64Bit breit bei 155 MHz Takt, macht theoretisch 2480 Mbyte/s. Also 101% ;-) Ne, die 10G sind Brutto, Netto waren das irgendwas um die 9,5 Gbit/s. Dabei gab es den Effekt, dass mit Autorefresh vom DDR-Ram der Datenstrom Aussetzer hatte, nur mit vom Controller gesteuertem Refresh lief es richtig. Ist ja auch klar, denn damit kann der Datenfluss optimal geformt werden. Ergo: Man erreicht 95%++ MfG Falk
Danke das hilft doch schon mal weiter. Fang ich mal mit der Hälfte an und lass noch Raum für Optimierungen ;) Nächste Frage: Wenn ich jetzt 16Bit mit 200Mhz Sample, habe ich: 2Byte / 5ps = 400Byte / ns Der Ram braucht alle 7,8us einen Refresh der 70ns dauert. Da fallen dann: 28 KByte in den 70ns an, die ich in einem FIFO zwischenspeichern muss wenn ich kontinuierlich Sampeln will. Ist das auch richtig ? Oder kann man beim kontinuierlichen schreiben da was am Refresh drehen ?
Oh was hab ich da für einen Mist geschrieben 1 Der MIG Generator hat mich mit seinen ps ganz durcheinander gebracht ... 200Mhz sind natürlich 5ns und keine 5ps !!! Und ich brauch dann auch nur 28 Byte und keine 28 KByte ... umso besser ;)
Naja du musst dein ankommendes Datenvolumen zwischen 2 Refreshes wegbekommen, sonst staut sich das an. Das reicht nicht nur die 28 Byte zwischen zu puffern.
Ich würde da auf jedenfall mal mit nem Sicherheitsfaktor von 1,5 oder so arbeiten, zumindest bis du selbstermittelte handfeste Werte hast.
Ich würde ich Daten die aus dem AD-Wandler kommen zuerst mal in einem FIFO schreiben und dann kann man diese immer noch in den externen RAM schreiben. Umgekehrt ist es auch wichtig das man eine Anzahl X Werte zuerst aus dem externen RAM ausliest in den FPGA FIFO schreibt und dann über ein Interface an den PC sendet. Ich habe dieses Jahr vor eine 1GBit Ethernet Interface zu programmieren. Da benötige ich dann auch einen einen externen DDR RAM. Jedoch verwende ich keinen Spartan 6 sondern einen Virtex 5. Ich habe auch 2x 400MHz Wandler. Da ich nicht alle Daten über die Schnittselle rüberbekomme, muss ich die Daten in den externen DDR RAM schreiben dann die Digitalisierung anhalten und die Daten per GBit Ethernet an den PC übertragen.
@ Falk Du hast bei Deiner Berechnung sicherlich vergessen das es ein DDR Signal war also werden aus 155MHz 310MHz und die Bandbreite verdoppelt sich somit auf 4960MByte/Sekunde.
Guten Morgen und Danke für die Antworten. Mir ging es hauptsächlich um Grössenordnungen und Verständnis. Zum Testen werde ich den Puffer erst einmal größer machen und den min/max Füllstand überwachen und den gefundenen max Puffer dann verdoppeln als Sicherheit. Die Praxiswerte von ca 95% deuten in die gleiche Richtung. Wobei ich nur einen 16 Bit Bus zu den Rams habe und der mit einem 64 Bit Bus nicht so ohne weiteres vergleichbar ist. Fazit: 32Bit mit 100 Mhz zu samplen und in ein DDR200 mit 16Bit Breite zu streamen ist problemlos, 200Mhz sind dagegen sportlich;)
Ich habe noch mal nachgerechnet Du hast schon DDR mit einberechnet. 64Bit*155MHz*2=19,84GBit pro Sekunde /8 = 2,48GByte pro Sekunde
@ Falk Einfach nur Respekt Respekt Respekt. Da geht schon ordentlich Saft über die Leitung ^^ Es ist schon erstaunlich was für Datentransferraten mit einem FPGA möglich sind. Und es spricht ja auch nichts dagegen den Datenbs von 64Bit auf 128 Bit zu verdoppeln :-) (außer das derjenige der das Routen durchführt graue Haare bekommt und die Hände übern Kopf zusammenschlägt) Hast Du damals einen Spartan 3 oder Virtex 4, 5 verwendet?
Johann schrieb: > Ich würde ich Daten die aus dem AD-Wandler kommen zuerst mal in einem > FIFO schreiben und dann kann man diese immer noch in den externen RAM > schreiben. Das externe Ram soll bei mir als Ringpuffer dienen und auf ein Triggersignal wird das Samplen angehalten und die Vorgeschichte aus dem Ram in den PC gelesen. Die Speicherkapazität von Rams ist größer und billiger wie die von FPGA's. >Umgekehrt ist es auch wichtig das man eine Anzahl X Werte > zuerst aus dem externen RAM ausliest in den FPGA FIFO schreibt und dann > über ein Interface an den PC sendet. Das Auslesen erfolgt bei mir über USB mit ca. 30MByte /s und ein Fifo ist da wegen dem Clock domain crossing sicher notwendig aber unkritisch. > > Ich habe dieses Jahr vor eine 1GBit Ethernet Interface zu programmieren. > Da benötige ich dann auch einen einen externen DDR RAM. Jedoch verwende > ich keinen Spartan 6 sondern einen Virtex 5. Ich habe auch 2x 400MHz > Wandler. Da ich nicht alle Daten über die Schnittselle rüberbekomme, > muss ich die Daten in den externen DDR RAM schreiben dann die > Digitalisierung anhalten und die Daten per GBit Ethernet an den PC > übertragen. Virtex kostet ein bissel mehr ;)
Verwendest Du den FTDI FT2232H als USB Interface. Mit dem habe ich gerade ein Projekt gemacht. Nur bei mir war die Digitalisierung deutlich langsamer (ca. 32MSample) Außerdem habe ich noch aus 32 Messwerte durch aufaddieren 1 erzeugt. Daher reicht mir der interne RAM beim Spartan 3 aus. Fals Du den FT2232H als USB Device benutzt dann achte auch die #THE Leitung. Die kann im Worst Case Fall 7ns hinter der ansteigenden CLK Flanke kommen, da die Periode nur 16ns ist und die Setup und Hold Zeit für die Daten mindestens 11ns beträgt muss man dementsprechend in die Zukunft schauen und die Daten dann gegenfalls erneut senden.
Hallo Johann, ich verwende den CY7C68013a im Slave Mode und da sollten 30Mb machbar sein. Man muss halt immer grosse Blöcke anfragen, damit der USB ausgelastet ist. Konkret verwende ich das Spartan6 FPGA Board von ZTEX. Leider lässt die Doku zu dem Board zu wünschen übrig ...
Ah so Du verwendest also den Cypress USB Chip. Es gibt ja nur 2 Chips uns zwar den von Cypress und den von FTDI. Der FTDI ist jedoch deutlich einfacher zu handhaben und die PC Seite ist da auch deutlich einfacher. (max Datendurchsatz ist 45MByte\s)
@ Johann (Gast) >Einfach nur Respekt Respekt Respekt. Da geht schon ordentlich Saft über >die Leitung ^^ Kann man so sagen. Das Datenvolumen von 2 CDs pro Sekunde :-0 >Hast Du damals einen Spartan 3 oder Virtex 4, 5 verwendet? Weder noch, es war ein ASSP, VSC9125 von Vitesse. MFG Falk
Ich bin momentan bei 1CD (ca.680MByte pro Sekunde) angekommen. Ich habe auch überlegt ob ich 10GBit Ethernet Vebindug als nächstes nehmen soll, da gibt es ja inzwischen PCIe Karten für den PC. Der neue 10GBit Intel Standard der dieses Jahr erscheint ist aber auch sehr interessant
Hier mal ein Link zum neuen Intel Standard. Es soll Konkurenz für USB 3.0 werden http://www.hartware.de/news_50740.html
Eine Alternative wäre auch PCI Express External Cabling. Da kannst du bis zu 7m Kupferkabel machen und das bei maximal PCIe x16. Die Hardware für die Host-Adapter gibts zum Beispiel hier: http://www.onestopsystems.com/pcie_host_adapters.php auf der Geräteseite ist dann lediglich ein Cable Driver Chip am PCIe Controller nötig. Mit Wenig Aufwand kannst du zum Beispiel den Gennum 4124 http://www.gennum.com/products/bridges/gn4124 oder halt einen der PCIe x4 Endpoints im Virtex benutzen. Damit erreichst du dann die 680MB/s und bist nicht auf das für solche Zwecke bekloppte IP Protokoll angewiesen.
Aber ich muss doch dann das PCIe Protokoll implementieren und das ist doch sicherlich auch nicht besser und wenn ich dann noch an den PC Treiber denke ^^ Wenn ich so ein PCIe Evaluation Board kaufe, dann kann ich dies sicherlich nicht mit dem Kabel an den PC anschließen sondern muss mir sicherlich zuerst eine eine neue Hardware erstellen?
Wenn du einen Gennum Chip nimmst, musst du gar nix implementieren, macht alles der Chip und der mitgelieferte DMA Core. Beim Xilinx EndPoint Block siehts ähnlich aus, da wird das meiste im Core abgehandelt. DMA müsste man da noch selbst implementieren, soweit ich das überblicke. Treiber gibts von Gennum bzw. Xilinx für die PC Seite. Bei Xilinx ist es glaub der Jungo Driver. Wir setzen den PLX x1 Chip ein, ist total einfach anzusteuern.
Hallo Christian das hört sich doch sehr vielversprechend an. Ich habe die Dokumente schon mal überflogen. Eigentlich sollte es doch auch möglich sein 2 von diesen Chips parallel zu schalten und dann PCIe X8 für wenig Geld zuhaben. Ich suche gerade na dem Evaluation Board und wo man es kaufen kann. Vielleicht sollten wir ein eigenes Thema aufmachen für diesen Chip und dem Evaluation Board
Ich kann leider kein Infos zum Demoboard finden. Ich habe zwar den Schaltplan jedoch kann ich nicht kaufen. Gibt es überhaupt eine Version zu kaufen oder muss man es sich selber fertigen lassen?
Johann schrieb: > Ah so Du verwendest also den Cypress USB Chip. Es gibt ja nur 2 Chips > uns zwar den von Cypress und den von FTDI. Der FTDI ist jedoch deutlich > einfacher zu handhaben und die PC Seite ist da auch deutlich einfacher. > (max Datendurchsatz ist 45MByte\s) Hallo Johann, hab mir gerade mal den FT2232H auf der FTDI Seite angeguckt. Da steht: RS232/RS422/RS485 UART Transfer Data Rate up to 12Mbaud. USB to parallel FIFO transfer data rate up to 10Mbyte/sec. Single channel synchronous FIFO mode for transfers > 25 Mbytes/sec. Wie kommst du auf 45MByte /s mit dem Ding ? Ich glaube nicht, das FTDI so untertreibt ;) Was hab ich da übersehen ?
Johann schrieb: > Ich kann leider kein Infos zum Demoboard finden. Ich habe zwar den > Schaltplan jedoch kann ich nicht kaufen. Gibt es überhaupt eine Version > zu kaufen oder muss man es sich selber fertigen lassen? Hm, gute Frage. Wir haben dann wie gesagt, erst mal den PLX 8311 genommen, weil wir nicht so viel Zeit hatten. Parallel schalten...naja, so einfach ist das auch nicht, die Daten müssen ja irgendwann synchronisiert werden. PCIe x8 geht ja aber schon mit dem Virtex 5 im Hard IP Block. Das x8 kann man auch locker über die iPass Kabel leiten. Die Frage ist eher, was du mit den Daten im PC dann machst.....wohin so schnell speichern?
Wenn man den FTDI im sync FIFO Mode betreibt dann erreicht man zwischen 41 und 45MByte pro Sekunde es steht größer als 25MByte. In einem Treiberrelease steht das die Datentransferrate deutlich gesteigert wurde so das jetzt 41Mbyte erreicht werden. ICh habe es selbst getestet.
Wobei die Sache mit den Setup-Zeiten am Full-Flag des FT2232H schon irgendwie blöd ist...läuft das in der Praxis zuverlässig?
Das mit dem PC ist nicht das Problem. Ich verwende auf Grafikkarte als CO Prozessor um die Daten schnell genug auszuwerten. Dann wird das Ergbnis in eine PCIe SSD geschrieben, die Kann momentan gute 700MBtye pro Sekunde speichern. Die SSD hat 100GByte und ist per PCIex8 angeschlossen und kostet so ca 350€.
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.