Hallo Community! Ich versuche gerade über den Leistungsverbrauch eines FPGA Demobords Kenntnisse über die inneren Vorgänge zu bekommen. Also mein Ziel ist es erstmal den Takt zu erkennen und dann ungefähr wieviele Register in diesem Takt geschalten werden Was ich bis jetzt habe: *ein Oszi 4GS/s 1GHz mit Aktiven probes (1M Ohm 0.9pF) *externe Spannungsersorgung mit einer relativ präzisen Quelle (1,25 Volt) für die intere Logic Versorgung am FPGA *am GND hängt mein Messwiderstand (Standard 1 Ohm leider noch kein Shunt) *Kondensatoren in verschiedenen Größen an der externen Spannungsversorgung *das fpga rennt mit 100MHz * Das FPGA benötigt so im Schnitt ungefähr 150 mA Meine jetztigen Messergebnisse sind nicht gerade besonders brauchbar (es ist kaum ein Takt erkennbar Das FPGA benötigt so im Schnitt ungefähr 150 mA eine FFT und das filtern von Frequenzen in Matlab hat auch zu keinen Verbesserungen geführt liegt das an dem einfachen Kohlewiderstand? Messaufbau ohne Sense Leitung und somit schwankender Versorgung am FPGA? Oder überhaupt einen anderen Messaufbau? Den zulangen Leitungen ca 20cmm? in welche Richtung sollte ich da am besten gehen? Danke Lukas
die 100MHz per FFT in der Versorgung wiederzufinden sollte noch einigermaßen einfach sein. Aber in einem einzigen Takt die Höhe des Strompulses auszuwerten um auf die Zahl der schaltenden Register zu schließen, ist sehr anspruchsvoll. Dein Hauptproblem besteht darin, dass hinter deinem Messwiderstand noch viele, verteilte Kondensatoren am VCC_int Netz hängen (in Summe sicher diverse µF). Der gepulste Anteil des Stroms fließt zum allergrößten Teil aus diesen Kondensatoren und fast gar nicht über deinen Messwiderstand. (Der Strompuls besteht aus Frequenzanteilen mit vielfachen von 100MHz. Da ist der Wechselstromwiderstand der Kondensatoren um viele Größenordnungen kleiner als der Wechselstromwiderstand deines Shunts mit seiner Leitungsinduktivität). Über den Shunt fließt nur der gemittelte Strom, die Mittelungsdauer kannst du aus R und C abschätzen. Theoretisch könntest du auf Idee kommen, die Pufferkapazitäten auf dem Board abzulöten, so dass der gepulste Stromüber den Shunt fließen muss. Dummerweise wird dein FPGA dann aber nicht mehr funktionieren, da es auf eine stabile, niederohmige Versorgung angewiesen ist (die vielleicht 100nH deiner Zuleitung sind viel zu hochohmig). Einige FPGAs haben auch Pufferkapazitäten im IC-Gehäuse mit integriert, selbst wenn du die Kondensatoren auf dem Board ablöten solltest wirst du die internen Pufferkaps nicht los. Kann also sein, dass aus deiner Messung einfach nichts wird. Um rauszukriegen, was vielleicht doch geht, würde ich folgendermaßen vorgehen: - die Anzahl der Pufferkaps am VCC_int Netz schrittweise auf ein notwendigs Minimum reduzieren (vielleicht kann man mehr als die Hälfte davon ablöten und das FPGA läuft trotzdem noch stabil). Damit wird das VCC_int Netz auf der Platine höherohmig und du hast vielleicht eine Chance, den Spannungsabfall am Innenwiderstand des Netzes zu messen. - lokal an den jeweiligen VCC_int Pins des FPGAs mit dem Oszi den Spannungseinbruch bei der Taktflanke nachmessen. Dazu auf den CLK selbst triggern, damit du eine Chance hast zu erkennen, in welcher Relation die beobachteten Spannungsschwankungen auf dem Netz zum CLK stehen. Es wird nicht reichen, an einem einzelnen VCC_Int Pin zu messen: dein FPGA hat viele davon, und der Stromverteilung über diese Pins kann (speziell bei einem Flipchip-Gehäuse) stark variieren. - Evtl. kannst du auch den ESR der verbliebenen Pufferkapazitäten künstlich erhöhen um damit den Spannungseinbruch deutlicher machen. Also Pufferkaps erst ablöten, und dann jeden mit einem kleinen Serienwiderstand wieder auflöten. "Klein" bezieht sich dabei sowohl auf den Widerstandswert (z.B. 1Ohm) als auch auf die Bauform (z.B. 0603, je nachdem welche Bauform die Pufferkaps haben). Aber es dürfte ein schmaler Grat werden, die Versorgung so hochohmig zu gestalten, dass man vernünftige Spannungseinbrüche sieht, aber gleichzeitig so niederohmig zu lassen, dass das FPGA noch stabil läuft. Und wenn du Pech hast, zerbröselst du dir mit der Löterei dein Eval-Board (welches Board nutzt du eigentlich?) wuba schrieb: > *ein Oszi 4GS/s 1GHz mit Aktiven probes (1M Ohm 0.9pF) das ist gut, wobei dir die hohe Impedanz der probe bei der Messung am, Versorgungsnetz wenig nützt (parallel dazu liegt 1Ohm). Eine aktive differentielle Probe zur Messung direkt an den Pufferkondensatoren könnte allerdings hilfreich sein. wuba schrieb: > *am GND hängt mein Messwiderstand (Standard 1 Ohm leider noch kein > Shunt) Du misst im GND-Pfad? Hast du getrennte GND für die Rückströme von VCC_int und VCC_IO? Ansonsten verhageln dir die IO-Ströme wahrscheinlich die Messung der vcc_int Ströme. Lieber wie oben beschrieben in der VCC_int Zuleitung messen. wuba schrieb: > liegt das an dem einfachen Kohlewiderstand? ob Kohle oder Metall gehört zu den geringeren deiner Probleme, die Bauform des Widerstands und die Länge der Zuleitungen machen (aufgrund der parasitären Induktivität) sehr viel mehr aus. wuba schrieb: > in welche Richtung sollte ich da am besten gehen? Vielleicht findest du auch irgendwo Stromprobes, die lokal das gepulste Magnetfeld direkt an den VCC_int Pins des FPGAs auswerten können. Da di/dt groß ist halte ich zumindest für denkbar, ich kenne aber keine Quelle für sowas.
wuba schrieb: > Meine jetztigen Messergebnisse sind nicht gerade besonders brauchbar (es > ist kaum ein Takt erkennbar) Dann ist das ein gutes Layout: es hat die Blockkondensatoren an der richtigen Stelle... > *am GND hängt mein Messwiderstand (Standard 1 Ohm leider noch kein > Shunt) Du versorgst extra die Vccint und misst dann an der gemeinsamen Masse aller Versorgungsspannungen?
:
Bearbeitet durch Moderator
Hallo Achim Hallo Lothar Danke, dass ihr euch Zeit genommen habt mir zurückzuschreiben !! Achim S. schrieb: > Dein Hauptproblem besteht darin, dass hinter deinem Messwiderstand noch > viele, verteilte Kondensatoren am VCC_int Netz hängen (in Summe sicher > diverse µF). Der gepulste Anteil des Stroms fließt zum allergrößten Teil > aus diesen Kondensatoren und fast gar nicht über deinen Messwiderstand. > (Der Strompuls besteht aus Frequenzanteilen mit vielfachen von 100MHz. > Da ist der Wechselstromwiderstand der Kondensatoren um viele > Größenordnungen kleiner als der Wechselstromwiderstand deines Shunts mit > seiner Leitungsinduktivität). Über den Shunt fließt nur der gemittelte > Strom, die Mittelungsdauer kannst du aus R und C abschätzen. > > Theoretisch könntest du auf Idee kommen, die Pufferkapazitäten auf dem > Board abzulöten, so dass der gepulste Stromüber den Shunt fließen muss. > Dummerweise wird dein FPGA dann aber nicht mehr funktionieren, da es auf > eine stabile, niederohmige Versorgung angewiesen ist (die vielleicht > 100nH deiner Zuleitung sind viel zu hochohmig). Einige FPGAs haben auch > Pufferkapazitäten im IC-Gehäuse mit integriert, selbst wenn du die > Kondensatoren auf dem Board ablöten solltest wirst du die internen > Pufferkaps nicht los. Also ich habe bereits alle Kapazitäten am Board entfernt die direkt an 1V2 liegen bzw an VCCINT (bestimmt an die 30) Der FPGA rennt noch immer einwandfrei :) Der einzige der noch stören könnte der auch an 1V2 liegt ist der Ethernet-IC (dort hab ich natürlich auch die Kapazitäten rausgenommen...) > - die Anzahl der Pufferkaps am VCC_int Netz schrittweise auf ein > notwendigs Minimum reduzieren (vielleicht kann man mehr als die Hälfte > davon ablöten und das FPGA läuft trotzdem noch stabil). Damit wird das > VCC_int Netz auf der Platine höherohmig und du hast vielleicht eine > Chance, den Spannungsabfall am Innenwiderstand des Netzes zu messen. Dh einfach meine Widerstand weg und mal direkt VCCInt messen? werd ich probieren ist eine gute Idee :) > - lokal an den jeweiligen VCC_int Pins des FPGAs mit dem Oszi den > Spannungseinbruch bei der Taktflanke nachmessen. Dazu auf den CLK selbst > triggern, damit du eine Chance hast zu erkennen, in welcher Relation die > beobachteten Spannungsschwankungen auf dem Netz zum CLK stehen. > Es wird nicht reichen, an einem einzelnen VCC_Int Pin zu messen: dein > FPGA hat viele davon, und der Stromverteilung über diese Pins kann > (speziell bei einem Flipchip-Gehäuse) stark variieren. Die VCC_Int sind alle zusammengeschlossen... und da komm ich nicht besonders gut ran! Kann aber versuchen an den verschiedenen VCCINT direkt Spannung zu messen. > - Evtl. kannst du auch den ESR der verbliebenen Pufferkapazitäten > künstlich erhöhen um damit den Spannungseinbruch deutlicher machen. Also > Pufferkaps erst ablöten, und dann jeden mit einem kleinen > Serienwiderstand wieder auflöten. "Klein" bezieht sich dabei sowohl auf > den Widerstandswert (z.B. 1Ohm) als auch auf die Bauform (z.B. 0603, je > nachdem welche Bauform die Pufferkaps haben). > > Aber es dürfte ein schmaler Grat werden, die Versorgung so hochohmig zu > gestalten, dass man vernünftige Spannungseinbrüche sieht, aber > gleichzeitig so niederohmig zu lassen, dass das FPGA noch stabil läuft. > Und wenn du Pech hast, zerbröselst du dir mit der Löterei dein > Eval-Board (welches Board nutzt du eigentlich?) Habe ein Bild mit meinem jetzigen Messaufbau angehängt > > wuba schrieb: >> *ein Oszi 4GS/s 1GHz mit Aktiven probes (1M Ohm 0.9pF) > > das ist gut, wobei dir die hohe Impedanz der probe bei der Messung am, > Versorgungsnetz wenig nützt (parallel dazu liegt 1Ohm). Eine aktive > differentielle Probe zur Messung direkt an den Pufferkondensatoren > könnte allerdings hilfreich sein. > > wuba schrieb: >> *am GND hängt mein Messwiderstand (Standard 1 Ohm leider noch kein >> Shunt) > > Du misst im GND-Pfad? Hast du getrennte GND für die Rückströme von > VCC_int und VCC_IO? Ansonsten verhageln dir die IO-Ströme wahrscheinlich > die Messung der vcc_int Ströme. Lieber wie oben beschrieben in der > VCC_int Zuleitung messen. Muss leider meine verfügbare Probe auf GND legen sonst bau ich mir einen Kurzschluss mit dem Computer über USB > > wuba schrieb: >> liegt das an dem einfachen Kohlewiderstand? > > ob Kohle oder Metall gehört zu den geringeren deiner Probleme, die > Bauform des Widerstands und die Länge der Zuleitungen machen (aufgrund > der parasitären Induktivität) sehr viel mehr aus. > Ja hatte nur einen klassischen großen Widerstand zur Verfügung bin grad dabei einen kleineren shunt zu bestellen > wuba schrieb: >> in welche Richtung sollte ich da am besten gehen? > > Vielleicht findest du auch irgendwo Stromprobes, die lokal das gepulste > Magnetfeld direkt an den VCC_int Pins des FPGAs auswerten können. Da > di/dt groß ist halte ich zumindest für denkbar, ich kenne aber keine > Quelle für sowas. Stromprobes find ich gut mal sehen ob ich die auftreiben kann ___________________________ Lothar Miller schrieb: >> *am GND hängt mein Messwiderstand (Standard 1 Ohm leider noch kein >> Shunt) > Du versorgst extra die Vccint und misst dann an der gemeinsamen Masse > aller Versorgungsspannungen? Ich hab meinen Messaufbau hinzugefügt ich hoff das ist so korrekt wie ich mir das vorstelle LG
wuba schrieb: > *externe Spannungsersorgung mit einer relativ präzisen Quelle (1,25 > Volt) für die intere Logic Versorgung am FPGA Die DCM's hängen IMHO an der Vccaux-rail (2V5), und nicht an Vcccore. Vielleicht ist das die Ursache das der Takt nicht gut zu sehen ist. Meines Erachtens ist die Erfolgswahrscheinlichkeit eines Angriffs mit EM-probe höher als über die Leistungsaufnahme. Siehe auch http://etrij.etri.re.kr/etrij/journal/getPublishedPaperFile.do?fileId=SPF-1207280140665 MfG,
Fpga Kuechle schrieb: > wuba schrieb: > >> *externe Spannungsersorgung mit einer relativ präzisen Quelle (1,25 >> Volt) für die intere Logic Versorgung am FPGA > > Die DCM's hängen IMHO an der Vccaux-rail (2V5), und nicht an Vcccore. > > Vielleicht ist das die Ursache das der Takt nicht gut zu sehen ist. > > Meines Erachtens ist die Erfolgswahrscheinlichkeit eines Angriffs mit > EM-probe höher als über die Leistungsaufnahme. Siehe auch > http://etrij.etri.re.kr/etrij/journal/getPublished... > > MfG, Hallo Kuechle Ok das könnte ein Grund sein, dachte mir nur das ich das deutlicher im Verlauf sehe wenn die Register zum Takt durchschalten (der CMOS wird ja dann kurz niederohmig) Hab auch versucht einen kleinen Kondensator parallel zu meinem Mess-Widerstand zu setzen um den Effekt zu verlängern leider auch kein Ergebnis
wuba schrieb: > Ich hab meinen Messaufbau hinzugefügt ich hoff das ist so korrekt wie > ich mir das vorstelle Danke. Mir ist noch etwas unklar, wie "Standard Netzteil" und "Spannungsversorgung" zusammen hängen. Hast du den DCDC, der normalerweise die 1,2V erzeugt, abgetrennt? wuba schrieb: > Also ich habe bereits alle Kapazitäten am Board entfernt die direkt an > 1V2 liegen bzw an VCCINT (bestimmt an die 30) > Der FPGA rennt noch immer einwandfrei :) Heftig. Ich hab in Schematic des boards rund 45 Puffercaps an 1,2V gefunden, davon 28 direkt beim FPGA. Vielleicht hast du noch einzelne Kondendsatoren übersehen? wuba schrieb: > Muss leider meine verfügbare Probe auf GND legen sonst bau ich mir einen > Kurzschluss mit dem Computer über USB Ja, deshalb der Hinweis, dass eine differential-probe vorteilhaft sein könnte. wuba schrieb: > Dh einfach meine Widerstand weg und mal direkt VCCInt messen? Ja, aber nicht weit weg vom FPGA messen sondern möglichst nahe dran, dort wo du die Puffercaps weggelötet hast. Den Masseanschluss deiner single ended probe direkt daneben (GND-Anschluss des losgelöteten Puffer-caps). Beim Strompuls siehst du dann hoffentlich einen Spannungseinbruch an der Leiterbahninduktivität. Der genaue Wert des induktiven Widerstands ist zwar unbekannt, aber für Vergleichsmessungen (viel Schalten - wenig Schalten) könnte es vielleicht reichen. Wobei der Artikel ovn FPGA-Kuechle zeigt, dass die simple Betrachtung ("wie viele FF schalten in Takt x") höchstens der Anfangspunkt für eine sidechannel Analyse ist.
Ohne Diffprobe kann man auch hi-side messen, nämlich AC-coupled. Dann kann man auch wieder mehr Verstärkung nehmen. Wenn die Probe keinen AC-Aufsatz hat einfach mal 100nF reinhängen. Deine Spannungsquelle sollte aber so stabil und rauscharm wie möglich sein, weil du die Störungen der Quelle genauso mitmißt.
Kannst du das FPGA auch mal testweise langsamer laufen lassen? Lade auch mal ein Programm drauf, welches in jedem Takt möglichst viele Register umschalten lässt. Dann kannst du schonmal eingrenzen an was as liegt. Ansonsten kannst du auch mal deinen Shunt größer machen. Ob das ein Kohlewiderstand ist, das ist erstmal nicht wichtig. Versuche auch mal an VCC mit AC Kopplung zu messen, nicht dass der Strom irgendwo anders abhaut bei GND. Man kann übrigens durchaus side-channel analyses mit Shunt machen. EM-Probe kann zwar besser sein, aber auch so kann es funktionieren. Zumindest nen AES (ohne Schutzmaßnahmen) auf nem Atmega kann man so knacken.
Hallo Leute :) Achim S. schrieb: > wuba schrieb: >> Ich hab meinen Messaufbau hinzugefügt ich hoff das ist so korrekt wie >> ich mir das vorstelle > > Danke. Mir ist noch etwas unklar, wie "Standard Netzteil" und > "Spannungsversorgung" zusammen hängen. Hast du den DCDC, der > normalerweise die 1,2V erzeugt, abgetrennt? Ja genau so ist es. Laut schematic(http://www.digilentinc.com/Data/Products/ATLYS/Atlys_C2_sch.pdf) habe ich einfach den JTAG Messwiderstand 0.01 Ohm (R274) ausgelötet und mit meiner Versorgung ersetzt > wuba schrieb: >> Also ich habe bereits alle Kapazitäten am Board entfernt die direkt an >> 1V2 liegen bzw an VCCINT (bestimmt an die 30) >> Der FPGA rennt noch immer einwandfrei :) > > Heftig. Ich hab in Schematic des boards rund 45 Puffercaps an 1,2V > gefunden, davon 28 direkt beim FPGA. Vielleicht hast du noch einzelne > Kondendsatoren übersehen? 28 Kondensatoren vor dem FPGA und 12 am Ethernet IC sowie 3 sonstige die an dieser Versorgungsleitung hängen sind bereits Geschichte :) > wuba schrieb: >> Muss leider meine verfügbare Probe auf GND legen sonst bau ich mir einen >> Kurzschluss mit dem Computer über USB > > Ja, deshalb der Hinweis, dass eine differential-probe vorteilhaft sein > könnte. Ja wie gesagt zurzeit habe ich nur diesen "primitiven" Tastkopf (2x ZS1000) zur Verfügung > wuba schrieb: >> Dh einfach meine Widerstand weg und mal direkt VCCInt messen? > > Ja, aber nicht weit weg vom FPGA messen sondern möglichst nahe dran, > dort wo du die Puffercaps weggelötet hast. Den Masseanschluss deiner > single ended probe direkt daneben (GND-Anschluss des losgelöteten > Puffer-caps). Beim Strompuls siehst du dann hoffentlich einen > Spannungseinbruch an der Leiterbahninduktivität. Der genaue Wert des > induktiven Widerstands ist zwar unbekannt, aber für Vergleichsmessungen > (viel Schalten - wenig Schalten) könnte es vielleicht reichen. Wobei der > Artikel ovn FPGA-Kuechle zeigt, dass die simple Betrachtung ("wie viele > FF schalten in Takt x") höchstens der Anfangspunkt für eine sidechannel > Analyse ist. Für meine Anwendung muss ich nicht die genauen Schaltvorgänge kennen, es reicht ein ungefähr sowas in die Richtung wäre mein Ziel: http://www.cosic.esat.kuleuven.be/publications/article-17.pdf?origin=publication_detail hunz schrieb: > Ohne Diffprobe kann man auch hi-side messen, nämlich AC-coupled. > Dann > kann man auch wieder mehr Verstärkung nehmen. Wenn die Probe keinen > AC-Aufsatz hat einfach mal 100nF reinhängen. Deine Spannungsquelle > sollte aber so stabil und rauscharm wie möglich sein, weil du die > Störungen der Quelle genauso mitmißt. Wenn das mein Oszi kann werd ich meinen Messwiderstand umlöten :) meckerziege schrieb: > Kannst du das FPGA auch mal testweise langsamer laufen lassen? > Lade auch mal ein Programm drauf, welches in jedem Takt möglichst viele > Register umschalten lässt. > Dann kannst du schonmal eingrenzen an was as liegt. > Ansonsten kannst du auch mal deinen Shunt größer machen. Ob das ein > Kohlewiderstand ist, das ist erstmal nicht wichtig. Das "langsamer" laufen habe ich mit meinem ucf file versucht einzustellen leider erfolglos :( hab es dann mit nen Zähler umgesetzt der den Takt dividiert -> das hat keine Verbesserungen gebracht.... bis jetzt habe ich nur versucht ein Programm das ständig 64 Bits von 0000.. auf FFFF.. schaltet werde aber bei der nächsten Gelegenheit ein Programm schreiben, dass auf mehr Bits zugreift. Komme leider erst wieder am Mittwoch in das Labor werde euch aber wenn es neue Erkenntnisse gibt informieren :). Und ein aktuelles FFT und Signal mitnehmen Danke für den Input. Solltete euch noch etwas einfallen gerne her damit! Einen schönen Sonntag Abend ich
Gustl Buheitel schrieb: > 64 bits in einem FPGA sind sogar ziemlich wenig. das geht im Rauschen unter ... zumal hier nur die interne Logik schaltet. Da sind es grad mal ein paar fA-pA (geschätzt)
Gustl Buheitel schrieb: > 64 bits in einem FPGA sind sogar ziemlich wenig. Der FPGA auf dem Board hat fast 1000 mal so viel. Ausserdem wtte ich, dass der Synthesyser diese 64 auch noch weg optimiert hat, da nicht weiter verwendet. Sobald das Ding etwas nenenswertes tut, wird sich rächen dass man alle Caps entfernt hat.
wuba schrieb: > bis jetzt habe ich nur versucht ein Programm das ständig 64 Bits von > 0000.. auf FFFF.. schaltet werde aber bei der nächsten Gelegenheit ein > Programm schreiben, dass auf mehr Bits zugreift. Da würde ich aber auch genau hinschauen, ob die auch tatsächlich implementiert wurden. Oder ob da (wenn überhaupt) evtl. nur noch 1 FF vor sich hin toggelt. Ich würde da eine Registerkette verwenden, und auf die dann das keep Attribut ansetzen. So ähnlich wie dort mit dem Ringoszillator, nur eben mit einem Takt am Ketteneingang: http://www.lothar-miller.de/s9y/categories/29-Ringoszillator > ein Programm Soso...
Lothar Miller schrieb: > wuba schrieb: >> bis jetzt habe ich nur versucht ein Programm das ständig 64 Bits von >> 0000.. auf FFFF.. schaltet werde aber bei der nächsten Gelegenheit ein >> Programm schreiben, dass auf mehr Bits zugreift. > Da würde ich aber auch genau hinschauen, ob die auch tatsächlich > implementiert wurden. Oder ob da (wenn überhaupt) evtl. nur noch 1 FF > vor sich hin toggelt. > > Ich würde da eine Registerkette verwenden, und auf die dann das keep > Attribut ansetzen. So ähnlich wie dort mit dem Ringoszillator, nur eben > mit einem Takt am Ketteneingang: > http://www.lothar-miller.de/s9y/categories/29-Ringoszillator > >> ein Programm > Soso... Ich schreibe sie extern über die UART rein und lese die Daten wieder aus um dieses weg optimieren zu verhindern. Werde die Anzahl der Flip Flops vergrößern... Danke bin schon sehr gespannt
wuba schrieb: > Ich schreibe sie extern über die UART rein und lese die Daten wieder aus > um dieses weg optimieren zu verhindern. OK, wenn der Synthesizer nichts davon weiß, dass da lauter Einsen reingeschreiben werden, kann da auch nichts optimiert werden...
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.