mikrocontroller.net

Forum: FPGA, VHDL & Co. Seriellen Datenstrom mit FPGA einlesen


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo erstmal.
Ich wollte die Wandlungen des AD-Wandlers AD7266 
(http://www.analog.com/en/prod/0,,AD7266,00.html) mit einem FPGA 
einlesen. Leider habe ich dabei ein kleines Problem:

Um die 2MS/s Abtastrate zu erreichen, benötigt der ADC einen Takt von 
32MHz (31,25ns). Laut Datenblatt ist aber die Zeit, die der ADC benötigt 
um gültige Datem am Ausgang zu garantieren max. 27ns@5Vdd (gerechnet ab 
der fallenden Taktflanke des SCLK). Das heißt aber nicht, dass nicht 
früher gültige Daten anliegen könnten.
Ca. 5ns Stabilisierungszeit für das Datensignal ist mir ein wenig zu 
kurz. Das Datum des vorigen Taktes an der steigenden Taktflanke 
einzulesen ist auch nicht möglich, denn es könnte ja sein, dass es das 
gültig Datum des aktuellen Taktes ist (wenn es keine 27ns gedauert hat, 
das Datum anzulegen).
Kann mir jemand einen Tip geben, wie ich sicherstellen kann, dass die 
Daten zum richtigen Zeitpunkt eingelesen werden?

Danke.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Gast

>Ich wollte die Wandlungen des AD-Wandlers AD7266

>Um die 2MS/s Abtastrate zu erreichen, benötigt der ADC einen Takt von
>32MHz (31,25ns). Laut Datenblatt ist aber die Zeit, die der ADC benötigt
>um gültige Datem am Ausgang zu garantieren max. 27ns@5Vdd (gerechnet ab
>der fallenden Taktflanke des SCLK). Das heißt aber nicht, dass nicht
>früher gültige Daten anliegen könnten.

Könnten, aber nicht garantiert.

>Ca. 5ns Stabilisierungszeit für das Datensignal ist mir ein wenig zu

Der Fachmann nennt das Setup-Zeit. Für ein FPGA von heute sind 5ns 
Setup-Zeit mehr als ausreichend.Allerdings sind die meisten FPGAs nicht 
5V tolerant. Da brauchst du ggf. ein Levelshifter. Dann wirds eng. 
Vielleicht musst du ein FlipFlop der LVC Baureihe nehmen.

>kurz. Das Datum des vorigen Taktes an der steigenden Taktflanke
>einzulesen ist auch nicht möglich,

Doch, genauso funktioniert synchrone Schaltungstechnik. Z.B. der PCI-Bus 
in jedem PC. Und der läuft auch mit 33 MHz. Jeder Zähler, jede State 
Machine im FPGA läuft so.

> denn es könnte ja sein, dass es das
>gültig Datum des aktuellen Taktes ist (wenn es keine 27ns gedauert hat,
>das Datum anzulegen).

Nein, definitiv nicht. Es gibt auch eine minimale Zeit, die die Daten 
brauchen um aus dem AD-Wandler ausgegeben zu werden (Minimum Hold Time), 
und die ist hier 5ns@5V. Deine Daten liegen als min. 5ns vor und 5ns 
nach der Flanke stabil an. Das reicht dicke. Der "Trick" ist, dass du im 
FPGA die FLipFolp der IO-Zellen benutzen musst, dann sind diese Zeiten 
kein Problem.

>Kann mir jemand einen Tip geben, wie ich sicherstellen kann, dass die
>Daten zum richtigen Zeitpunkt eingelesen werden?

Siehe oben.

MFg
Falk

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk
Erstmal vielen Dank für deine Antworten.

> Der Fachmann nennt das Setup-Zeit.
Dann habe ich mich wohl durch die Unterlassung der Nutzung des 
Fachwortes aufs Fürchterlichste blamiert ;o)

> Allerdings sind die meisten FPGAs nicht
> 5V tolerant.

Ich weiß.

> Da brauchst du ggf. ein Levelshifter.

Glücklicherweise nicht, denn der AD-Wandler hat noch eine extra 
Versorgung für das serielle Interface.

> Doch, genauso funktioniert synchrone Schaltungstechnik. Z.B. der PCI-Bus
> in jedem PC. Und der läuft auch mit 33 MHz. Jeder Zähler, jede State
> Machine im FPGA läuft so.

Das ist mir wohl bewusst! Allerdings erschienen mir 5ns als zu kurz, als 
dass das Signal bereits sauber anliegen könnte. Unter diesem 
Gesichtspunkt, und unter der Annahme, dass das Signal praktisch an jedem 
Zeitpunkt der Zykluszeit angelegt werden konnte, empfand ich es als 
schwierig, den richtigen Abtastpunkt zu finden. Wenn allerdings ~ 4-5ns 
Setup-Zeit ausreichen, ist die Sache deutlich entschärft.

> Deine Daten liegen als min. 5ns vor und 5ns
> nach der Flanke stabil an. Das reicht dicke. Der "Trick" ist, dass du im
> FPGA die FLipFolp der IO-Zellen benutzen musst, dann sind diese Zeiten
> kein Problem.

