Você pode realmente quebrar um FPGA programando-o errado?

26

Você pode realmente quebrar um FPGA programando-o incorretamente?

Eu sou um cara de software realmente. Não é segredo que, se o seu software estiver errado, você poderá destruir todos os tipos de dados importantes e talvez até travar a máquina inteira. Mas é realmente difícil danificar fisicamente um computador apenas programando-o.

(Há rumores intermináveis ​​de uma instrução Halt-and-Catch-Fire, ou ser capaz de atualizar o firmware do sistema para bloquear a placa-mãe, ou programar valores incorretos na placa gráfica para fritar o monitor. Mas tudo isso parece ser exatamente isso : rumores. E tudo sobre hardware obsoleto. Parece muito, muito difícil quebrar equipamentos de computadores modernos com uma programação ruim.)

Com um FPGA, você está (pelo menos nominalmente) conectando circuitos individuais. Parece completamente plausível que danos físicos possam ocorrer em caso de erro.

Por exemplo, você pode escrever alguns VHDL solicitando que duas saídas sejam ligadas. Se eles produzem níveis lógicos diferentes, imagino que provavelmente fritariam alguma coisa. ( Espero que sua ferramenta de síntese grite para você não fazer isso ... mas não sei se essas ferramentas realmente implementam esse nível de verificação de erros.)

Também parece bem possível escolher acidentalmente o modelo errado de FPGA na ferramenta de síntese e, assim, acabar programando seu chip com um fluxo de bits destinado a um modelo totalmente diferente. Não sei o que isso faria, mas suspeito que seria "ruim".

Nesse caso, você definitivamente pode conectar o chip FPGA ao resto do circuito incorretamente. Por exemplo, se você bagunçar os números dos pinos, poderá acabar com a placa tentando acionar um pino de E / S que o próprio FPGA também está tentando acionar. Os pinos de E / S normalmente têm alguma "proteção" contra esse erro? Ou o chip apenas fritará?

MathematicsOrchid
fonte
3
Alguns FPGAs possuem recursos de segurança que permitem apenas carregar fluxo de bits criptografado e assinado da memória externa. As teclas são mantidas no FPGA e programáveis ​​apenas uma vez. Se você ativar esse recurso por acidente ou perder as teclas, terá essencialmente um FPGA "emparelhado".
filo
2
"Mas é realmente difícil danificar fisicamente um computador apenas programando-o". você acha? Era uma vez, cabia ao motorista controlar as cabeças dos discos rígidos - o que significa que um vírus pode reproduzir feliz aniversário em seus discos rígidos. O BIOS controla os ventiladores - permitindo causar danos por superaquecimento (pode haver alguma proteção embutida, mas se você a aquecer rápido o suficiente, ela não poderá ser salva). O BIOS pode até decidir colocar 20V em sua CPU .... O software pode facilmente ser responsável por danificar os computadores se você souber com qual software mexer.
UKMonkey 26/06
2
@UKMonkey youtube.com/watch?v=CsQd2n99zS4
Joshua
2
@UKMonkey Dependendo da configuração do seu sistema, tenho certeza de que você pode derreter qualquer CPU com esforço suficiente. A maioria dos computadores - qualquer AFAIK que não seja puramente passivamente resfriado - terá uma maneira de controlar o sistema de resfriamento. Você pode desativar a limitação térmica, outra linha de defesa, através do BIOS, o que implica que isso pode ser feito programaticamente pelo kernel. Nesse caso específico, teria que ser intencional, mas é definitivamente muito possível.
Fund Monica's Lawsuit

Respostas:

31

Também parece bem possível escolher acidentalmente o modelo errado de FPGA na ferramenta de síntese e, assim, acabar programando seu chip com um fluxo de bits destinado a um modelo totalmente diferente.

Normalmente, o software de programação consulta a peça que está sendo programada para obter seu número de peça e se recusa a programar em um fluxo de bits destinado a um modelo diferente de FPGA.

