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á?
Respostas:
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).
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 saída "frequentemente" sobrevivem a uma condição de curto-circuito por alguns segundos ou até minutos. Mas nada é garantido.
fonte
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)
fonte
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.
fonte
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 .
fonte