Forum: FPGA, VHDL & Co. ADC mit 400MS/s


von Andreas N. (poolspieler)


Lesenswert?

Hallo zusammen,
ich will/muss eine A/D-Wandlung mit einer Abtastrate von 400MS/s 
durchführen. Spannungsbereich 0V..2V.

Zur Applikation:
Es sollen 300 Messwerte aufsummiert und an den Softcore in einem FPGA 
weitergegeben werden. Dieser Wert wird dann weiter verarbeitet.
Ich bin nun hin und hergerissen. Ein Xilinx Spartan-6 SP605 Evakit hätte 
ich hier. Ob es mit dem Spartan-6 überhaupt gehen kann, weiß ich nicht - 
er könnte ja (theoretisch bis zu 1GHz nach dem PLL). Wenn ich die 
A/D-Wandlung auf zwei ADCs aufteile, dann müßte/könnte es doch gehen - 
oder?

Da (wie immer) die Zeit drängt könnte ich für das FPGA dann z.B. so ein 
Modul nehmen:
http://shop.trenz-electronic.de/catalog/product_info.php?cPath=1_65_143&products_id=897

Nur was mache ich mit dem ADC? Da wäre mir ein Modul auch am liebsten - 
weil meine Kenntnisse über HF im GHz-Bereich schon recht begrenzt sind.
Hier gäbe es schon Module:
http://www.xilinx.com/products/boards_kits/fmc.htm#ADDA
--> leider ohne Preise und ohne Lieferzeiten :-(

--> Hat jemand eine Anregung für mich, wie ich diese A/D-Wandlung am 
Besten realisieren könnte?
Am Besten/Einfachsten mit Modulen... Man müsste z.B. wegen ESD-Schutz 
etc. sicherlich seeehr viel beachten und seeehr viel Erfahrung 
mitbringen... oder?
Ich habe mir mal das Welec-DSO angeschaut. Das Routing mit den 
abgerundeten Leiterbahnen ist sicherlich nur ein winziges Teilchen des 
ganzen Puzzles...



Viele Grüsse,

Poolspieler

von Werner (Gast)


Lesenswert?

Andreas N. schrieb:
> ich will/muss eine A/D-Wandlung mit einer Abtastrate von 400MS/s
> durchführen. Spannungsbereich 0V..2V.
>
> Zur Applikation:
> Es sollen 300 Messwerte aufsummiert und an den Softcore in einem FPGA
> weitergegeben werden.

Früher (tm) hätte man das genau andersrum gemacht: Erst einen Analog-TP 
und dann gemütlich mit ein paar MSa/s abgetastet.

von Bon z'O (Gast)


Lesenswert?

>Nur was mache ich mit dem ADC? Da wäre mir ein Modul auch am liebsten -
weil meine Kenntnisse über HF im GHz-Bereich schon recht begrenzt sind.


Dann lass es sein. Es macht keinen Sinn. Kauf ein Scope und lies es aus. 
Ein normales Scope dieser Klasse hat ein Ethernet interface.

von Andreas N. (poolspieler)


Lesenswert?

> Dann lass es sein. Es macht keinen Sinn. Kauf ein Scope und lies es aus.
> Ein normales Scope dieser Klasse hat ein Ethernet interface.

Genau das will ich ja (indirekt) machen!
Ich WILL ja ein Modul mit der fertigen HF-Seite.
Ein fertiges Scope scheidet aus, weil auf diverse externe Takte (exakter 
Auslesezeitpunkt) reagiert - und darauf wiederum Takte nach Aussen 
erzeugt werden sollen. Ausserdem gibt es noch weitere Peripherie, die 
vom FPGA gesteuert werden muss.

Vielleicht hat doch jemand ein schönes Modul - oder zumindest ein 
Reference Design für mich :-)
Wenn alle Stricke reissen, dann werde ich mir halt doch ein Eva-Board 
von ANALOG oder LINEAR oder so, kaufen. Dieses in Betrieb nehmen und 
dannn kopieren bzw. in meine Schaltung integrieren...

