VHDL che può danneggiare FPGA


22

Ho letto da qualche parte che un cattivo codice VHDL può portare a danni FPGA.

È persino possibile danneggiare un FPGA con codice VHDL? Che tipo di condizioni causerebbe questo e quali sono gli scenari peggiori?


2
L'unico scenario che mi viene in mente è un progetto in cui molti, molti FF sono sincronizzati per riscaldare l'FPGA.
Claudio Avi Chami,

Bene, può essere incorporato in un circuito mal progettato, che farà correre alcune correnti attorno alla combustione di materiale se non programmato correttamente.
Eugene Sh.

3
lo scenario peggiore probabilmente è che l'FPGA viene utilizzato per l'apprendimento automatico e crea un'intelligenza artificiale canaglia che distrugge il mondo e l'universo. più seriamente, se si utilizza un codice non controllato in un FPGA collegato al computer, potrebbe infettare detto computer. anche se viene utilizzato per controllare dispositivi ad alta potenza, puoi bruciare un edificio.
satibel,

Risposte:


25

Aggiungendo alla risposta di @ Anonimo, ci sono progetti che puoi costruire che possono danneggiare il tessuto di un FPGA.

Per i principianti se si costruisce un design molto grande costituito da enormi quantità di registri (ad esempio il 70% dell'FPGA) tutti con clock vicino alla frequenza massima degli FPGA, è possibile riscaldare considerevolmente il silicio. Senza un raffreddamento sufficiente ciò può causare danni fisici. Abbiamo perso un FPGA da $ 13k perché si è surriscaldato a causa del kit di sviluppo con un terribile sistema di raffreddamento.

Un altro caso più semplice possono essere i cicli combinatori. Ad esempio, se si istanziano tre porte non incatenate insieme in un anello e si disabilitano o si ignorano gli avvisi dei sintetizzatori su tale struttura, è possibile formare qualcosa di molto dannoso per un FPGA. In questo esempio creeresti un oscillatore multi-GHz che potrebbe produrre molto calore in un'area molto piccola, probabilmente danneggiando l'ALM e la logica circostante.


1
I circuiti combinatori sono talvolta suggeriti come generatori di numeri casuali veri. Non ho esperienza con gli oscillatori ad anello , ma dubito che solo tre porte possano fare del male. Guidare la sua uscita su molte porte probabilmente farà comunque del male.
Andreas,

7
grazie ora ho 2-3 schede inutili a causa di errori di progettazione con spartan 6 su di esse. Proverò questo: P
AntoineLev

È anche possibile caricare un flusso di bit che impedisce il caricamento di altri flussi di bit, o almeno lo rende abbastanza difficile da eseguire.
Vladimir Cravero,

8

Codice non è una parola giusta in questo contesto. Mentre Verilog o VHDL sembrano programmi, l'output del compilatore è una configurazione che viene caricata nel chip FPGA formando un circuito elettronico al suo interno.

Mi vengono in mente due tipi:

  • danno fisico: ad esempio, più pin FPGA sono collegati insieme (o ad un altro dispositivo) e iniziano a fornire tensione logica diversa allo stesso tempo. I flussi di corrente - potrebbe essere una corrente eccessiva - che alla fine danneggia i gate;
  • danno logico: il circuito potrebbe gestire il chip flash o il dispositivo di configurazione in modo errato e l'immagine dei dati corrotta al suo interno, l'intero dispositivo potrebbe non funzionare correttamente.

4
L'argomento del danno fisico potrebbe essere la provenienza della citazione del PO. Come sviluppatore di software, mi è stato detto che una regola generale è che il "software" non dovrebbe essere in grado di arrecare danni fisici al dispositivo mentre il "firmware" può causare danni, ad esempio collegando due subacquei tra loro.
Cort Ammon - Ripristina Monica il

2
@CortAmmon "come collegare due subacquei tra loro" - Cos'è questo, un interruttore di collegamento incrociato del tubo dell'aria?
user253751

1
@immibis Mi hai preso! La regola reale era "non fare affidamento sul software / squishyware nella testa del tuo amico mentre il tuo amico respira, invece afferra sempre saldamente il tuo regolatore". ;-)
Cort Ammon - Ripristina Monica

3

La configurazione errata di un blocco di pin di input poiché le uscite potrebbero farlo se qualsiasi altra cosa li sta guidando è abbastanza rigida.

Non so se la configurazione di alcuni pin per LVDS o uno degli standard LVCMOS mentre il banco IO sia alimentato da una tensione eccessivamente alta (potenza 3,3 V con uno standard IO 1,8 ad esempio, o l'opposto su un ingresso) farebbe vero?

Ovviamente i problemi termici possono essere una possibilità facendo qualcosa di stupido come istanziare molti, molti, oscillatori ad anello.


Lo standard I / O fornito come vincoli alla progettazione è solo per i calcoli di temporizzazione. Se il banco I / O è un banco da 3,3 V e alimentato da 3,3 V non accade nulla se si sceglie uno standard da 1,8 V.
Paebbels

@Paebbels, non sono sicuro di quale strumento stai usando, ma di solito quando imposti uno standard I / O controlla la tensione di quella posizione I / O. Se un pin di ingresso FPGA è impostato su una tensione molto più bassa di quella che il dispositivo esterno sta guidando su quel pin, quell'ingresso FPGA può essere danneggiato.
Ciano,

@Ciano che non è corretto. La tensione del pin dipende dalla tensione del banco I / O e non da un vincolo.
Paebbels,

1

Gli FPGA possono essere riconfigurati in fase di esecuzione con un nuovo bitstream (parziale). Normalmente, questo flusso viene caricato da una fonte esterna, ma è anche possibile crearlo da solo nell'FPGA (ad esempio da una CPU softcore integrata). L'uso di tale soluzione, ad esempio per trasferire in modo dinamico i progetti secondari, non fornisce tutti i controlli di coerenza eseguiti dagli strumenti del fornitore. Quindi, se il tuo algoritmo è rotto, potresti abilitare i transistor di false path in un FPGA e bruciarli.

Potresti anche scegliere false modalità operative per primitive FPGA come PLL o ricetrasmettitori.

La riconfigurazione dinamica è come un codice di auto-modifica nel software.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.