Forum: FPGA, VHDL & Co. FPGA Decoupling


von David L. (david_l)


Lesenswert?

Hi Leute,

Nachdem ich in einem ähnlichen Thread schon nach Tipps zum PCB-Design 
für FPGAs gefragt und mir daraufhin zunächst ein Evaluation Board 
gekauft habe, möchte ich nun doch langsam aber sicher mal versuchen, 
etwas genauer zu lernen, wie die Hardware um ein FPGA herum aussehen 
muss, damit es zuverlässig arbeitet. Ich habe mich zunächst mal für die 
Xilinx Spartan-3A FPGAs entschieden, aber grundsätzlich sollte das 
hardwaretechnisch ja für alle FPGAs ähnlich sein.

Ich würde gerne wissen, was ich beachten muss, damit mein FPGA auch mit 
sehr hohen Frequenzen im dreistelligen Megahertz-Bereich zuverlässig 
läuft. In dem Fall scheint insbesondere die Spannungsversorgung Probleme 
zu bereiten. Ich habe mir dazu die XAPP623 von Xilinx angesehen:

http://www.xilinx.com/support/documentation/application_notes/xapp623.pdf

Nachdem mich diese Berechnungen und der Gedanke daran, was man da 
eigentlich alles berücksichtigen muss zuerst mal ein paar Stunden lang 
paralysiert haben (z.B. wird die Berechnung der Induktivität der Pfade 
zu den Pins, was dort Lmount genannt wird, gar nicht beschrieben. Wie 
soll man denn das genau berechnen können?!), versuche ich nun mal ein 
paar Fragen zu formulieren. Vielleicht kann mir ja jemand die ein oder 
andere beantworten:

Zunächst mal wäre da das schon genannte, die genaue Berechnung der 
effektiven Induktivitäten der einzelnen Kondensatoren. Muss man die 
wirklich extra berechnen, inklusive aller Pfade zu den Pins, Vias etc., 
um den richtigen Kondensator mit der entsprechenden Resonanzfrequenz zu 
finden? In den Beispielen, die Xilinx in XAPP623 gebracht hat, tun sie 
das später nämlich scheinbar auch nicht mehr, und nehmen sich einfach in 
jeder Größenordnung ein paar beliebige Kondensatoren. Wie sie auf die 
genaue Verteilung der Kondensatoren kommen ist mir auch schleierhaft. 
Ich nehme an, die genaue Verteilung ist nicht so wichtig, solange man 
mehr Kondensatoren hat, je kleiner sie werden. Stimmt das?

Jedenfalls hat man dann irgendwann eine Auflistung, welche Kondensatoren 
man wie oft braucht. Was sich mir aber nicht erschließt ist, wie die nun 
genau platziert werden müssen. Ich meine, natürlich müssen die kleinen 
für hohe Frequenzen möglichst nahe an den Pins platziert werden und für 
die größeren ist es egal, aber welche müssen denn überhaupt mal an 
welche Pins? Wie ich das in XAPP623 verstehe, wollen die pro verwendeten 
Pin etwa einen Kondensator haben. Um das richtig zu decouplen müsste 
aber doch eigentlich jeder der Pins zumindest einen eigenen 
hochfrequenten Kondensator haben, damit nirgendwo die Pfade zu lang 
werden. Ich vermute mal, dass die zur selben IO-Bank gehörenden 
Vcc-Pins des selben Typs (Vccint, Vccaux, Vcco und wie sie alle heißen) 
parallel geschaltet und intern untereinander so decoupled sind, dass 
nicht jeder einen eigenen kleinen Kondensator braucht, sondern dass es 
reicht, wenn in jeder Bank an allen Pins zusammen alle Arten von 
Kondensatoren in der richtigen "Konzentration" vorhanden sind. Ist das 
so? Dann wäre es auch egal, an welche Pins genau welcher Kondensator 
kommt, solange alles vertreten ist.
Zumindest aber wenn ich beispielsweise alle kleinen Kondensatoren so 
verteile, dass eine IO-Bank keinen einzigen, sondern nur die größeren 
bekommt, ist das wohl eher schlecht, oder?

