Guten Abend. Ich habe hier schon einige Beiträge zum Thema "FMC" bei
FPGA-Entwicklungsboards gelesen. Da sie mehr als sechst Monate zurück
liegen und meine Frage nicht ganz den selben Inhalt abzielt poste ich
sie hier.
Ich möchte eine Platine an ein Entwicklungsboard über einen FMC
anbinden. Die Platine werde ich fertigen lassen. In den vorherigen
Beiträgen war davon die Rede, dass bestimmte Lötmasken etc. benötigt
werden. Ich erstelle das Layout der Platine in Eagle und würde dann die
Gerberdaten an den Platinenhersteller, Bestücker senden. Gibt es da in
der Regel Schwierigkeiten mit dem FMC? Habe mit dem Platinen in Auftrag
geben noch keine Erfahrung gemacht. Auf was sollte ich da achten beim
Layout erstellen ?
Pcb schrieb:> Guten Abend. Ich habe hier schon einige Beiträge zum Thema "FMC" bei> FPGA-Entwicklungsboards gelesen. Da sie mehr als sechst Monate zurück> liegen und meine Frage nicht ganz den selben Inhalt abzielt poste ich> sie hier.>> Ich möchte eine Platine an ein Entwicklungsboard über einen FMC> anbinden. Die Platine werde ich fertigen lassen. In den vorherigen> Beiträgen war davon die Rede, dass bestimmte Lötmasken etc. benötigt> werden. Ich erstelle das Layout der Platine in Eagle und würde dann die> Gerberdaten an den Platinenhersteller, Bestücker senden. Gibt es da in> der Regel Schwierigkeiten mit dem FMC? Habe mit dem Platinen in Auftrag> geben noch keine Erfahrung gemacht. Auf was sollte ich da achten beim> Layout erstellen ?
Hallo PCB, ich mach seit mehreren Jahren FMC-Mezzanines für
Auftraggeber...
der FMC Stecker ist ein SMD-Teil mit einem Pin Raster von 1,28mm mit
160/400 Pins.
Durch seine (für ein SMD Bauteil) enorme Ausmaße ist es von extremer
Wichtigkeit dass die Platine beim löten plan ist bzw. plan bleibt.
Von entsprechender Wichtigkeit ist der Lagenaufbau bzw. die Verteilung
und gleichmäßigkeit der Kupferflächen).
Gleichermaßen wichtig ist der passende Zinnauftrag auf den Landingpads
des FMC Steckers (Die bauteile bringen kein Zinn-Depot mit wie
beispielsweise BGAs). Hierfür solltest Du im Vorfeld Rücksprache mit dem
Bestücker deiner Wahl halten und von Ihm die Info einhalten, wei groß
die Pads in der Pastenmaske werden sollen und Dir auch entsprechende
Vorgaben für die Dicke derselben geben lassen.
Keinesfalls empfehlen kann ich den auftrag via Dispenser und Hand. Trotz
des eher grobschlächtigen Pin Pitches ist der Stecker anfällig für
Lötprobleme. Da der Stecker ja mechanischen Kräften während der
Steckvorgänge ausgesetzt ist, kann es bei minderer Lötqualität auch im
Nachhinein noch zu Ausfällen kommen welche sich in seltsamsten Syntomen
äußern...
Gruß
Vanilla
Hallo Vanilla.
Vielen Dank dir für die sehr hilfreiche Antwort.
Ich habe mir zunächst eine Lib des FMC-Steckers (Male) erstellt. Dazu
habe ich auf dieser Seite den FMC-Stecker (Male) herausgesucht (müsste
auf die Xilinx-Bords
passen)(http://www.em.avnet.com/en-us/design/featuredpromotions/Pages/Samtec-Vita-57-SEARAY-Connectors.aspx).
Ich habe mich genau an die Dimensionen im PCB-Layout (siehe Datenblatt
Seite 2/4) gehalten. Demnach ist der Pindurchmesser auf 25mil
festgelegt. Da steht noch etwas von "stencil..." (Seite 3/4) Ist sicher
der Punkt, den du oben angesprochen hast und für die Fertigung von
Bedeutung. Das muss ich sicher irgendwo in der Lib unterbringen. Ist
damit das Lötstopplayer (Durchmesser 35mil), oder wie heißt dieses in
der Fachsprache?
Du schreibst, dass der Lagenaufbau sowie die Massefläche extrem wichtig
sei.
Zu meinem Projekt: ich möchte einen achtkanaligen adc anbinden. Das
heißt, dass ich 8x14bits einlesen muss. Hierzu kommt noch die
Ausgangs-Taktleitung vom adc selbst. Die Spannungsversorgung entnehme
ich nicht dem Entwicklungsboards sondern stelle ich extern zu Verfügung.
Ist einfacher denke ich fürs erste?!
Als Anfänger hätte die Pins jetzt so belegt, wie es vom Layout am besten
passt. Natürlich hätte ich schon auf die I/o-Belegung des FPGAs
geachtet. Auf einen Ausgangsbuffer zwischen FPGA und DAC hätte ich
verzichtet, da das Spannungslevel stimmt.
Ich habe keine Erfahrung mit FMC-mezzanines. Für Unterstützung bin ich
sehr dankbar.
Hast du generelle Hinweise für mich, wie ich die DAC Datenleitungen zu
den Steckerpins führen sollte? Zum Beispiel in welchem Layer es am
günstigsten ist. Eventuell hast du ja ein Fotoausschnitt von Leitungen
die vom Stecker weggehen.. Also für anfängertipps wie man am
geschicktesten die Leiterbahnen von den Steckerpins zu den
Schaltungselementen führt bin ich sehr dankbar. Welche Leitungsbreite
wählt man erfahrungsgemäß am sinnvollsten bei den Leiterbahnen zum
Steckerelement?
Hast du noch mehr Tipps oder Links zu dem Thema. Es soll keine Platine
zur Serienfertigung werden. Nur für einen Messaufbau. Funktionieren
sollte es trotzdem. Ich möchte eine Karte auf den Lpc abstimmen, da ich
diese dann auch an dem HPC bei Bedarf betreiben kann. Die relevanten
Pins sind ja identisch.
Danke nochmals und ein schönes Wochenende dir.
Pcb schrieb:> Ich habe mich genau an die Dimensionen im PCB-Layout (siehe Datenblatt> Seite 2/4) gehalten. Demnach ist der Pindurchmesser auf 25mil> festgelegt. Da steht noch etwas von "stencil..." (Seite 3/4) Ist sicher> der Punkt, den du oben angesprochen hast und für die Fertigung von
Ja Sencil ist die Metalldruckschablone für den (Zinn)past(en)auftrag.
> Bedeutung. Das muss ich sicher irgendwo in der Lib unterbringen. Ist> damit das Lötstopplayer (Durchmesser 35mil), oder wie heißt dieses in> der Fachsprache?
Lötstoppmaske wäre die Soldermask und die Lötpastenmaske im Englischen
einfach Pastemask.
>> Du schreibst, dass der Lagenaufbau sowie die Massefläche extrem wichtig> sei.>> Zu meinem Projekt: ich möchte einen achtkanaligen adc anbinden. Das> heißt, dass ich 8x14bits einlesen muss. Hierzu kommt noch die> Ausgangs-Taktleitung vom adc selbst. Die Spannungsversorgung entnehme> ich nicht dem Entwicklungsboards sondern stelle ich extern zu Verfügung.> Ist einfacher denke ich fürs erste?!
Eher nicht, für 14 Bit ADC brauchts eine extrem saubere Versorgung,
außerdem würde der Verzicht von sich aus das Layout nicht von selbst
vereinfachen...
Wichtig ist einen symetrischen Lagenaufbau zu haben:
Bsp: Layer 1 (Top) = Bauteile + Signalleitungen
Layer 2 (Innenlage unter Top) = Masse
Layer 3 (Innenlage über BOT) = VCC ( wenn mehrere VCCs auf dem Layer
sind, darauf achten dass keine größeren Lücken zwischen den einzelnen
Planes sind).
Layer 4 (Bot) = Bauteile + Signale
Ist jetzt stark vereinfacht, es gibt eine Reihe weiterer Fallstricke.
Ggfs. nochmals jemanden über das Layout drüberschauen lassen der sich
damit auskennt...
>> Als Anfänger hätte die Pins jetzt so belegt, wie es vom Layout am besten> passt. Natürlich hätte ich schon auf die I/o-Belegung des FPGAs> geachtet. Auf einen Ausgangsbuffer zwischen FPGA und DAC hätte ich> verzichtet, da das Spannungslevel stimmt.
Wie schon geschrieben, wenns wirklich annähernd 14 Bit Auflösung sein
sollen dann hat das ganze schon seinen Anspruch. Schau Dir hierzu einmal
an welche Anforderungen dein FPGA an den Clockjitter stellt.
Normalerweise sind diese Forderungen mit einem durch den FPGA gezogenen
Clock oder gar über DCM/PLL geführt nur schwer bis gar nicht zu
erfüllen, die Folge wären eine Degradierung der ADC-Auflösung um mehrere
LSBs.
>> Ich habe keine Erfahrung mit FMC-mezzanines. Für Unterstützung bin ich> sehr dankbar.
Neben den Informationen im Standard (welche nur gegen Bezahlung von der
VITA zur erhalten sind), kommt es auch stark darauf an, an welches (oder
welche) Baseboards das FMC betrieben werden soll.
So gibt es z.B. mehrere FMC-Boards in welchen bestimmte Signalpins
unbelegt sind oder aber Besonderheiten aufweisen (unterschiedliches
Timing durch teilweise Levelshifter etc.) als Dinge wie Sie nicht im
VITA 57 stehen aber von manchen FMC-Evalboard unter Misachtung des
Standards ausgelebt werden. Wenn also mehrere FMC-Baseboards in Frage
kommen, alle Schematics eingehend studieren!
>> Hast du generelle Hinweise für mich, wie ich die DAC Datenleitungen zu
DAC oder ADC?
> den Steckerpins führen sollte? Zum Beispiel in welchem Layer es am> günstigsten ist. Eventuell hast du ja ein Fotoausschnitt von Leitungen> die vom Stecker weggehen.. Also für anfängertipps wie man am> geschicktesten die Leiterbahnen von den Steckerpins zu den> Schaltungselementen führt bin ich sehr dankbar. Welche Leitungsbreite> wählt man erfahrungsgemäß am sinnvollsten bei den Leiterbahnen zum> Steckerelement?
Ich könnt jetzt mit der reinen Leere und von Wellenwiderständen, Z0 etc.
anfangen. Ich denke, dein Ansatz sich vom ADC ausgehend passende FMC
Pins zu suchen ist schon OK, vermeide möglichst Kreuzungen und Knoten
und bringe den ADC so nahe wie möglich an den Stecker ran, dann passt
das wahrscheinlich schon. Viel wichtiger ist die Qualität der
Spannungsversorgung und das Abblockung der Versorgungsspannungspins am
ADC. Hier ist jeder halbe Millimeter von entscheidender Bedeutung. Bei
den Signalen ist ersteinmal nur die Strobe/clockleitung im Vergleich zu
den Signalleitungen von höchster Bedeutung. Signal- bzw. Datenleitungen
unter sich erst bei zunehmender Geschwindigkeit (wie viele MSamples/sec.
sollens denn werden?).
>> Hast du noch mehr Tipps oder Links zu dem Thema. Es soll keine Platine> zur Serienfertigung werden. Nur für einen Messaufbau. Funktionieren> sollte es trotzdem. Ich möchte eine Karte auf den Lpc abstimmen, da ich> diese dann auch an dem HPC bei Bedarf betreiben kann. Die relevanten> Pins sind ja identisch.
Wie gesagt hatte da bei Spartan6 Evals von Avnet meine Überraschung
erlebt...
>> Danke nochmals und ein schönes Wochenende dir.
... was davon noch übrig bleibt...
Gruß
Vanilla
Danke. Irgendwie wurde damit meine Motivation gedämpft. Hoff, dass ich
es in vertretbarer zeit schaffe. Es soll folgender ad Wandler werden:
ad9231. Den wollt ich eigentlich vier mal auf einer Karte unterbekommen.
Zweimal auf dem Top und zweimal auf dem Bot Layer. Die
Spannungsversorgung über den fmc reicht nicht aus, da vier Wandler zu
viel Leistung benötigen. Nehme den Wandler mit 80msps.
Pcb schrieb:> Danke. Irgendwie wurde damit meine Motivation gedämpft.
dann bist aber wirklich zu zart beseitet ;)
> Die> Spannungsversorgung über den fmc reicht nicht aus, da vier Wandler zu> viel Leistung benötigen. Nehme den Wandler mit 80msps.
was bringt dich nun darauf? Würd ich jetzt erst mal nicht reflektiert so
stehen lassen...
Im FMC Standard steht nur ein Maximalstrom welcher beispielsweise über
die 3,3V (4 Pins) zu entnehmen sind: 3A. Dazu kommen dann noch mals max.
2A über den VADJ (LPC).
Wenn ich jetzt deinen AD9231 mit sagen wir je 125mA @ 1,8V zubillige
(jetzt einfach mal unterstellt die komplette nominalen 204mW würden über
die 1,8V gezogen [was ja wiederum nicht stimmt, da wir sehen dass
alleine über die Datenausgangstreiber rund 40mW mehr verbraten werden
[bei 3,3V DRVDD gegenüber 1,8V]) so haben wir bei 4*ADC gesamt ein
halbes Ampere @ 1,8V.
Das könntest Du jetzt entweder von den VADJ (normalerweise 2,5V wenn Du
nichts umstellst oder aber das FPGA Board nichts anderes vorgib) mittels
Ultralow Drop Linearregler oder aber von den 3,3V runterregeln (jeweils
mit zusätzlicher Filterung).
Die meisten EVAL Boards können bei eintsprechender Supply die 2/3A auf
VADJ und 3V3 zur Verfügung stellen...
Btw.: Da das ganze eh nur auf Prototypen rausläuft würde ich zu 4 *
Linearreglern greifen und jeden ADC einzeln versorgen. Entspannt das
Layout und die Verlustleistung wird automatisch über eine größere Fläche
abgegeben...
P.S. Dem Clockeingang Pin 1/2 gebührt besondere Hingabe.
Ein eigener Quarz mit LVDS Ausgang (nicht aus oder durch den FPGA), am
besten ein Clockdistribution Baustein wenn die ADCs gleichlaufen sollen.
Am besten gleichlange Leitungspaare vom Clockbuffer zu den ADCs und weit
weg von Störern verlegen. Terminierung unmittelbar an oder unter den
Clockpins am ADC nicht vergessen...
Ähnliches gilt auch für den VREF Pin (Störer fern halten (ich würd z.B.
direkt unter dem VREF Pin die GND und anderen Planes aussparen, den
100nF direkt und den 1uF (lt. Applikation empfohlen bei interner
Referenz) auf der PCB Rückseite mit minimalster Leiterbahnlänge
anschliessen.
Gruß
Vanilla
Pcb schrieb:> Achja. Habe dem virtex6. Muss ich zwischen fmc Stecker und Adc Ausgang> Ausgangsbuffer schalten? Eigentlich müsste der Spannungspegel stimmen.
Der VITA 57 (FMC) sieht Standardmässig 2,5V womit Du ADC und FPGA
betreiben kannst. Insofern besteht hier kein Handlungsbedarf.
Für DCOA und DCOB (Clock zum FPGA) würd ich zum einen Serienwiderstände
(Serienterminierung) vorsehen und ein- bis zwei cm länger als die
Datenleitungen halten...
und darauf achten das DCOA und DCOB auch auf Clockinputpins vom FMC
Stecker (GCLK Inputs am FPGA) landen.
Zur originären Frage:
Ausgangsbuffer sind nicht notwendig.
Leitungsterminierung für alle Pins wäre schön, solange Du nur einen
Prototypen baust welcher keine Prüfungen zu bestehen hat kannst Du diese
einer idealeren Platzierung und Routing zum Opfer fallen lassen.
Ausnahme wie beschrieben die Clockpins bei welcher man sich zumindest
die Option offen halten sollte eingreifen zu können.
Wichtig auch darauf achten dass die Clockpins auch tatsächlich auf FPGA
clockinputs ankommen um das FPGA Inputtiming in den Griff zu bekommen.
Gruß
Vanilla
Danke dir. Habe das Layout fast fertig geroutet. Eine Frage, bevor ich
es vollende:
Ich habe mir auf deinen Rat hin andere FMC mezzanine Layouts angeschaut.
Mir ist aufgefallen, dass stets versucht wird die Ausgänge des devices
hin zu den FMC Kontakten mit gleich langen Leitungsstücken zu verbinden.
Dazu wird so wie ich das sehe der längste nötigste Pfad (max) als
Referenz genommen. Die anderen Pfade werden nun künstlich auf die
Referenzpfadlänge (Max) verlängert (Durch mäanderförmige Verläufe). Sehr
schwierig von Hand finde ich. Gerade dann, wenn man wie ich vier mal 12
Signale zum FMC Stecker ziehen muss.
Also eine kurze Überlegung: die Signale werden mit max 80 Msps
abgetastet. (Wenn ich vom schnellsten adc der Baureihe ausgehe). Der
Unterschied zwischen max und min Weg zu den FMC-Pins nenne ich Delta. Es
resultiert ein max laufzeitunterschied der Signale von delta x
c_substrat. Dieser laufzeitunterschied muss nun viel kleiner als die
taktrate mit der die datenbits im fpga eingelesen werden sein. Ansonsten
gibt es Fehler. D.h. lese ich bei 80 Msps auch mit 80 MHz ein, dann muss
gelten: 1/80 MHz = 80 us >> laufzeitunterschied. Sehe ich das so richtig
? Das bedeutet, dass mein maximaler wegunterschied Delta << c_substrat x
80 us. Relevant in meinem Fall? Ich weiß, dass es ja im fpga selbst noch
die Möglichkeit gibt Timings festzulegen. Was meinst du in meinem Fall?
Danke dir.
Pcb schrieb:> Also eine kurze Überlegung: die Signale werden mit max 80 Msps> abgetastet. (Wenn ich vom schnellsten adc der Baureihe ausgehe). Der> Unterschied zwischen max und min Weg zu den FMC-Pins nenne ich Delta. Es> resultiert ein max laufzeitunterschied der Signale von delta x> c_substrat. Dieser laufzeitunterschied muss nun viel kleiner als die> taktrate mit der die datenbits im fpga eingelesen werden sein. Ansonsten> gibt es Fehler. D.h. lese ich bei 80 Msps auch mit 80 MHz ein, dann muss> gelten: 1/80 MHz = 80 us >> laufzeitunterschied. Sehe ich das so richtig> ? Das bedeutet, dass mein maximaler wegunterschied Delta << c_substrat x> 80 us. Relevant in meinem Fall? Ich weiß, dass es ja im fpga selbst noch> die Möglichkeit gibt Timings festzulegen. Was meinst du in meinem Fall?
Ups was rechnest Du da?
Den wichtigsten Bezug den Du herstellen must, ist die Signallaufzeit in
Bezug auf den Clock, respektive Datenstrobe.
Da letzterer bekannt ist musst Du nur dafür sorgen dass die
Datenleitungen kürzer sind als die Clockleitung.
80Mhz sind dabei noch sehr relaxte Anforderungen, wenn Du dafür Sorge
trägst dass längste und kürzeste Datenleitung nicht mehr als sagen wir
ein bis 1,5cm auseinander liegen, und die Clockleitung nochmals ca.
anderthalb Zentimeter länger ist als die längste Datenleitung, dann bist
Du wohl im sicheren Bereich.
Mit deiner Rechnung komme ich nicht klar, du hast eine Periodendauer von
125 ns. Real gesehen bewegt sich dein Signal immer noch > 10cm pro
Nanosekunde auf der Leiterplatte fort.
Bei 80us Laufzeitunterschied möchte ich die Dimension deiner
Leiterplatte aber mal sehen ;)
Gruß
Vanilla