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?
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_detailhunz 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...