Mir fallen sicher noch mehr Fragen ein, aber das wars erstmal. Und bitte 
denkt daran, dass die Fragen sich alle auf wirklich hohe Frequenzen 
beziehen. Dass man bei 1MHz praktisch ohne Decoupling oder zumindest mit 
willkürlich gewählten und platzierten Kondensatoren auskommt kann ich 
mir denken, aber ich möchte wissen, wie das auch mit 200MHz noch stabil 
funktioniert.


Danke im Voraus!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

David L. schrieb:
> Dass man bei 1MHz praktisch ohne Decoupling oder zumindest mit
> willkürlich gewählten und platzierten Kondensatoren auskommt kann ich
> mir denken
Schon diese Denkweise ist bedenklich, denn es kommt nicht auf die 
maximale Systemfrequenz, sondern hauptsächlich auf die Flankensteilheit 
an den Pins und auf die Anzahl der gleichzeitig schaltenden Ausgänge 
(SSO) an.
https://www.google.de/search?q=sso+fpga

David L. schrieb:
> aber ich möchte wissen, wie das auch mit 200MHz noch stabil
> funktioniert.
Es ist eine Ansammlung von Möglichkeiten:
Möglichst große Versorgungsflächen, möglichst nah (Platinenlage) am 
FPGA, möglichst viele Kondensatoren (*) mit möglichst kurzen 
Verbindungen zu diesen Lagen und den FPGA Balls. Möglichst noch ein 
wenig Glück (das darf man natürlich nicht laut sagen!), und sonst 
möglicherweise ein zweiter Versuch... ;-)

(*) ich fange hier mit klitzekleinen 10nF direkt beim FPGA an, gehe dann 
auf größere 100nF und gebe noch einen 10uF Kerko dazu.

von Christoph (Gast)


Lesenswert?

David L. schrieb:
> Was sich mir aber nicht erschließt ist, wie die nun
> genau platziert werden müssen. Ich meine, natürlich müssen die kleinen
> für hohe Frequenzen möglichst nahe an den Pins platziert werden und für
> die größeren ist es egal, aber welche müssen denn überhaupt mal an
> welche Pins?

Ich finde das passende Dokument, dass ich hier gerne referenzieren 
würde, nicht mehr...

Richtig, die kleinen Kondensatoren für die hohen Frequenzen müssen näher 
an die Pins. Denke das müsste mit der Faustregel 1/10 Lambda passen.
Also: Die Distanz zwischen Pin und Kondensator soll maximal einen zentel 
der Wellenlänge der höchsten zu blockenden Frequenz sein (Die höchste 
Frequenz ist da die Resonanzfrequenz des Kondensators, höher wirkt er ja 
nicht mehr als Kondensator).

Sonst baust du Antennen und beginnst deine Störungen auszusenden. 
Schlecht um die EMV Normen einzuhalten.

> Wie ich das in XAPP623 verstehe, wollen die pro verwendeten
> Pin etwa einen Kondensator haben. Um das richtig zu decouplen müsste
> aber doch eigentlich jeder der Pins zumindest einen eigenen
> hochfrequenten Kondensator haben, damit nirgendwo die Pfade zu lang
> werden.

Das ist eine andere (nach meinem Verständnis eher alte) Variante wie man 
Stützkondensatoren plant.

Heute baut man diese Systeme immer mit Multilayer-Leiterplatten und 
grossen Speisungs- und Groundflächen (Power planes). Da kommt es nicht 
darauf an, dass von jedem Speisungspin eine Leiterbahn direkt zu einem 
Kondensator geht. Sondern auf dem Multilayer ist nur noch die Impedanz 
der Speisung am Speisungspin relevant.
Jeder Kondensator hat direkt an den Pads Vias zu den Kupferflächen, 
jeder Speisungspin hat direkt an den Pads Vias zu den Kupferflächen. Du 
schaltest mit den Kupferflächen alles parallel mit möglichst kleiner 
Induktivität.

-> Die power planes mit allen Stützkondensatoren wirken zusammen als ein 
einzelner breitbandiger Kondensator


Der Nebeneffekt ist, dass wie du richtig erkannt hast die kleinen 
hochfrequenten Pins von mehreren Pins "geteilt" werden. Jeder Pin sollte 
also in genügend kurzer Distanz (siehe oben) einen hochfrequenten 
(geteilten)Kondensator haben.

von Falk B. (falk)


Lesenswert?