FRAGE:
Wenn man den analogen Teil mal beiseite lässt:
Was denkt ihr:
Ist es mit einem Spartan6 möglich, die ADCs auszulesen und die Werte zu 
addieren?
Gefühlt würde ich JA sagen. Ich bin auch gerade dabei, für mein 
Spartan-6 EVA-Board eine Test-IP zu schreiben, um es zu testen.
Eine weitere Meinung vorab wäre halt nett gewesen...

Viele Grüsse,

Poolspieler

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Die Gigasample-ADC gibts ja, z.B. 12 Bit bis 3,6 GS/s
http://www.ti.com/ww/en/analog/dataconverters/gigadc/rf-sampling.shtml
parallele LVDS-Ausgänge, ein Eval-Board gibts auch dazu.

von Thomas R. (tinman) Benutzerseite


Lesenswert?

oder 8bit

http://www.ti.com/tool/adc08d500dev

Der preis ist etwas hoch, dafür bekommt man aber eine komplette lösung.

Du kannst aber auch im netz die firmware + fpga design + sw für das
board finden (Virtex 5), dann auf Spartan 6 umbauen und den analog teil
selber bauen (schaltplan vom analog und digital teil gibts auch im netz)
Das wird dich so um die 500-700EUR kosten (+ Sparatn 6 board),
die WaveVision sw wird damit auch laufen (solange du FX2 für USB 
nimmst).

von Andreas N. (poolspieler)


Lesenswert?

Hallo Thomas,
der Preis wäre gerade noch OK, wenn es 12bit wären UND ein 
Ethernet-Controller OnBoard wäre.

Curtiss Wright hat sehr schöne Sachen im Angebot: 
http://www.cwcdefense.com/products/analog-io-digital-io/analog-io/adc-510-analog-io.html
--> allerdings gibt es auf der Seite keine Preise. Über Google habe ich 
einen Artikel gefunden - wenn man dem glauben kann, dann sind die Preise 
5stellig - und das ist zu viel :-(

Ich werde mal noch weiter suchen vielleicht finde ich ja doch noch eine 
bezahlbare Komplettlösung...

Eventuell beginne ich auch mit dem http://www.ti.com/tool/ads4122evm 
Modul.
Plus ein Spartan-6 - VORHER werde ich aber wohl eine Test-IP plus 
Simulation schreiben, um sicher zu sein, dass das Timing auch erreichbar 
ist...

Weitere Vorschläge sind gerne willkommen :-)

Viele Grüsse,

Poolspieler

von branadic (Gast)


Lesenswert?

Ich hätte noch 4x 250MSPS 10bit ADCs abzugeben, handelt sich um MAX1124.
Ansonsten kann ich auch nur die Evalboards oder sogar nur die 
Performance Development Kits im Falle von TI empfehlen, für das Geld was 
die Kosten bringst du die Hardware nicht im ersten Schuss funktionierend 
auf einen Multilayer, schon gar nicht bei vollkommen fehlender 
Erfahrung.

branadic

von Andreas N. (poolspieler)


Lesenswert?

Hallo branadic,
vielen Dank für Deine Antwort!

10bit sind leider zu wenig... Ich benötige mindestens 12bit.
>für das Geld was
>die Kosten bringst du die Hardware nicht im ersten Schuss funktionierend
>auf einen Multilayer, schon gar nicht bei vollkommen fehlender
>Erfahrung.

Die Erfahrung fehlt "nur" im GHz-Bereich. Für Spartan3E habe ich bereits 
Multilayer Boards entwickelt - und die laufen gut.
Trotzdem hast Du Recht! Man braucht nicht glauben, dass man einen 
Spartan-6 oder gar einen Virtex inklusive Peripherie im ersten Layout zu 
100% zum laufen bringt. Das ist nicht realistisch.

Anscheinend hast Du ja Erfahrung mit dem MAX1124.
Denkst Du, dass man den Spartan-6 (mit bis zu 1GHz nach PLL) eine 
Abtastrate von 400MSPS erreichen kann?

