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!
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.
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.
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...
> 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!
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 :-)
@ 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
Falk Brunner schrieb: > 90% aller Digitalschaltungen werden eher nach einem > Kochrezept aufgebaut welches aber auch sicher ein wenig auf Simulation beruht, sage ich mal
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.