您实际上可以通过错误编程来破坏FPGA吗?


26

您实际上可以通过错误地编程来破坏 FPGA吗?

我真的是个软件专家。众所周知,如果您的软件错误,则可能会破坏各种重要数据,甚至可能使整个计算机崩溃。但是,仅通过编程就很难对计算机造成物理损坏

(有无数传言称暂停并着火指令,或者能够重新刷新系统固件以使主板变砖,或者在显卡中编写不正确的值来油炸显示器。但是这些似乎完全是在:谣言。有关所有过时的硬件的信息。用不好的编程来破坏现代计算机设备似乎真的非常困难。)

使用FPGA,您(至少在名义上)将各个电路连接在一起。在错误的情况下可能发生物理损坏似乎是完全合理的。

例如,您可以编写一些VHDL,要求将两个输出捆绑在一起。如果他们输出不同的逻辑电平,我想那可能会炒东西。(我希望您的综合工具会大声疾呼您不要这样做……但是我不知道这样的工具是否真的实现了该级别的错误检查。)

在综合工具中偶然选择错误的FPGA模型似乎也是很有可能的,因此最终尝试使用旨在用于某些完全不同模型的位流对芯片进行编程。我不知道该怎么办,但我怀疑那是“不好的”。

因此,您肯定可以将FPGA芯片错误地连接到电路的其余部分。例如,如果您弄乱了引脚号,则可能最终会导致电路板尝试驱动FPGA本身也试图驱动的I / O引脚。I / O引脚通常是否具有针对此类错误的“保护”?还是会炸薯条?


3
一些FPGA具有安全性功能,仅允许从外部存储器加载加密和签名的比特流。密钥保存在FPGA中,并且只能编程一次。如果您无意中启用了此功能或松开了按键,则实际上就是一个“砖状” FPGA。
filo

2
“但是,仅通过编程就很难对计算机造成物理损坏。” 你是这样想的吗?曾几何时,由驱动程序控制硬盘头-这意味着病毒可以在硬盘上播放生日快乐。BIOS控制风扇-使其因过热而损坏(可能内置了一些保护装置,但是如果加热得足够快,则无法保存它)。BIOS甚至可以决定尝试向CPU施加20V电压。...如果您知道要使用哪种软件,则该软件很容易造成计算机损坏。
UKMonkey



2
@UKMonkey根据您的系统设置,我很确定您可以通过足够的努力融化任何CPU。大多数计算机-AFAIK不会完全被动冷却的任何东西-都可以控制冷却系统。您可以通过BIOS禁用另一项防御措施热调节,这意味着它可以由内核以编程方式完成。在这种特定情况下,这必须是故意的,但这绝对是可能的。
基金莫妮卡的诉讼

Answers:


31

在综合工具中偶然选择错误的FPGA模型似乎也是很有可能的,因此最终尝试使用旨在用于某些完全不同模型的位流对芯片进行编程。

通常,编程软件会查询正在编程的部件的部件号,并拒绝以意在用于其他型号FPGA的比特流进行编程。

如果使用不完全正确长度的位流进行编程,则该部件本身通常也将拒绝启动(对于不同芯片的位流具有相同的长度,这是非常罕见的)。

您肯定可以将FPGA芯片错误地连接到电路的其余部分。例如,如果您弄乱了引脚号,则可能最终会导致电路板尝试驱动FPGA本身也试图驱动的I / O引脚。

这是错误编程会损坏FPGA的最可能方法。

另一种方法是对非常消耗资源的设计进行编程,并以高频运行它(这样会消耗大量功率),然后在没有足够散热片的FPGA上运行它。

I / O引脚通常是否具有针对此类错误的“保护”?还是会炸薯条?

输出引脚将“经常”在短路状态下存活几秒钟甚至几分钟。但是没有任何保证。


1
有趣。FPGA通常需要主动散热吗?哦,我想这本身就是一个完整的问题。(而且我想答案取决于很多事情,例如您购买的是15英镑还是15,000英镑的FPGA!)
MathematicalOrchid

4
@MathematicalOrchid,不一定是主动冷却,但是散热器和强制通风非常普遍。FPGA供应商通常提供非常复杂的电子表格,以帮助确定(基于零件,设计,时钟频率等)散热器多大和风扇多大。
的光子

3
@MathematicalOrchid我已经使用FPGA作为频率计数器来测量高达250 MHz的方波。当我测量220 MHz时钟时,它需要冷却,但是我没有设置适当的冷却,而是确保不要测量超过5秒。它在220Mhz的功耗为5 W,IC约为2 cm ^ 2。天气很快就变得很热。
哈里·斯文森

@HarrySvensson对于频率计数器来说,这似乎有些疯狂。
user253751