Viele Grüsse,

Poolspieler

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

Andreas N. schrieb:
> Denkst Du, dass man den Spartan-6 (mit bis zu 1GHz nach PLL) eine
> Abtastrate von 400MSPS erreichen kann?
Das hängt auch davon ab, über viele Leitungen/Pins Deine Bits verteilt 
werden.

Hier mal ein Auszug aus dem Datenblatt "Spartan-6 FPGA Data Sheet: DC 
and Switching Characteristics" (DS162),  Abschnitt "Performance 
Characteristics".

Duke

von Andreas N. (poolspieler)


Lesenswert?

Duke Scarring schrieb:
> Andreas N. schrieb:
>> Denkst Du, dass man den Spartan-6 (mit bis zu 1GHz nach PLL) eine
>> Abtastrate von 400MSPS erreichen kann?
> Das hängt auch davon ab, über viele Leitungen/Pins Deine Bits verteilt
> werden.
Es wird ein paralleler Bus von 12 Bit sein, der über eine (oder zwei) 
Taktleitungen gesteuert wird. Wahrscheinlich LVDS.

> Hier mal ein Auszug aus dem Datenblatt "Spartan-6 FPGA Data Sheet: DC
> and Switching Characteristics" (DS162),  Abschnitt "Performance
> Characteristics".
Das verstehe ich gerade nicht, warum ist die Taktrate bei einer HÖHEREN 
Data Width GRÖßER? Das hätte ich genau anders herum erwartet???

Ok, RTFM habe ich noch nicht gemacht - werde ich aber noch :-)
Kann es mir trotzdem jemand kurz vorab erklären?



Viele Grüsse,

Poolspieler

von JBB (Gast)


Lesenswert?

Andreas N. schrieb:
> t es mit einem Spartan6 möglich, die ADCs auszulesen und die Werte zu
>
> addieren?

Der Spartan 6 macht samplingtechnisch ohne Weiteres 250MHz, wenn man 
alles schön pipelined und ordentlich Register reinhaut.

Deine 300 Werte kriegst Du in einem Akku sicher mit 200MHz summiert, 
hast also die Option, 2 parallelle DACs, Datensysteme zu nehmen.

Wenn der DAC mit 400MHz kommt, würde ich parallel versetzt abtasten.

Obdu es mit 400 MHz machen kannst, kann ich Dir nicht sagen. Ich habe 
noch nichts gebaut, das jenseits der 300 MHz mit dem S6 klag.

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Hi,

wenns fertige Module sein sollen, hab ich folgendes im Einsatz gehabt:

TI ADS5463 EVM
TI FMC-ADC-ADAPTER (passt mechanisch nicht bei allen FPGA-Boards)
Xilinx SP601 oder SP605

Datenraten sind gar kein Problem, wie oben schon zu lesen war kann der 
Spartan-6 selbst im Speedgrade -2 (der normalerweise auf den 
Evaluationboards drauf ist) 950MHz Signale eintakten und gleich 
deserialisieren.

Du gehst also für einen 12-Bit ADC z.B. mit 12 LVDS-Pärchen auf den 
FPGA, jedes davon transportiert z.B. 400 MBit/s. Im Spartan-6 
instanziierst du dann für jedes LVDS-Pärchen ein ISERDES2-Pärchen, das 
die Daten parallelisiert und verlangsamt. Intern hast du dann z.B. 12 x 
4 Bit bei 100 MBit/s.

Sebastian

von Andreas N. (poolspieler)


Lesenswert?

Sebastian B. schrieb:
> Hi,
>
> wenns fertige Module sein sollen, hab ich folgendes im Einsatz gehabt:
>
> TI ADS5463 EVM
> TI FMC-ADC-ADAPTER (passt mechanisch nicht bei allen FPGA-Boards)
> Xilinx SP601 oder SP605
Ein SP605 habe ich schon auf meinem Tisch stehen. Damit werde ich dann 
wohl die ersten Versuche machen.
Ansonsten werde ich mir eines der Module bestellen und es mit dem Xilinx 
Board verbinden. Evtl. werde ich halt das Adapterboard selbst 
entflechten - das sollte ja "relativ" schnell gemacht sein ;-)

