Hi, Ich hätte mal ne blöde Frage: Ist es eigentlich möglich ein FPGA zu beschädigen indem man es mit einem "Programm" konfiguriert, welches in der Simulation 'x' als Ergebnis liefert? Also wenn 2 Anweisungen auf dasselbe Signal schreiben? mfg Andreas
Hallo Andreas, Das ist bei modernen Altera-FPGAs nicht mehr möglich, da die Verdrahtungsarchitektur nur Verbindungen von Signalquellen zu Signalsenken erlaubt. Stichwort: unidirektionale Verdrahtungssegmente. Es ist zu vermuten, dass für die Xilinx FPGAs das gleiche gilt (nur belegen lässt sich nicht, weil die bisher kaum was Verwertbares zu diesem Thema veröffentlicht haben). Deshalb sind bei einem modernen (Xilinx-, Altera-)FPGA auch keine Einschaltstromimpulse zu beobachten, denn auch bei einer beliebigen Konfiguration (die ja im Einschaltaugenblick nicht definiert ist) enstehen keine Kurzschlüsse in der Verdrahtung. Schöne Grüße, Valerij (fpga-dev.de)
Auch bei Xilinx gibts schon lange keine bidirektionalen Verbindungen mehr intern. Außerdem wird das Design gar nicht erst übersetzt, wenn du mit 2 Quellen auf eine Senke gehst. Kaputt bekommt man die allenfalls durch die Außenbeschaltung.
>Das ist bei modernen Altera-FPGAs nicht mehr möglich, Theoretisch ist das richtig (also wenn alle Sicherheitsmaßnahmen so implementiert wären, wie vorgesehen). Laut Hersteller stimmt das auch in der Praxis. Du findest aber einschlägige Hinweise auf bösartige FPGA-Konfigurationen. (Theoretisch ist auch Windows gegen Viren geschützt. Doch ist dieses Bekenntnis bestenfalls einen Lacher wert. Warum sollte es bei FPGAs anders sein?) Max
@Max >>(Theoretisch ist auch Windows gegen Viren >>geschützt. Doch ist dieses Bekenntnis bestenfalls einen Lacher wert. >>Warum sollte es bei FPGAs anders sein?) Dazu ein kleiner Vergleich, den mein Digitaltechnik-Professor nannte: Intel stand wegen eines fehlerhaften Rechenwerks einmal knapp vor dem Ruin, obwohl die Benutzung genau dieses Rechenwerks softwaretechnisch noch umgangen hätte werden können. In der IC-Entwicklung gilt: Entweder fehlerfrei, oder Dein Arbeitsplatz existiert nicht mehr. Und wen interessieren Softwarefehler in Windows? Keine Sau. Es gibt also einen gewaltigen Unterschied zuwischen Soft- und Hardware-Entwicklung. Daniel
Natuerlich kann man ein FPGA zerkonfigurieren. zB unbeschaltete Pins als Eingaenge schalten. Dann gehen die auf einen unbestimmten Zusatnd und ziehen Strom wie bloed. Das Powersupply bringt die Spannung nicht mehr und mit der halben Spannung kann nicht neu programmiert werden. Nach einer halben Minute ist der Chip kapput.
> Ist es eigentlich möglich ein FPGA zu beschädigen indem man es mit einem > "Programm" konfiguriert, welches in der Simulation 'x' als Ergebnis > liefert? Also wenn 2 Anweisungen auf dasselbe Signal schreiben? Es gibt meines Wissens 3 Möglichkeiten wie sowas passiert: 1. Du schreibst eine entsprechende VHDL-Datei, die sowohl '0' als auch '1' zuweist. Dies wird von den Synthesetools abgelehnt, da es keine sichtbaren internen Tristate-Busse (mehr) gibt. 2. Du umgehst die Synthesetools um kofigurierst die Schalter im FPGA manuell so, dass sowohl ein '0'- als auch ein '1'-Treiber an einem Bus hängen. Nur möglich, wenn es "unsichtbare" interne Tristate-Busse gibt, die von den Synthesetools immer "richtig" beschaltet werden, manuell aber auch "falsch" beschaltet werden können. Siehe dazu den Hinweis auf die Herstellerangaben vs. Gerüchten über "bösartige" Konfigurationen. 3. Du gibst ein Signal auf einem Pin aus, der auch von externer Seite getrieben wird. Das ist in der Praxis der wirklich kritische Fall, weil es vom Synthesetool nicht abgefangen werden kann. Je nach FPGA gibt es evtl. Strombegrenzer in den IOBs die ein Durchbrennen verhindern, ansonsten -> Ende Gelände.
>Also wenn 2 Anweisungen auf dasselbe Signal schreiben? Das ginge, wenn überhaupt, nur in einem Bussystem mit Tristatetreibern (alles andere endet in VHDL mit einer Fehlermeldung). Da FPGAs aber keine internen Tristatereiber haben (jedenfalls keine mir bekannten), wird das mit Multiplexern realisiert mit denen das Problem nicht auftauchen kann. Also: Nein!
In einem Projekt hab ich mal ein Spartan II XC2S150 durch das größere XC2S200 ersetzt. Blöderweise hab ich beim ersten Test vergessen das Configuration File anzupassen. Nach der Configuration zog das FPGA über 10A. Zum Glück hatte das Schaltnetzteil eine Strombegrenzung, die Spannung ist zuammengebrochen und das FPGA war wieder im Grundzustand. Das hab ich einige male wiederholt bis ich den Fehler bemerkte. Das FPGA hat das alles unbeschadet überstanden und läuft seit einigen Jahren fehlerfrei.
Ralf, habe ich etwas verpasst? Wurde ein Preis ausgeschrieben für denjenigen, der nachweisen kann, FPGAs in der am dümmsten anzunehmenden Weise missbraucht zu haben, oder wieso prahlen hier alle mit ihrer Unfähigkeit?
Hi, Danke für die Info. Code war sowas wie das:
1 | process(clk,rst) |
2 | begin
|
3 | if rst = '1' then |
4 | a <= '0'; |
5 | end if; |
6 | if rising_edge(clk) then |
7 | ..
|
8 | a <= '1'; |
9 | ..
|
10 | end if; |
11 | end process; |
Eigentlich wollte ich ja statt dem zweiten if ein elsif schreiben...hab ich aber beim späteren hinzufügen vergessen... Das ganze hat sich synthetisieren lassen, hat dann halt nicht funktioniert..was ja auch klar war. Bis jetzt hab ich noch einige andere Konfigurationen ausprobiert (funktionierende...), konnte nie ein Problem damit feststellen. mfg Andreas
Hallo Andreas, Anweisungen innerhalb eines Prozess-Blocks werden sequentiell (nacheinander) abgearbeitet. Die Zuweisungs des Wert zu einem Signal erfogt erst am Prozessende. Somit ist es kein Beispiel für Deine ursprüngliche Frage. Gruß, Valerij
Andreas wrote:
>
1 | > process(clk,rst) |
2 | > begin |
3 | > if rst = '1' then |
4 | > a <= '0'; |
5 | > end if; |
6 | > if rising_edge(clk) then |
7 | > .. |
8 | > a <= '1'; |
9 | > .. |
10 | > end if; |
11 | > end process; |
12 | >
|
Der ist gut :-D Ein FF, bei dem der Takt Vorrang vor dem Reset hat, sowas wollte ich schon lange ;-)
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.