我们如何确保计算机永远不会意外地将 0 转换为 1?

电器工程 电脑 计算机架构
2022-01-11 00:50:47

我在 Shocken/Nisan 的《计算系统的要素》中读到了一些关于数字计算机构建的内容但是这本书对计算机中的某些电气方面只字未提,例如:常说0和1用电压表示,如果电压在区间[0, 0.9)内,则为0。如果电压为在区间 [0.9, 1.5) 中,则为 1(电压可能会有所不同,我只是举个例子)。

但我从来没有读过是什么让电压“表现良好”,因为计算机内部的电气波动[1],0 永远不会意外地变成 1。也许电压有可能非常接近 0.9,那么如何避免它超过阈值?

[1]:假设它存在。

4个回答

常说0和1用电压来表示,如果电压在区间[0, 0.9)内,则为0。如果电压在区间[0.9, 1.5)内,则为1(电压可能会有所不同,我只是举个例子)。

在某种程度上,您主要是通过使用一个不切实际的示例来创建这个问题的。实际电路中逻辑低电平和高电平之间的差距要大得多。

例如,5V CMOS 逻辑将为逻辑低输出 0-0.2V,为逻辑高输出 4.7-5V,并且将始终接受低于 1.3V 的任何低或高于 3.7V 的任何高。也就是说,输出的余量比输入的裕度要小得多,并且可能用于逻辑低信号 (<1.3V) 的电压与可能用于逻辑高 (>3.7V) 的电压之间存在巨大差距. 这一切都是专门为考虑噪音而设计的,并防止您所描述的那种意外切换。

这是我从interfacebus.com借来的各种逻辑标准的阈值的可视化表示:

逻辑电平阈值][1]

每列代表一个逻辑标准,纵轴是电压。以下是每种颜色所代表的含义:

  • 橙色:此范围内的电压输出为逻辑高电平,并将被接受为逻辑高电平。
  • 浅绿色:此范围内的电压将被视为逻辑高电平。
  • 粉红色/蓝色:此范围内的电压不会被一致地解释,但粉红色区域中的电压通常最终会被解释为高,而蓝色区域中的电压通常会被解释为低。
  • 蓝绿色:此范围内的电压将被视为逻辑低电平。
  • 黄色:此范围内的电压输出为逻辑低电平,并将被解释为逻辑低电平。

我们不能。我们只是通过对数据添加检查来降低出错的可能性。根据要检查的数据类型,它可以通过硬件或软件完成,并且可以采用任何形式,从串行流中的简单校验和位到循环状态机,只允许在任何给定时间进行特定的转换。

但这是一个恶性循环,不是吗?我们如何确保负责检查数据的电路不受与数据相同的干扰的影响并给出误报?添加另一个?您可以看到这最终会变得非常昂贵,而收益却很少。

问题是:您希望您的系统有多可靠?例如,嵌入了一些可用的最可靠计算机系统的卫星有时会采用非相同系统的交叉冗余以及投票:三台不同的计算机运行由三个不同的人以三种不同的方式编码的相同算法,如果一个的计算机给出了与其他两台不同的结果,它被重新启动(如果再次发生,则被隔离)。但是同样,如果两台计算机同时出现故障,则错误的计算机将被重新启动/隔离。通常,“冷冗余”就足够了:实现初级和次级电路,初级运行直到某种(未受保护的)监控电路检测到错误并换入次级电路。如果它只是一个错误在内存中,可以重新运行代码以刷新数据。您只需要明智地决定在哪里画线,就不可能制作出 100% 可靠的错误检测电路。

由于高能粒子与半导体晶格碰撞或被半导体晶格吸收,卫星(尤其是在高海拔地区或范艾伦带)和核电站或其他放射性环境中的计算机特别容易受到(关键字:)单粒子扰动或闩锁的影响. 涵盖这些领域的书籍肯定是您的最佳选择。油漆会因辐射造成的位移损坏而退化,因此完全可以理解,半导体也可能被入射辐射损坏或扰乱。

单一事件的冷门不再是太空或飞机的事情。我们已经看到它们在表面上发生了十多年,现在可能是两个。

如前所述,至少在太空应用中,我们使用三重投票来处理干扰(每一位实际上是三,三分之二的投票获胜,所以如果有一个改变了,那么另外两个将覆盖它。)。然后是 ECC 或EDAC,使用以高于预测的单事件更新率的速率通过 RAM 的清理器来清除单事件扰乱(实际上推动三分之二投票错误的扰乱)。

然后是总剂量;随着时间的推移,这种材料的放射性太强而无法工作,因此您使用的材料足以超过车辆的使用寿命。不是我们通常在表面上担心的事情。(和闩锁)并行使用三组/多组逻辑是/曾经是一种尝试不必使用传统 rad-hard 技术的方法,而且,您会发现它的效果如何。

过去知道如何为太空制造东西的人大部分已经退休或继续前进,所以我们现在有许多制造太空垃圾的程序。或者像对待地球产品一样对待太空,而不是试图让每个人都工作并控制再进入和燃尽,我们现在预计每个星座都会有一定数量的太空垃圾。

我们确实看到了表面上的不安。您购买的任何记忆棒 ( DRAM ) 都具有 FIT、及时故障以及任何带有 RAM 的芯片(所有处理器,许多其他),也将具有 FIT 规格(用于 RAM (SRAM) 块)。RAM 更密集,使用更小的晶体管,因此更容易受到内部或外部干扰。大多数时候,我们不会注意到或关心我们用于数据、观看视频等的内存被写入、读回并且在它坐下来足够长的时间之前不会再次使用。一些内存,例如保存程序或内核的内存,风险更大。但我们早就习惯了重启电脑或重启/重启手机的想法(某些手机/品牌您必须定期定期取出电池)。是这些麻烦还是坏软件或两者兼而有之?