> Datenraten sind gar kein Problem, wie oben schon zu lesen war kann der
> Spartan-6 selbst im Speedgrade -2 (der normalerweise auf den
> Evaluationboards drauf ist) 950MHz Signale eintakten und gleich
> deserialisieren.
>
> Du gehst also für einen 12-Bit ADC z.B. mit 12 LVDS-Pärchen auf den
> FPGA, jedes davon transportiert z.B. 400 MBit/s. Im Spartan-6
> instanziierst du dann für jedes LVDS-Pärchen ein ISERDES2-Pärchen, das
> die Daten parallelisiert und verlangsamt. Intern hast du dann z.B. 12 x
> 4 Bit bei 100 MBit/s.
>
> Sebastian

Danke für Deine Einschätzung! Das motiviert mich für die weitere 
Entwicklungsarbeit!

Vielen Dank auch für alle anderen Beiträge!

Gruß,

Poolspieler

von Ron Bayer (Gast)


Lesenswert?

Sebastian B. schrieb:
> Du gehst also für einen 12-Bit ADC z.B. mit 12 LVDS-Pärchen auf den
>
> FPGA, jedes davon transportiert z.B. 400 MBit/s.
Viel Spass bei der Definition des Master-Slave SERDES für 12 Bit. Ich 
habe mich wochenlang damit aufgehängt, bis der Buffermist gestimmt hat. 
Mit Coregen ging es damals gar nicht und per Hand nur mit viel Gewürge.

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Ron Bayer schrieb:
> Sebastian B. schrieb:
>> Du gehst also für einen 12-Bit ADC z.B. mit 12 LVDS-Pärchen auf den
>>
>> FPGA, jedes davon transportiert z.B. 400 MBit/s.
> Viel Spass bei der Definition des Master-Slave SERDES für 12 Bit. Ich
> habe mich wochenlang damit aufgehängt, bis der Buffermist gestimmt hat.
> Mit Coregen ging es damals gar nicht und per Hand nur mit viel Gewürge.

Da sehe ich jetzt das Problem nicht so recht.

Einfach den riesigen Codehaufen von der XAPP1064 nehmen, die 
Takterzeugung per PLL und den ISERDES2 in der gewünschten Konfiguration 
rausoperieren.

Die Teile korrekt zu verdrahten, dass die Bits auch in der richtigen 
Reihenfolge aus dem ISERDES rauskommen, ist ein bisschen fummelig, aber 
mit einer kleinen Testbench relativ fix zu prüfen.

Ich hatte hier mal irgendwo ein Beispiel eingestellt für die Sendeseite 
zur Ansteuerung eines TFT. Schaut aber fast genauso aus.

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?


von JBB (Gast)


Lesenswert?

Mein Spartan 6 (-3) sampelt ohne Probleme komplette Busse mit ChipsScope 
auf 350 MHz. Da gehen auch 400 behaupte ich mal.

von Andreas N. (poolspieler)


Lesenswert?

Hallo JBB,
es gibt von ANALOG Bausteine, die sowohl LVDS, als auch CMOS können.
Ist das auch mit CMOS im Spartan-6 machbar - oder sollte es doch lieber 
LVDS sein?

Viele Grüsse,

Poolspieler

von Christian R. (supachris)


Lesenswert?

Andreas N. schrieb:
> oder sollte es doch lieber
> LVDS sein?

Bei solchen Frequenzen sollte man schon LVDS nehmen. Außerdem kann man 
dann die ISERDES/OSERDES in diesem Mode nutzen, wo man noch mehr Bits 
raus/rein schieben kann. Ist alles ein ziemliches Gefummel, auch trotz 
XAPP1064, aber naja.
Man muss dann auch aufpassen, dass das zu den IO-Bänken passt, die haben 
da die Beschränkung, dass ein BUFIO nur eine halbe Bank versorgen kann. 
Leider sind die Xilinx Boards da beknackt angeschlossen, ich kann 
beispielsweise das LTM9011-14 Board nicht direkt an das SP605 
anschließen, weil die Signale über mehrere Bänke verstreut sind.