von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Christoph schrieb:
> Also: Die Distanz zwischen Pin und Kondensator soll maximal einen zentel
> der Wellenlänge der höchsten zu blockenden Frequenz sein
Nur kennt man diese Frequenz leider nicht, weil sie in der 
Flankensteilheit versteckt ist. Aber nehmen wir mal 1GHz an (das wäre 
schon mal f*5 bei 200MHz und damit ein brauchbares Rechteck), dann sind 
1/10 lambda immerhin 3cm. Hört sich gut an...
Aber ein Blockkondensator in 3cm Entfernung ist für die 
Funktionssicherheit eines Gerätes bei diesen Frequenzen irrelevant, denn 
da kommt vorrangig erst noch der Aspekt der niederimpedanten 
Ankopplung zum tragen: auch wenn der Kondensator 3cm weit weg sein 
dürfte, spielt die Faustformel "Jeder Millimeter hat ein Nanohenry" 
(Rule of thumb: each mm hast its nH) rein. 2x30mm sind dann schon 60nH, 
und das sind bei 1GHz immerhin etwa 380 Ohm, und damit wäre der 
Kondensator zum Stützen der Versorgung in diesem Frequenzbereich 
wirkungslos...

von David L. (david_l)


Lesenswert?

> Schon diese Denkweise ist bedenklich, denn es kommt nicht auf die
> maximale Systemfrequenz, sondern hauptsächlich auf die Flankensteilheit
> an den Pins und auf die Anzahl der gleichzeitig schaltenden Ausgänge
> (SSO) an.

Das heißt, ich muss im Grunde noch ein vielfaches der Systemfrequenz 
bedenken? Gibt es bei FPGAs festgelegte Werte für Anstiegs- und 
Abfallzeiten?

> Nur kennt man diese Frequenz leider nicht, weil sie in der
> Flankensteilheit versteckt ist. Aber nehmen wir mal 1GHz an (das wäre
> schon mal f*5 bei 200MHz und damit ein brauchbares Rechteck), dann sind
> 1/10 lambda immerhin 3cm. Hört sich gut an...

Das hat mit dem Aufbau eines Rechtecksignals aus einer Grundfrequenz 
(der eigentlichen Systemfrequenz) und einigen ihrer Oberschwingungen zu 
tun, oder?

> 2x30mm sind dann schon 60nH,
> und das sind bei 1GHz immerhin etwa 380 Ohm, und damit wäre der
> Kondensator zum Stützen der Versorgung in diesem Frequenzbereich
> wirkungslos...

Die 380 Ohm sind dann der Blindwiderstand, nehme ich an. Woher weiß ich 
nun, dass 380 Ohm zu viel sind?

Ich habe auch den Artikel im Wiki zur Stromversorgung für FPGAs gelesen. 
Wenn ich jetzt nicht vollkommen blöd bin, wird dort aber auch eher 
beschrieben, wie man eine schon vorhandene Stromversorgung auf Güte 
prüft. Um das wirklich zu testen bräuchte ich aber vermutlich ein 
Oszilloskop mit sehr hoher Bandbreite, und die Dinger sind verdammt 
teuer! Ganz zu schweigen von der Menge an PCBs, die ich verbraten 
müsste, bis es irgendwann mal funktioniert. Als noch-nicht-Student kann 
ich mir das nicht wirklich leisten. Ich hoffe eben, die Anzahl an 
Fehlversuchen dadurch zu mindern, dass ich überhaupt erstmal wirklich 
verstehe, wie die Stromversorgung richtigerweise aussieht.


Ich hab inzwischen mal kurz in das ein oder andere Buch zum Thema 
Signalintegrität geschaut und frage mich: Muss ich wirklich das ganze 
Zeugs mit vollständiger SPICE-Analyse, irgendwelchen Field Solvern und 
sonstigem beherrschen, um hochfrequente Digitalschaltungen zu bauen, die 
nicht im nächsten Winter den Geist aufgeben? Ich muss nämlich sagen, das 
schreckt mich ein wenig (oder eher sehr!) ab. Ich bin schließlich kein 
Elektroniker, sondern ein Hobbyprogrammierer, und möchte nicht erst 
Elektronik studieren müssen!

Darf ich also mal in die Runde derer fragen, die schon das ein oder 
andere mit hochfrequent betriebenen FPGAs gemacht haben: Kann man sowas 
überhaupt ohne tieferes Wissen und jahrelange Erfahrung im Bereich der 
Elektronik machen? Und ich meine natürlich nicht mit Evaluation Boards, 
das ist ja geschummelt!

