Forum: FPGA, VHDL & Co. Geschwindigkeit DDR-Ram


von Hans-Georg L. (h-g-l)


Lesenswert?

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 :)

von Falk B. (falk)


Lesenswert?

@  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

von D. I. (Gast)


Lesenswert?

Falk Brunner schrieb:

>
> Ergo: Man erreicht 95%++
>

Ist auch meine Erfahrung aus dem Praktikum

von Hans-Georg L. (h-g-l)


Lesenswert?

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 ?

von Hans-Georg L. (h-g-l)


Lesenswert?

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

von D. I. (Gast)


Lesenswert?

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.

von Daniel (Gast)


Lesenswert?

Ich würde da auf jedenfall mal mit nem Sicherheitsfaktor von 1,5 oder so
arbeiten, zumindest bis du selbstermittelte handfeste Werte hast.

von Johann (Gast)


Lesenswert?

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.

von Johann (Gast)


Lesenswert?

@ 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.

von Hans-Georg L. (h-g-l)


Lesenswert?

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

von Johann (Gast)


Lesenswert?

Ich habe noch mal nachgerechnet Du hast schon DDR mit einberechnet.

64Bit*155MHz*2=19,84GBit pro Sekunde /8 = 2,48GByte pro Sekunde

von Johann (Gast)


Lesenswert?

@ 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?

von Hans-Georg L. (h-g-l)


Lesenswert?

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

von Johann (Gast)


Lesenswert?

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.

von Johann (Gast)


Lesenswert?

Sonst gehen Daten verloren.

von Hans-Georg L. (h-g-l)


Lesenswert?

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

von Johann (Gast)


Lesenswert?

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)

von Falk B. (falk)


Lesenswert?

@  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

von Johann (Gast)


Lesenswert?

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

von Johann (Gast)


Lesenswert?

Hier mal ein Link zum neuen Intel Standard. Es soll Konkurenz für USB 
3.0 werden

http://www.hartware.de/news_50740.html

von Christian R. (supachris)


Lesenswert?

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.

von Johann (Gast)


Lesenswert?

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?

von Christian R. (supachris)


Lesenswert?

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.

von Johann (Gast)


Lesenswert?

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

von Johann (Gast)


Lesenswert?

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?

von Hans-Georg L. (h-g-l)


Lesenswert?

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 ?

von Christian R. (supachris)


Lesenswert?

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?

von Johann (Gast)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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?

von Johann (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.