Forum: FPGA, VHDL & Co. Ist es möglich FPGA zu zerstören/beschädigen?


von Andreas (Gast)


Lesenswert?

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

von Valerij M. (fpga-dev)


Lesenswert?

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)

von Christian R. (supachris)


Lesenswert?

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.

von Max M. (max93)


Lesenswert?

>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

von Daniel R. (daniel_r)


Lesenswert?

@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

von neeeee (Gast)


Lesenswert?

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.

von Morin (Gast)


Lesenswert?

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

von Uli W. (uliw2008)


Lesenswert?

schadcode?

hab ich was verpasst ?

von Bastler (Gast)


Lesenswert?

>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!

von ralf (Gast)


Lesenswert?

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.

von Gibts hier was umsonst? (Gast)


Lesenswert?

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?

von Andreas (Gast)


Lesenswert?

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

von Valerij M. (fpga-dev)


Lesenswert?

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

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


Lesenswert?

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
Noch kein Account? Hier anmelden.