您的单个产品的 FIT 数字可能会超过该产品的使用寿命,但如果是大型服务器场,您会考虑所有 RAM 或芯片或其他任何东西,而 MTBF 会从几年或过去的订单到几天或几小时,在某个地方农场。你有 ECC 来覆盖你所能做的。然后,您通过故障转移分配处理负载,以覆盖无法完成任务的机器或软件。

对固态存储的需求以及从旋转介质的转变产生了与此相关的问题。用于SSD(和其他非易失性存储)的存储变得更快、更便宜,比我们想要的更易失,并且依赖于 EDAC,因为没有它我们会丢失数据。他们投入了很多额外的比特,并抄送了整个事情,通过数学计算来平衡存储的速度、成本和寿命。我没有看到我们回头;人们希望在任何地方都有更多的非易失性存储,这些存储可以装在一个小包装中,并且不会主导产品的价格。

就普通电路而言,从最初将晶体管用于数字电路到现在,我们通过晶体管的线性部分并将其用作开关,我们将其敲击在轨道之间,并有一些多余的部分以确保它粘住. 就像墙上的电灯开关一样,您将其翻转一半以上,弹簧会帮助其余部分并将其固定在那里。这就是我们使用数字而不是试图生活在线性区域的原因;他们很早就尝试过,但失败了。他们无法保持校准。

因此,我们只需将晶体管猛击到其轨道上,信号的两侧就会在下一个时钟周期内稳定下来。在对芯片设计进行分析时,我们付出了巨大的努力,并且当前的工具比以前要好得多,可以看出设计在时序上有余量。然后测试每个晶圆上的每个芯片(封装后和/或封装后),以查看每个芯片是否良好。

芯片技术严重依赖基于实验的统计数据。当您对 CPU 进行超频时,您就是在推动这一边际,保持在宣传的时钟频率、温度等范围内,并且您出现问题的机会大大降低。3 GHz xyz 处理器只是一个 4 GHz 芯片,它在 4 GHz 时失败但在 3 GHz 时通过。这些零件基本上是从生产线上进行速度分级的。

然后是芯片或电路板之间的连接,这些也容易出现问题,并且需要花费大量时间和精力来制定标准和电路板设计等,以减少这些接口上的错误。 USB、键盘、鼠标、HDMISATA等。以及板上的所有痕迹。板上和板下都有串扰问题;同样,如果您使用它们以及首先避免问题的经验,则可以使用许多工具,但另一种方式是我们可能看不到 1 和 0 完全参与。

任何技术,甚至空间,都不是完美的。它只需要足够好,产品的足够百分比必须覆盖产品的足够预期寿命。一定比例的智能手机必须至少生产两年,仅此而已。较老的代工厂或技术有更多的实验数据,可以生产出更可靠的产品,但速度较慢,而且可能不是新设计,所以就这样吧。最前沿就是这样,对每个人来说都是一场赌博。

对于您的具体问题,信号两端的晶体管被​​快速推过它们的线性区域并倾斜到其中一个轨道上。对每条组合路径进行分析以确定它会在路径末端的时钟锁存它之前稳定下来,因此它确实是零或一。分析基于实验。产品线的第一批芯片被推到设计边界之外,绘制了schmoo 图以确定设计中的余量。对过程进行更改和/或找到代表慢速和快速芯片的个别候选者。这是一个复杂的过程,有些材料更多,有些材料更少,运行速度更快但使用更多能量或运行速度更慢等。

你也把它们推到了边缘。并且基本上获得了一种温暖的模糊感觉,即该设计可以投入生产。JTAG /边界扫描用于在每个锁存状态之间通过芯片运行随机模式,以查看组合路径对于设计来说都是可靠的。在有问题的地方,也可能会进行一些有针对性的功能测试。对第一个硅片进行进一步测试,并可能进行随机测试以确保产品良好。如果/当发生故障时,这可能会促使您回到生产线上进行更多功能测试。它在很大程度上取决于统计数据/百分比。1/1000000 坏人出去可能没问题或 1/1000 或其他;这取决于您认为您将生产多少该芯片。

这些漏洞与此处和其他漏洞一样。首先是芯片本身,设计和工艺有多好,你购买的产品中特定芯片的最薄弱路径有多接近利润。如果太靠近边缘,那么温度变化或其他可能会导致时序问题,并且位将锁存尚未稳定为 1 或 0 的数据。然后是单一事件的冷门。然后是噪音。再说一遍已经提到的东西......

如果您想要一个简单的答案:

计算机中的每个数字组件在其产生的输出方面比在其接受的输入方面受到更多限制。例如,从 0V 到 2V 的任何“输入”值都将被接受为 0,但 0 的“输出”值将始终在 0 到 0.5V 的范围内。(有关一些实际值,请参阅黄昏的答案。)

这意味着每个组件都有助于“纠正”沿线发生的一些偏差或噪音。当然,如果噪声足够大,系统无法补偿。高辐射环境中的计算机经常会受到 1 变为 0 的影响,反之亦然。

基本上,计算机被设计成可以容忍一定程度的噪音/干扰,这对于大多数实际用途来说已经足够了。