A parte em si também geralmente se recusará a iniciar se programada com um fluxo de bits que não tenha exatamente o tamanho correto (e é muito incomum que fluxos de bits para chips diferentes tenham o mesmo comprimento).

você definitivamente pode conectar o chip FPGA ao resto do circuito incorretamente. Por exemplo, se você bagunçar os números dos pinos, poderá acabar com a placa tentando acionar um pino de E / S que o próprio FPGA também está tentando acionar.

Essa é a maneira mais provável de danificar um FPGA com programação incorreta.

Outra maneira seria programar um projeto com muitos recursos e executá-lo em alta frequência (para que uma alta potência seja consumida) e executá-lo em um FPGA sem um dissipador de calor adequado.

Os pinos de E / S normalmente têm alguma "proteção" contra esse erro? Ou o chip apenas fritará?

Os pinos de saída "frequentemente" sobrevivem a uma condição de curto-circuito por alguns segundos ou até minutos. Mas nada é garantido.

O fóton
fonte
11
Interessante. É comum os FPGAs precisarem de refrigeração ativa? Suponho que seja uma questão inteira por si só. (E acho que a resposta depende de muitas coisas - como se você comprou um FPGA de 15 ou 15.000 libras!)
MathematicsOrchid
4
@ MathematicsOrchid, não necessariamente resfriamento ativo, mas dissipadores de calor e ar forçado são bastante comuns. Os fornecedores de FPGA geralmente fornecem uma planilha muito complexa para ajudar a determinar (com base na peça, no design, na frequência do relógio etc.) qual o tamanho de um dissipador de calor e qual o tamanho de um ventilador.
The Photon
3
@MathematicsOrchid Usei um FPGA como contador de frequência para medir ondas quadradas de até 250 MHz. É necessário arrefecimento como eu medi um relógio de 220 MHz, mas em vez de criação de resfriamento adequado Eu só fez questão de não medir mais de 5 segundos. Ele consumia 5 W a 220 MHz e o CI era de cerca de 2 cm ^ 2. Ficou muito quente muito rápido.
Harry Svensson
@HarrySvensson Isso parece uma quantidade louca de calor para um contador de frequência.
user253751
11
@HarrySvensson Ainda é uma loucura que isso deva levar 5 watts.
user253751
20

Com algumas exceções observadas, as ferramentas geralmente não dão acesso às primitivas de silício reais, por isso é difícil para um engenheiro do usuário final carregar um design eletricamente inválido * em um FPGA baseado em SRAM, exceto talvez por descobrir inadvertidamente uma ferramenta erro.

Os FPGAs baseados em Flash podem ter sua reprogramação danificada por determinadas cargas inválidas. Os FPGAs do OTP implicitamente são "danificados" por uma carga de configuração válida , pois nunca podem ser alterados.

Por fim, o que mais se aproxima do que você parece perguntar e do seu exemplo de HCF seria uma configuração que produzisse estresse térmico intolerável . O consumo de energia é diretamente direcionado pela taxa de clock e volume * da atividade da lógica utilizada, portanto, se você pode enganar as ferramentas para alternar inutilmente a maioria dos chinelos no chip no clock máximo (existem maneiras ...), você pode produzir um aquecedor bastante eficaz que excederia a maioria dos sistemas de refrigeração para uso comum. Então é apenas uma questão se algo o desliga de forma protetora antes de cozinhar. E, é claro, existem modelos de estimativa de energia nas ferramentas, que provavelmente são razoavelmente preditivos se você não estiver mentindo para eles sobre o sinal de relógio fornecido.

(* Há uma classe interessante de problema elétrico que não é um bug que você pode causar mentindo para as ferramentas, que não é necessariamente fisicamente destrutivo, mas ainda é surpreendente. Se você alimentar um relógio diferente do que você disse que seria ou simplesmente instável, você pode violar o tempo de configuração do endereço nas células de RAM do bloco síncrono e fazer algo parecido com o curto-circuito e corromper seu conteúdo - para que você possa, por exemplo, ver o conteúdo de algo designado como ROM no design realmente mudar no tempo de execução apenas tentando para ler com um relógio ruim. Mas eu não acredito que isso é fisicamente destrutiva)