von Johann (Gast)


Lesenswert?

Die meisten ADCs übertragen die Daten bei dieser Geschwindigkeit als DDR 
Signal. Demnach muss man zuerst ein IDDR Register verwenden und dann ein 
ISERDES.

Jetzt habe ich es bei Spartan nicht in Erinnerung ob es ein ISERDES mit 
DDR Eingang gibt oder ob man zuerst das IDDR benutzen muss und dann ein 
ISERDES

von Christian R. (supachris)


Lesenswert?

Man kann die ISERDES in den DDR Modus schalten (4 Bit -> 8 Bit), und 
dann zwei (Master und Slave) zusammen, wenn man LVDS hat. Somit kommt 
man auf max. 16 Bits pro LVDS Paar.

von Johann (Gast)


Lesenswert?

Ich glaube ich muss mich mit den ISERDES noch mal genauer 
auseinandersetzen. Diese scheine für zukünftige Designs sehr interessant 
zu sein

von Andreas N. (poolspieler)


Lesenswert?

Hallo,
ich habe mir (noch relativ oberflächlich...) die ISERDES Sache 
angeschaut.

Irgendwie habe ich aber ein Verständnisproblem:
Ich verstehe ISERDES so: Wenn man einen SERIELLEN Datenstrom hat, dann 
macht ISERDES daraus einen PARALLEN Datenstrom - es wird also 
deserialisiert. Aus einem hochfrequenten seriellen Datenstrom wird ein 
niederfrequenterer paralleler...
Das ganze geht auch anders herum - aus einem im FPGA parallel 
anliegenden Datenwort (z.B. 16Bit) wird ein serielles Signal erzeugt 
also serialisiert.

Nur wie bringt mich das bei meinem Problem weiter?
Ich habe einen analogen Baustein, der 14 Datenleitungen und eine 
Clockleitung hat. Wenn der Clock auf HIGH geht, dann werden die 14 
Datenleitungen aktualisiert.

WIE bzw. WO greift hier ISERDES?
Ich hätte es mit einem einfachen Zustandsautomaten realisiert - aber das 
scheint wohl nicht zu gehen - oder wo ist mein Denkfehler?



Viele Grüsse,

Poolspieler

von Andreas N. (poolspieler)


Lesenswert?

Hallo nochmal,
ich habe mir ISERDES genauer angeschaut.
Ich habe nun folgendes Verständnis:

- Es liegen z.B. 4 Datenbits und ein Clock mit z.B. 400MHz am 
FPGA-Eingang an (der Clock muss NICHT synchron zum FPGA System Clock 
sein)
- Bei jeder steigenden Flanke des Clocks werden die 4 Datenbits 
übernommen
- wenn z.B. ein Serdes-Factor von 8 eingestellt ist, dann werden alle 8 
Clocks die insgesamt 32 Datenbits PARALLEL ausgegeben
- jedes mal, wenn dies passiert, generiert SERDES einen Clock 
(serdesstrobe), der zur Synchronisation übergeordneter IPs verwendet 
wird

--> habe ich dies richtig verstanden?

Was meint Ihr:
Kann man den Clock (400MHz) vom FPGA erzeugen lassen, oder sollte man 
lieber einen externen Clock Generator verwenden?
Ich habe gehört, dass ein externer Clock wohl die bessere Wahl sei...


Viele Grüße,

Poolspieler

von Sebastian B. (sfreak) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hi Andreas,

serdestrobe ist ein Eingang vom ISERDES.

Wenn du schon einen 400 MHz Clock von außen bekommst, kannst du diesen 
einfach per BUFIO2 an die diveren ISERDES  verteilen. Der BUFIO2 kann 
den schnellen EIngangstakt auch herunterteilen für CLKDIV und FPGA 
fabric.