von Schlumpf (Gast)


Lesenswert?

Grau ist alle Theorie...

Man kann sicher in dem Punkt rechnen, simulieren und einen riesen 
Hokus-Polus veranstalten und nachher genauso kopfkratzend vor seinem 
Board sitzen und sich fragen, warum es jetzt trotzdem nicht tut.

Die ganzen theoretischen Ansätze und Berechnungen in Ehren, aber die 
sind immer nur so gut, wie die Modelle, die du dafür aufstellst. Und da 
kommt man irgendwann an die Grenzen dessen, was man als "Normalo" noch 
beherrschen kann.

Ich kann nur aus der Praxis berichten, dass man sich natürlich Gedanken 
machen muss, aber letzendlich bei einem FPGA genau die gleichen Regeln 
gelten, wie bei anderen Digitalschaltungen auch.

Entscheidend ist der Leiterplattenaufbau.
Grob gesagt: Je mehr Lagen, desto entspannter wird die Sache.
Eine durchgängige Ground-Lage ist schon die halbe Miete. Und da geht es 
schon los, dass man die gar nicht hinbekommt, weil man beim BGA-Package 
eben mit den Vias die GND-Lage regelrecht zersiebt. Ok, man kann auch 
teure Blind- und Buried-Vias verwenden, aber es geht auch ohne.
Dann sollte man die Kondensatoren so nahe wie möglich an die 
Versogungspins platzieren. Also müssen die auf die Rückseite der 
Leiterplatte.
Bei mir laufen aber auch einseitig bestückte Boards problemlos.

Was ich damit sagen will: Die Dinger sind garnicht so zickig, wie man 
denkt.
Spendiere eine Ground-Lage und unter dem Chip eine Lage für die 
Core-Spannung. Die Core-Spannung kannst du noch ggf über einen Ferrit 
entkoppeln.
Dann führe die Versorung der IO-Bänke möglichst flächig aus und stütze 
sie mit ner handvoll Keramikkondensatoren 10nF und 100nF, die du 
möglichst nahe an die Pins platzierst.

Solltest du eine IO-Bank haben, auf der du viele Ports gleichzeitig 
schalten wirst, dann solltest du der vielleicht ein paar C´s mehr 
spendieren, dass sie mit dem Stoßstrom zurecht kommt.

Mehr musst du eigentlich nicht machen.
Das entbehrt jetzt natürlich jeder Berechnung, aber ich habe mir noch 
nie die Mühe gemacht, hier riesen Berechnungen anzustellen, sondern 
einfach mit gesundem Menschenverstand den Lagenaufbau gestaltet und ein 
paar Cs platziert und bis jetzt funktionierte in der Praxis jedes Board 
probemlos.

Durch die Versorgungslagen baust du eigentlich auch schon einen kleinen 
(Platten-)Kondensator mit der Leiterplatte selber und du verhinderst, 
dass Hin- und Rückströme unterschiedliche Wege gehen und dann anfangen, 
zu strahlen.

Also mach dich nicht verrückt. So ein FGPA ist auch nur ein 
Digitalbaustein und will so behandelt werden :-)

von Falk B. (falk)


Lesenswert?

@ David L. (david_l)

>Das heißt, ich muss im Grunde noch ein vielfaches der Systemfrequenz
>bedenken?

Ja.

> Gibt es bei FPGAs festgelegte Werte für Anstiegs- und
> Abfallzeiten?

Nein, aber geh davon aus, dass die sehr klein sind, so 1ns und weniger!
Denn es geht nicht nur um die IOs, sondern auch um die Signale im Kern.
Pi mal Daumen muss man mit f = 0,5/tr als höchste relevante Frequenz 
rechnen.

http://www.signalintegrity.com/Pubs/pubsKeyword.htm

http://www.signalintegrity.com/Pubs/edn/TaketheFifth.htm

>Das hat mit dem Aufbau eines Rechtecksignals aus einer Grundfrequenz
>(der eigentlichen Systemfrequenz) und einigen ihrer Oberschwingungen zu
>tun, oder?

Sicher, siehe Fourierreihe.

>Die 380 Ohm sind dann der Blindwiderstand, nehme ich an.

Ja.

> Woher weiß ich nun, dass 380 Ohm zu viel sind?