Chris Stratton
fonte
2
Você pode encadear cada flop com um inversor no meio e gerar muito calor. Algum FPGA possui circuitos de proteção para modular o relógio se ficar muito quente? A árvore do relógio geralmente está fora de seu controle.
Ben Jackson
@ BenJackson: A árvore do relógio não é mais ou menos conectada, com cada elemento lógico capaz de selecionar entre algumas árvores diferentes? A própria fonte do relógio pode estar fora de seu controle, mas eles podem simplesmente desativar os buffers da árvore do relógio se ficar muito quente. Ou acho que eles poderiam desligar o fornecimento.
Michael
5

O mais provável é violar a classificação atual nos GPIOs, acionando um pino que já está sendo acionado. Alguns FPGAs têm limites de corrente configuráveis ​​ou drivers de saída variáveis, portanto, isso pode ajudar / prejudicar você, se você não fizer seu mapa de portas corretamente. Você deve verificar sua lista de portas de qualquer maneira antes de programar, pois erros como a troca de pinos podem levar horas para serem resolvidos; é melhor se antecipar aos erros e saber exatamente o que o firmware deveria fazer. (a menos que você goste da emoção de encontrar um erro)

Os HDLs por si só geralmente não permitem conectar duas saídas ao mesmo fio e param de sintetizar e corrigem seu erro se você tiver um código que faça isso.

Um local que pode causar problemas são as portas bidirecionais, mas você deve ter resistores limitadores de corrente nessas.

Voltage Spike
fonte
Re “ conecte duas saídas ao mesmo fio ”: você não pode conectar as saídas de dois buffers de três estados se prometer que a ferramenta de síntese nunca habilitará os dois ao mesmo tempo? A ferramenta pode verificar se você cumpre sua promessa, mesmo que a lógica que aciona a “habilitação” dos buffers seja muito complicada?
Edgar Bonet
@ EdgarBonet Sim, você pode causar conflitos dessa maneira. Não há necessidade de forçar logicamente a saída para permitir que sejam mutuamente exclusivas, se alguma lógica (que pode incluir lógica de estado e / ou hardware / software externo ao FPGA) fizer com que dois OEs conflitantes se tornem ativos, não há nada para pará-lo, a menos que o a lógica dos OEs foi explicitamente codificada para evitar isso.
Rodney
@ EdgarBonet Você pode, mas normalmente os fios de três estados são externos ao FPGA, pois você precisa de um driver / transceptor e esses são encontrados nos GPIOs. Nunca projetei com threestate em um FPGA e não acho que o hardware em um FPGA suporte três estados. Você pode ativar dois buffers ao mesmo tempo, o design físico deve impedir que você os queime.
Voltage Spike
4

Como nos microcontroladores, você sempre pode exceder a corrente total máxima por banco de E / S desenhando uma corrente máxima (ou mais) de cada pino. A menos que o FPGA tenha proteção interna contra essa situação, isso pode resultar em danos.

Outra possibilidade é criar um loop combinatório que periodicamente seja metaestável ou oscile a uma frequência muito maior do que o tecido FPGA foi projetado para lidar (vários GHz). Isso causará um superaquecimento localizado, o que pode causar danos físicos antes que a proteção térmica em todo o chip entre em ação. Isto é, assumindo que existe essa proteção: se o excesso de temperatura não levar ao desligamento, você pode simplesmente encontrar um circuito que consome muita energia e deixe funcionar com refrigeração insuficiente.

A reconfiguração dinâmica também pode solucionar as proteções contra a configuração inválida de primitivas internas que podem ser aplicadas pelas ferramentas de desenvolvimento no caso de uma configuração estática. Por exemplo, você pode configurar um PLL de uma maneira que exceda sua frequência interna máxima, ou alimentar a mesma linha de interconexão por duas fontes ao mesmo tempo ou forçar um pino de um banco IO de alta tensão para usar seu transceptor de baixa tensão como LVDS .

Dmitry Grigoryev
fonte