比赛条件是什么意思?


10

我是新电气工程师,请多多包涵。我听到一些与我合作的其他工程师谈论我们其中一个电路中存在的竞争状况。

这意味着什么?


如果您想看一个特定的例子,“去毛刺RAM写入”和下面的两篇文章就关于一个bug进行了长时间的讨论,据我所知,该bug是由竞争条件触发的。
davidcary

Answers:


16

这很简单地意味着两件事同时“争夺”结果。

例如,具有复位和设置引脚的电路,如果触发复位,则输出变为0。如果触发设置,则输出变为1。如果首先触发设置,然后在复位后非常非常快地复位,则复位。将会看到,因此输出为0。

但是,如果它们都在同一时间触发,会发生什么?

如果电路设计者注意了,那对于功能很重要,应该有一个答案。如果对该问题没有确定的答案,则电路处于竞争状态,来自置位信号和复位信号相互“竞争”,看哪个胜出以确定输出。

延迟最小的路径通常会获胜,但是随后您可以将竞赛条件视为确切的触发器,其中延迟最大的路径恰好在更快的路径之前被触发了。

许多电路,包括IC内部的逻辑构建块,都有一定的竞争条件,但通常情况如此,以至于您按预期使用电路时,不会注意到。因此,当工程师多次大声说出“比赛条件”时,他们实际上是在正常使用中也可能发生这种情况,这是一个问题,因为在比赛条件下无法预测正常的操作。

在软件中也使用该术语,但通常表示时序问题或锁定。但是,这是一个相似的原理。通常,当计算机中有两个进程独立运行时,但是使用相同的内存时,可以防止该内存被一个进程写入,而另一个进程正在使用它。如果您不这样做,他们会说这是一种可能的竞争条件:一个进程可能正在读取一个正处于更新过程中的值,或者两者都可能同时写入该值,然后您不知道会发生什么情况。发生。


2
作为这个好答案的补充,我要指出,硬件在这些情况下的性能可能非常差。实际的硬件永远不会立即从0切换到1。它总是必须在它们之间的短时间内上升。大多数逻辑假设自从发生这种过渡以来已经经过了足够的时间,以使瞬态已解析为“真正接近0”或“真正接近1”。如果时机选择...很不幸,则可能接近0.5。许多电路在这种状态下变得“稳定”,这意味着它们可能需要花费不确定的时间来过渡,从而使整个电路不稳定
Cort Ammon 2015年

1
即使您的电路旨在处理同时激活“设置”和“复位”的情况,也无法可靠地同时激活它们,因此您不会知道先激活哪一个。
user253751

非原子操作是软件中竞争条件的更好示例。程序可以使用C创建一个新文件fopen(),向其中写入数据fclose(),然后chmod()对其进行保护。之间那短暂的窗口fopen(),并chmod()打开一个可能的竞争条件,其中默认的文件模式可能允许不需要外人来工作,在后否认了这样的文件chmod()调用。解决方案是改为使用来创建文件open(),这允许将模式设置为文件创建操作的一部分。
沃伦·杨

6

术语“竞赛条件”意味着(1)两个或更多信号可以以任意顺序到达彼此任意靠近,并且(2)不可能分析性地表明到达的任何可能组合的概率基本上为零次构成问题。

从单个触发器的角度来看,其数据输入可能会随时随时钟变化,时钟和数据输入上几乎同时的跃迁可能会导致竞争。但是,从总体电路行为的角度来看,如果它们仅在以下情况发生时不会出现竞争状态:下游电路不会在乎锁存器保持什么,而下游电路也不会开始在意锁存器保持在什么时候直到时钟脉冲到达之后,该时钟脉冲不可能在数据输入的任何跃迁附近发生。

此外,由于通常不可能完全完全消除有问题的输入时序的所有可能性,因此许多竞争情况分析都会说,如果将一个寄存器的输出馈入由同一时钟控制的另一个寄存器,则第二个寄存器将始终锁存即使第一个寄存器的输入导致它捕获了恰好在开关阈值上的输入电平,“干净”高电平还是“干净”低电平。从理论上讲,第一个锁存器有可能捕获一个刚好高于或低于其确切开关阈值的电平,以使输出电平将在下一个时钟脉冲到达时精确地转换。

结果,例如,如果要输入一个输入并将其传递给三个触发器序列,并有一个电路,只要第二个触发器为高电平而第三个触发器为低电平,则输出高电平,则出现在第二个触发器上的任何上升沿数据输入之前一定是低电平时间的完整时钟周期,然后是高电平时间的完整时钟周期,从本质上可以保证在一个时钟周期内使电路的输出为高电平。

原理图

模拟该电路 –使用CircuitLab创建的原理图

在此示意图中,具有某种不规则时序的信号以三种方式归一化为时钟,以便在每个上升沿之后的一个时钟周期内产生高输出。第一次尝试将信号标准化会产生令人讨厌的输出,并且如果输入和时钟同时变化,则具有明显的竞争状态。第二种方法要好得多,但是如果时钟和数据的时序导致第一个寄存器捕获中间值,则竞争条件仍然存在(模拟器无法触发)。第三种方法代表了通常的做法,通常被认为是安全的,因为即使第一个寄存器未能捕获干净高点或干净低点,第一个寄存器的输出不太可能具有完全正确的行为,而导致第二个寄存器不能干净地抓取。如果数据非常接近时钟变化,则可以在当前周期获取数据,或者直到下一个周期才获取数据,但是如果任何一种情况都可以接受,则不存在竞争条件。


您说:“ ...看起来很讨厌的输出。” 这是“可转移状态”的另一种说法吗?
所罗门慢

@jameslarge:模拟器无法处理亚稳态。我将第一个输出描述为丑陋,因为没有最小脉冲宽度,而第二个输出则由于存在亚稳态而具有风险。
超级猫

2

简而言之,这意味着过程的结果将受到两个输入的到达顺序的影响,并且该顺序是不确定的(无法保证)。

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.