1
@HarrySvensson仍然需要5瓦的电量还是很疯狂。
user253751

20

除少数几个例外外,工具通常无法让您访问实际的硅基元,因此最终用户工程师很难将电气无效的设计*加载到基于SRAM的FPGA中,除非可能是无意间发现了一个工具错误。

基于闪存的FPGA可能会因某些无效负载而损坏其可重编程性。OTP FPGA甚至会被有效的配置负载隐式“损坏” ,因为它永远无法更改。

最终,最接近您所要询问的内容以及与您的HCF示例最接近的是将产生无法忍受的应力的配置。功耗是由时钟频率和音量*所使用逻辑的活动直接驱动的,因此,如果您可以诱骗工具以最大时钟无用地切换芯片上的大多数触发器(有多种方法...),那么您就可以生产一个非常有效的加热器,它将超过大多数常规使用的冷却系统。这只是一个问题,如果有东西在烹饪之前就将其关闭。当然,工具中也包含功耗估算模型,如果您不对所提供的时钟信号撒谎,这些模型可能会合理预测。

(*您躺在工具上会引起一类有趣的“非bug”电气问题,虽然不一定会造成物理破坏,但仍然令人惊讶。如果您提供的时钟与您所说的时钟不同,或者只是不稳定,您可以违反同步块RAM单元上的地址设置时序,并通过缩短它们和破坏其内容的方式进行某些操作-因此,例如,您可以查看设计中指定为ROM的内容实际上在运行时更改,只需尝试要一个坏钟吧。但我不相信这是物理破坏)


2
您可以将每个触发器与它们之间的逆变器链接在一起,并产生大量热量。如果FPGA过热,是否有保护电路来调制时钟?时钟树通常不在他们的控制范围内。
本杰克逊

@BenJackson:时钟树不是或多或少都硬接线了,每个逻辑元素都可以在几棵不同的树中进行选择吗?时钟源本身可以在其控制范围之外,但是如果时钟源太热,它们可以简单地关闭时钟树缓冲区。或者我猜他们可能会关闭供应。
Michael

5

最可能的事情是通过驱动已经被驱动的引脚来违反GPIO的电流额定值。一些FPGA具有可设置的电流限制或可变的输出驱动器,因此如果您没有正确完成端口映射,这可以帮助/伤害您。无论如何,在编程之前,您都应该仔细检查端口列表,因为诸如交换插针之类的错误可能要花费数小时才能解决,因此最好提前解决这些错误并确切知道固件打算做什么。(除非您喜欢发现错误的快感)

HDL本身通常不允许您将两个输出连接到同一根导线,并且如果您确实有这样做的代码,则将停止合成并使您纠正错误。

双向端口可能会引起问题,但您应该在这些端口上安装限流电阻。


重新“ 将两个输出连接到同一根导线 ”:如果您保证综合工具永远不会同时启用两个三态缓冲器,那么您是否不能将两个三态缓冲器的输出连接在一起?即使驱动缓冲区“使能”的逻辑非常复杂,该工具能否检查您的承诺?
Edgar Bonet

@EdgarBonet是的,您可以通过这种方式引起冲突。如果某些逻辑(可能包括状态逻辑和/或FPGA外部的硬件/软件)导致两个冲突的OE变为活动状态,则无需逻辑强制输出启用互斥。 OE的逻辑已明确编码以防止这种情况。
罗德尼

@EdgarBonet您可以但通常在FPGA外部使用三态线,因为您需要驱动器/收发器,这些线可以在GPIO上找到。我从未在FPGA中设计过三态,并且我认为FPGA中的硬件不支持三态。您可以同时打开两个缓冲区,物理设计应防止您耗尽它们。
电压峰值

4

与微控制器一样,通过从每个引脚汲取最大电流(或更多),您总是可以超过每个IO bank的最大总电流。除非FPGA内置针对此类情况的保护措施,否则可能会导致损坏。

另一种可能性是形成一个组合环路,该环路周期性地变得亚稳态,或者以比FPGA架构所设计的要处理的频率高得多的频率振荡(几个GHz)。这将导致局部过热,从而可能在芯片级热保护启动之前对物理造成损害。也就是说,假设有这样的保护措施:如果温度过高不会导致关机,您只需提出一个解决方案。非常耗电的电路,并使其在冷却不足的情况下运行。

动态重新配置还可以绕过保护措施,以防止内部基元的无效配置,在静态配置的情况下,开发工具可能会强制执行这些配置。例如,您可以以超过其最大内部频率的方式配置PLL,或者一次通过两个源馈送同一条互连线,或者强制高压IO组中的引脚使用其低压收发器(如LVDS) 。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.