Hallo @ all FPGA User,
Wir benötigen eine schnelle Datenerfassungskarte (400MHz). Nun habe ich
gesehn das Ti neue ADCs im Angebot hat (Monoflopwandler mit 400 und
500MHz). Jetzt wollte ich mal einen Spartan 6 ausprobieren. Hierzu will
ich einfach den 400MHz Wandler direkt (12LVDS Paare) an den FPGA
anschließen. Über einen externen Quarz von 50MHz ,den ich im FPGA mit
Hilfe vom DCM auf 400MHz aufbohre wollte ich dann die Ansteuerung des
ADC vornehmen.
Im Prinzip muß man "nur" denn 400MHz Takt auf den ADC geben und
gleichzeitig die Ports einlesen. Diese 12 Bits wollte ich dann über eine
Camera Link Schnittstelle an eine Framgrabberkarte senden.
Ist das realistisch, das man mit dem Spartan 6 eine solche Anwendung
hinbekommt?
Schalten die LVDS-Ports des SPartan 6 denn überhaupt schnell genug, oder
muß ich diese an spizielle Ports hängen?
Ich glaube der Spartan wird dazu vielleicht nicht so gut geeignet sein,
denn der BlockRAM zum Beispiel geht nur bis 250MHz....musst du erst mal
schauen, was die einzelnen Komponenten so mitmachen.
Ich meine ja den neuen Spartan6. Da geht der BlockRAM sicherlich
deutlich schneller als 250MHz. Außerdem kann man ja einen nexternen DDR2
RAM als Zwischenpuffer nehmen.
Ich meine auch den neuen Spartan 6 und dessen Blockram schafft 250MHz.
Über den neuen Memory Controller und externen RAM sollte es denke ich
aber klappen. Die PLL geht bis 1050MHz, also ausreichend. Musst halt
gucken, ob das mit den Inputs klappt, denn der Spartan bietet keine
kalibrierten, temperaturstabilen Input-Delays.
1050MHz ist ja eine Hammergeschwindigkeit ^^. Mich wundert halt nur das
man den internen Clock bis 1050MHz hochtreiben kann, jedoch der interne
BlockRam nur bis 250MHz geht.
Jedoch kann man ja mehrere BlockRams parralel betreiben. Wenn man der
Datenbus des ADCs 12Bit ist, dann erzeugt man einen Fifo den man z.B.
mit 1000MHz befüllt und alle 250MHz wird dann in die RAMs geschrieben.
Danke schon mal für die Infos Christian.
Hast Du schon mit den neuen Spartan 6 oder Virtex 6 gearbeitet?
Ich habe mal versucht das ganze auf Papier zu bringen.
Es gibt z.B. von Ti einen 12Bit 500MHz Wandler (ADS5444). Dieser bekommt
das Signal und einen Clock. Die Frequenz des Clocks beträgt z.B. 400Mhz.
Der AD-Wandler erzuegt 12LVDS Datenpaare und ein LVDS DATA_READY Signal.
Diese möchte ich auf einen FIFO geben, der 24LVDS Bits speichern kann.
Vielleicht gibt es auch eine bessere Möglichkeit als mit dem Fifo. Aus
dem Fifo kommt dann alle 200MHz 24Bit LVDS Daten, die an den Spartan 6
gehen. Den Clock kann man über einen FLIPFLOP herunterteilen. Ob dies
allerdings die beste Methode ist bezweifel ich. Vielleicht hat ja jemand
einen besseren Vorschlag.
Der Entwurf befindet sich im Anhang
Naja, Problem dürfte sein, dass sich die busmatching FIFOs intern nur
mit BlockRam realisieren lassen. Somit beißt sich die Katze in den
Schwanz. Nee, gearbeitet hab ich damit noch nicht, aber mal testweise
ein Virtex 4 Design umgesetzt, um zu schauen, ob man da eventuell auf
den wesentlich günstigeren Spartan 6 gehen kann. Ist aber nicht so
einfach, der hat einige Beschränkungen. Zum Beispiel müssen die IDDR und
ODDR auf einem IOB mit dem gleichen Takt laufen. Beim Virtex gibts
verschiedene. Dann die angesprochenen suboptimalen IDELAY....naja,
irgendwo mussten sie ja sparen. Anscheinend lässt sich auch der BlockRAM
nicht zu beliebig großen Blöcken zusammen hängen (oder es ist noch ein
Bug im ISE). Die 172 RAM Blöcke des LX75 lassen sich nicht zu einem 128k
x 18 FIFO zusammen koppeln....64k x 18 geht....
Ich habe mir mal die neuste 11.4 gestern runtergeladen und zu Hause mal
installiert. Ich werde mal versuchen über Weihnachten ein Design zu
erzeugen und hier zu veröffentlichen.
>Über einen externen Quarz von 50MHz ,den ich im FPGA mit>Hilfe vom DCM auf 400MHz aufbohre wollte ich dann die Ansteuerung des>ADC vornehmen.
Und der Jitter stört nicht?
Stefan Salewski schrieb:
>>Über einen externen Quarz von 50MHz ,den ich im FPGA mit>>Hilfe vom DCM auf 400MHz aufbohre wollte ich dann die Ansteuerung des>>ADC vornehmen.>> Und der Jitter stört nicht?
Volle Zustimmung.
Einen FPGA-Ausgang als Clock für einen ADC zu verwenden ist ein
typischer Anfängerfehler.
Helmut S. schrieb:
> Volle Zustimmung.> Einen FPGA-Ausgang als Clock für einen ADC zu verwenden ist ein> typischer Anfängerfehler.
Die meisten DSOs bis 1500 eur (auch Agilent) benutzen auch nix anderes,
ein FPGA der clock signal für ADCs erzeugt.
Es sind "nur" 100 bis 200Mhz die da benutzt werden, dafür aber an bis
zum 10 ADCs.
Mir ist schon klar das geräte in der preisklasse keine "reference
designs" sind, aber auch nicht unbedingt von anfängern gebaut.
Thomas R. schrieb:
> Helmut S. schrieb:>>> Volle Zustimmung.>> Einen FPGA-Ausgang als Clock für einen ADC zu verwenden ist ein>> typischer Anfängerfehler.>> Die meisten DSOs bis 1500 eur (auch Agilent) benutzen auch nix anderes,> ein FPGA der clock signal für ADCs erzeugt.>> Es sind "nur" 100 bis 200Mhz die da benutzt werden, dafür aber an bis> zum 10 ADCs.>> Mir ist schon klar das geräte in der preisklasse keine "reference> designs" sind, aber auch nicht unbedingt von anfängern gebaut.
Hallo Thomas,
lies doch mal Seite 23 und vergleiche das mit der Jitter-Spec von
FPGA-Ausgängen.
http://www.analog.com/static/imported-files/data_sheets/AD9230.pdf
ADCs haben übrigens meistens einen Clock-Ausgang für die Daten. Den
nimmst du am besten als FPGA-Clock.
Vielleicht werde ich es dann erst mal mit dem Virtex5 versuchen. Ti hat
dort ein Evaluation Board im Angebot. ADS5474 ADX. Dort ist ein Virtex 5
(XC5VSX50T) verbaut. Dies ist ein sehr interessantes Board.
Es befindet sich ein SMA-Steckverbinder drauf. Dort kann man einen
externen Clock für die Digitalisierung einspeisen. Der Clock wird dann
in ein LVDS-Signal gewandelt und wird an den 1. AD angeschlossen. Für
den 2. AD-Wandler werden einfach die P mit der N des Clock vertauscht.
Somit erreicht man ein 180° Phasenverschiebung. Demnach digitalisiert
der 1. AD-Wandler mit der ansteigenden Clock Flanke und der 2. Wandler
mit der abfallenden Clock Flanke.
Bei Virtex 5 sind die IO/Port schnell genug um 400MHz Daten zu erkennen.
So weit so gut.
Die beiden AD-Wandler besitzen eine Data Ready Ausgang (LVDS), die an
den FPGA gehen. Die Data Ready Leitungen sind beim FPGA an die
LVDS-Clockeingänge angeschlossen, so das diese auf den Clock Buffer
gehen.
BANK 4: AC18 --> IO_L6P_GC_4
BANK 4: AB17 --> IO_L6N_GC_4
1. Jetzt zu meiner Frage wie programmiert man am besten den
Datenempfang?
Erzeuge ich einen Prozess, der mit jeder anteigenden Flanke die Daten in
einen BlockRAMadresse schreibt? Oder muss ich diesen Clock noch mit
einem PLL oder DCM bearbeiten?
Autor: Thomas R. (tinman)
>Die meisten DSOs bis 1500 eur (auch Agilent) benutzen auch nix anderes,>ein FPGA der clock signal für ADCs erzeugt.
Für ein 8 Bit DSO mag das noch OK sein. Im ersten Postings des
Threadsstarters stand etwas von (12LVDS Paare), also nehme ich an er
will 12 Bit. Bei viel Jitter kann er die unteren aber vergesssen.
Stefan Salewski schrieb:
>> Für ein 8 Bit DSO mag das noch OK sein. Im ersten Postings des> Threadsstarters stand etwas von (12LVDS Paare), also nehme ich an er> will 12 Bit. Bei viel Jitter kann er die unteren aber vergesssen.
stimmt, habe nicht aufmerksam genug gelesen.
Hy Sebastian
Ich hab vor mir eine ähnliche Aufhabe, ich muss ein ADS54RF63 mit einem
ML506 (XC5VSX50T) verbinden, und das steurenprogram schreiben. Ich habe
bis jetz nicht so viel gemacht, aber vileicht können wir uns in
verbindung setzen und bei der aufgabe uns miteinandern helfen.
Ich bin jetzt erst mal vom Spartan 6 weg, da der interne SRAM nur mit
ca. 200 oder 250MHz läuft und die I/O Schaltzeit auch recht knapp war.
Ich verwende jetzt auch den "XC5VSX50T". Hierzu habe ich von TI ein
Evaluations-Board bestellt. Dieser enthält den FPGA XC5VSX50T. Ich habe
auch schon angefangen ein kleines Programm zu schreiben.
Nur als Hinweis. Für diesen FPGA kann man nicht mehr das Webpack
benutzten sondern benötigt die ISE Software, die so ca. 2000 bis 4000€
kostet.
Das mit dem gegenseitigen Austauschen finde ich toll ^^
Wie ich sehe hast Du den 12Bit 550MHz AD-Wandler ausgewählt. Ich
benutzte den 14Bit 400MHz Wandler.
Auf meinem Board ist der XC5VSX50T mit dem Speedgrade -1 verbaut. Hier
ist die maximale Frequenz für Counter und RAM 450MHz (zur Info). Jedoch
muß der RAM richtig konfiguriert werden, sonst kann dieser nur zwischen
200 und 300 MHz betrieben werden.
Wenn auf Deinem Board der FPGA mit dem Speedgrade -3 verbaut ist, dann
kann der RAM mit maximal 550MHz betrieben werden.
http://www.xilinx.com/support/documentation/data_sheets/ds202.pdf
siehe Seite 48 im Datenblatt (link)
Jedoch muß man auch sagen das der FPGA vom Preis her auch deutlich
teurer ist als das Speedgrade 1.
Womit ich erst mal begonnen habe:
Ich habe ein Signal mit dem Namen Trigger. Wenn der Trigger von Low auf
High wechselt, dann möchte ich X-Datenpunkte speichern. Die DAten werden
dann erst einmal in einem Block Ram gespeichert.
Um dies umzusetzten benötigt man also einen Counter der mitzählt wie
viele Punkte man bereits ab dem Triggerevent digitalisiert hat. Dieser
Counter ist auch gleich mein Adresszähler für den RAM. Zudem benötige
ich auch einem Comparator. Dieser vergleicht halt ob die vorgegebene
Anzahl an Datenpunkten bereits digitalisiert wurde. Fals die Anzahl noch
nicht erreicht wurde, wird die EN-Leitung vom Block-Ram auf 1 gesetzt.
Ist die Anzahl an Datenpunkten erreicht, so wird die EN-Leitung vom
Block RAM auf 0 gesetzt. Somit werden keine weiteren Daten in den Block
RAM geschrieben.
Hier sei auch wieder darauf hingewiesen, das der Counter und der
Comparator mit maximal 450MHz (beim Speedgrade -1 und 550MHz beim
Speedgrade -3 funktioniert).