Sebastian

PS: Oben wurde ja schon geschrieben, das du mit einem BUFIO2 nur eine 
halbe Bank des FPGA erreichen kannst. Das deckt bei den Xilinx 
Dev-Boards meist nicht alle FMC Pins ab. Notfalls hilft hier die 
verwendung von BUFPLL, damit geht IIRC die ganze Bank.

von Andreas N. (poolspieler)


Lesenswert?

Hallo Sebastian,
vielen Dank für Deine Antwort!

> Wenn du schon einen 400 MHz Clock von außen bekommst, kannst du diesen
> einfach per BUFIO2 an die diveren ISERDES  verteilen. Der BUFIO2 kann
> den schnellen EIngangstakt auch herunterteilen für CLKDIV und FPGA
> fabric.
--> Den Clock habe ich noch NICHT - bzw. es ist noch offen, wie dieser 
erzeugt wird.
Die Frage ist, ob die 400MHz vom FPGA per PLL erzeugt und nach aussen 
gegeben werden können. Ich habe mit dem clock generator und dem clock 
wizard im EDK experimentiert, das aber bisher nicht geschafft :-(
Sonderlich gut dokumentier oder gar intuitiv ist das (wie so oft bei 
Xilinx) nicht...

Die 400MHz von aussen zu erzeugen wäre die zweite Wahl. Oder spricht 
etwas explizit für diese Lösung?

Zum Verständnis: Ich bin gerade dabei, das Projekt zu planen. Ich habe 
also die Hardware (bis auf ein Xilinx EVA Board SP605) noch nicht. 
Deshalb wäre ich auch in der Lage, den Clock extern zu erzeugen - wenn 
es denn sein müßte...


Viele Grüße,

Andreas

von Christian R. (supachris)


Lesenswert?

Den Sample-Takt intern erzeugen und dann ausgeben ist immer di 
schlechtere Variante, da du dir dann Jitter rein holst. Und dann ist 
dann direkt in digitales Rauschen umrechenbar. Also lieber extern mit 
einem sehr jitterarmen Oszillator erzeugen, sofern überhaupt verfügbar.

Mit den BUFPLL hab ich irgendwie auch nicht alle 8 Kanäle des LTM9011 
Demoboards auslesen können, da war wieder irgendwas anderes, was dem 
nicht gefallen hat, weiß aber nicht mehr genau, was.

von Andreas N. (poolspieler)


Lesenswert?

Christian R. schrieb:
> Den Sample-Takt intern erzeugen und dann ausgeben ist immer di
> schlechtere Variante, da du dir dann Jitter rein holst. Und dann ist
> dann direkt in digitales Rauschen umrechenbar. Also lieber extern mit
> einem sehr jitterarmen Oszillator erzeugen, sofern überhaupt verfügbar.
>
Hallo Christian,
ich habe es gerade ausprobiert - es ist zumindest möglich, mit dem clock 
generator im EDK 400 MHz zu erzeugen (wenn man es DIREKT im MHS-File 
macht...) und diese dann "external" zu machen und auf einen Pin des 
FPGAs zu legen.

Der Jitter würde mich analog für diese spezielle Anwendung nicht stören.

Und wenn doch extern (wie gesagt, die Hardware steht noch nicht):
Welchen Oszillator würdest Du vorschlagen? Gibt es da ein 
"Allheilmittel"?

Viele Grüße,

Andreas

von Christian R. (supachris)


Lesenswert?

Andreas N. schrieb:
> Und wenn doch extern (wie gesagt, die Hardware steht noch nicht):
> Welchen Oszillator würdest Du vorschlagen? Gibt es da ein
> "Allheilmittel"?

Oha, naja, bei 400Mhz wirds mit einem reinen XO schwierig, da müsste man 
dann einen VCXO nehmen oder sowas. Wir haben immer gute Erfahrungen mit 
Jauch gemacht. Aber Allheilmittel weiß ich keins.

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.