Ah, ok. Dann werd ich mich mal in der Richtung schlau machen.
Basiert die Aussage, dass 5ns setup- und 5ns hold-zeit dicke reichen auf 
Erfahrung? Im Datenblatt (CycloneII) habe (noch) nichts genaueres zu 
diesem Punkt gefunden.

Danke.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Gast

>> Da brauchst du ggf. ein Levelshifter.

>Glücklicherweise nicht, denn der AD-Wandler hat noch eine extra
>Versorgung für das serielle Interface.

Jaja, aber bei 3,3V ist es langsamer als bei 5V Betrieb!
Möglicherweise kannst du einen "Ultra-Low-Cost" Levelshifter benutzten, 
einen 100 OHm Vorwiderstand.
>> Doch, genauso funktioniert synchrone Schaltungstechnik. Z.B. der PCI-Bus
>> in jedem PC. Und der läuft auch mit 33 MHz. Jeder Zähler, jede State
>> Machine im FPGA läuft so.

>Das ist mir wohl bewusst! Allerdings erschienen mir 5ns als zu kurz, als
>dass das Signal bereits sauber anliegen könnte. Unter diesem

Doch, das Datenblatt sagt es ja. Maximale "Data access time" ist 
27ns@5V, d.h. nach 27ns liegen gültige Daten GARANTIERT an.

>Ah, ok. Dann werd ich mich mal in der Richtung schlau machen.
>Basiert die Aussage, dass 5ns setup- und 5ns hold-zeit dicke reichen auf
>Erfahrung? Im Datenblatt (CycloneII) habe (noch) nichts genaueres zu
>diesem Punkt gefunden.

Sowohl als auch.

http://www.altera.com/literature/hb/cyc2/cyc2_cii51005.pdf

Seite 19, Tabelle 5-17. TSU (Setup Time) und TH (Hold Time). Allerdings 
ist das nicht alles. Man muss ncoh die Verzögerung des Taktes 
berücksichtigen. Das kann ich auf die Schnelle aber nicht ausrechnen. 
Die Altera-Datenblätter sind ein wenig, ähhh, gewöhnungsbedürftig.

Zum Vergleich. Beim Spartan3 von Xilinx, welcher mit Cyclone-II 
vergleichbar ist, liegen die Setup-Zeiten bei 2-3ns (mit DLL) bzw. 
2,5-6ns (ohne DLL, wobei die grossen Zeiten nur für die SEHR grossen 
Typen mit 1M++ Gates gelten). Hold-Zeiten sind Null oder sogar negativ.

Fakt ist, dass es zwar machbar, aber nicht ganz trivial ist. Die 
Taktverteilung will solide und RICHTIG gemacht sein, sonst läuft das 
Ganze nicht sonderlich zuverlässig.

MFG
Falk

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk
Danke für die geduldige Beantwortung meiner Fragen. :o)
Allerdings hätte ich da noch welche:

> Jaja, aber bei 3,3V ist es langsamer als bei 5V Betrieb!

Im Datenblatt steht max. Datenzugriffszeit: 27ns max @ Vdd = 5V .

Die Spannung des Seriellen Interfaces wird jedoch nicht durch Vdd 
sondern durch Vdrive festgelegt. Demnach hinge die Geschwindigkeit doch 
von der Versorgungsspannung des Digitalteils ab, und nicht von der des 
Interfaces, oder?

> Doch, das Datenblatt sagt es ja. Maximale "Data access time" ist
> 27ns@5V, d.h. nach 27ns liegen gültige Daten GARANTIERT an.

Dass zu diesem Zeitpunkt gültige Daten anliegen, davon war ich 
ausgegangen. Meine Gedanken gingen in die Richtung, ob sich bis dahin 
die Pegel beruhigt haben (Überschwinger etc.).

Gruß

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Gast

>> Jaja, aber bei 3,3V ist es langsamer als bei 5V Betrieb!

>Im Datenblatt steht max. Datenzugriffszeit: 27ns max @ Vdd = 5V .

>Die Spannung des Seriellen Interfaces wird jedoch nicht durch Vdd
>sondern durch Vdrive festgelegt. Demnach hinge die Geschwindigkeit doch
>von der Versorgungsspannung des Digitalteils ab, und nicht von der des
>Interfaces, oder?

Ja, stimmt. Ist zwar etwas merkwürdig, dass die hier mit 3 Spannungen 
hantieren, aber laut Datenblat ist es wohl so. Glück gehabt, damit 
kannst direkt mit einem 3,3V FPGA bei maximaler Geschwindigkeit 
kommunizieren.

>ausgegangen. Meine Gedanken gingen in die Richtung, ob sich bis dahin
>die Pegel beruhigt haben (Überschwinger etc.).

Das ist bei richtiger Schaltung/Layout so. Eine Serienterminierung der 
Datenleitung kann nicht schaden.

MfG
Falk

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt auch den AD7274. Der kann max 3MBits/s und läuft mit 3,3V Er 
benötigt nur eine externe Referenzspannung z.b. 2,5V oder 1,5V.


Grüsse Sebastian.

Autor: Gringo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt Leute, die klemmen 80..140MSample Wandler an ein FPGA an. Der 
Ausleseclock ist dort dann 80..140MHz, mit einem Parallelinterface. Das 
geht auch sehr gut.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.