Aus einer Abschätzung. Wenn dein FPGA mal fix von 1 auf 2A in 100ns im 
Stromverbrauch springt, u = -L * di/dt = -60nH * 1A/100ns = -0,6V  Ok, 
wird soooo nicht passieren, aber der Strom wird nicht so schnell 
geliefert werden kann wie benötigt, dann sackt die Spannung an den Pins 
ab und du hast eine Fehlfunktion. Mit "Glück" sehr sporadisch.

>Ich habe auch den Artikel im Wiki zur Stromversorgung für FPGAs gelesen.
>Wenn ich jetzt nicht vollkommen blöd bin, wird dort aber auch eher
>beschrieben, wie man eine schon vorhandene Stromversorgung auf Güte
>prüft.

Ja.

> Um das wirklich zu testen bräuchte ich aber vermutlich ein
>Oszilloskop mit sehr hoher Bandbreite, und die Dinger sind verdammt
>teuer!

Sieht so aus.

>Ganz zu schweigen von der Menge an PCBs, die ich verbraten
>müsste, bis es irgendwann mal funktioniert.

Nennt man Lehrgeld.

>Als noch-nicht-Student kann
>ich mir das nicht wirklich leisten. Ich hoffe eben, die Anzahl an
>Fehlversuchen dadurch zu mindern, dass ich überhaupt erstmal wirklich
>verstehe, wie die Stromversorgung richtigerweise aussieht.

Was der Schlumpf geschrieben hat, kommt der Wahrheit schon ziemlich nah.

>Signalintegrität geschaut und frage mich: Muss ich wirklich das ganze
>Zeugs mit vollständiger SPICE-Analyse, irgendwelchen Field Solvern und
>sonstigem beherrschen, um hochfrequente Digitalschaltungen zu bauen, die
>nicht im nächsten Winter den Geist aufgeben?

Keineswegs. Auch wenn es einige Akdemiker nicht so gern hören, 90% aller 
Digitalschaltungen werden eher nach einem Kochrezept aufgebaut und 
laufen trotzdem sehr gut. Für RICHTIG hochfrequente Sachen muss man mehr 
tun, aber damit wirst du in den nächsten paar Jahren sowieso erstmal nix 
zu tun haben. Um einen AVR, ARM, kleines FPGA ala Spartan3 oder 
ähnliches mit Strom zu versorgen braucht es keinen Riesenaufwand.

>schreckt mich ein wenig (oder eher sehr!) ab. Ich bin schließlich kein
>Elektroniker, sondern ein Hobbyprogrammierer, und möchte nicht erst
>Elektronik studieren müssen!

Nichts wird so heiß gegessen wie es gekocht wird.

>Darf ich also mal in die Runde derer fragen, die schon das ein oder
>andere mit hochfrequent betriebenen FPGAs gemacht haben: Kann man sowas
>überhaupt ohne tieferes Wissen und jahrelange Erfahrung im Bereich der
>Elektronik machen?

Ja, wenn man sich an ein paar wichtige Grundreglen hält. Ein Spartan3 
bekommt man auf einer 2 lagigen Platine hin. BGAs sind für Hobbybastler 
eh kein Thema.

http://www.mikrocontroller.net/articles/Kondensator#Entkoppelkondensator

von hi tec ing (Gast)


Lesenswert?

Falk Brunner schrieb:
> 90% aller Digitalschaltungen werden eher nach einem
> Kochrezept aufgebaut

welches aber auch sicher ein wenig auf Simulation beruht, sage ich mal

von Schlumpf (Gast)


Lesenswert?

hi tec ing schrieb:
> welches aber auch sicher ein wenig auf Simulation beruht, sage ich mal

Glaub ich nichtmal.. Ich behaupte eher, dass 90% der Kochrezepte aus 
einer Zeit stammen, als die Rechner noch so schwach waren, dass eine 
wirklich sinnvolle Simulation unglaublich viel Zeit und Geld gekostet 
hätte..

Dass man die Versorgungspins mit ein paar Cs abblockt, war vor 30 jahren 
schon kein Geheimnis mehr ;-)
Und viel mehr Aufmerksamkeit braucht ein FPGA erfahrungsgemäß eigentlich 
auch nicht.
Meines Erachtens erfordert der Schaltregler, der den FPGA versorgt 
deutlich mehr Aufmerksamkeit als der FPGA selber.

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.