Reborn

https://blog.csdn.net/Reborn_Lee是我的原博客地址(内容广泛),在AET令立一个博客,专门记录硬件、FPGA相关的内容吧。

组合逻辑中的竞争与险象问题(三)

0
阅读(1073)

上篇博文:组合逻辑中的竞争与险象问题(二)讲了半开关的相关知识,更确切的说是竞争的根源问题。这篇博文将险象问题。

险象的定义

有竞争引起的非预期行为就叫做险象。

可见,竞争是险象的前提。但是竞争就一前提的存在,并不一定会引起险象,什么样的竞争会引起险象呢?

下面对此进行分析:

半开关是竞争产生的根源因此要找到竞争与险象的关系,只需要仔细分析一下与门半开关和或门半开关到底在什么情况下会出现非预期的行为即可。

现假设某半开关的所有端口都直接或间接的与组合逻辑的输入端口A相关,那么,从逻辑上来说,这个与(或)门的M个输入不是与A相连就是与\bar{A }相连,此时若A发生变化时,相当于该与门的M个输入分别取反,只不过由于路径延迟导致取反效果的时间不同罢了,因此可以分为下面三种情况讨论。

(1)M个输入全部由0变为1

如果是与门,那么其输出初识值应该为0,等到所有输入都从0变为1后,输出才变为1,而在此期间,输出保持0不变。

如果是或门,那么其输出初始值应该为0,当最快的一个输入端完成翻转后,其输出变为1,并在其他输入端陆续完成从0到1的翻转期间保持输出1不变。

可见,M个输入全部从0变为1,不会导致半开关的输出出现问题。

(2)M个输入全部由1变为0

如果是与门,输出的初始值应该是1,当最快的输入完成翻转后,输出变为0,并在其他输入端陆续完成从1到0的翻转时保持不变。

如果是或门,输入的初始值也该为1,当所有的输入完成从1到0的翻转后,输出变为0.

可见,这种情况下,即M个输入全部从1变为0,也不会导致半开关的输出出现问题。

(3)M个输入由部分0,部分1变为部分1,部分0

如果是与门,那么其输出初始值应该是0,而其后的输出也应该是0,而在变化的过程中,如果要导致输出出现异常,当且仅当所有的由0到1的翻转发生在有1到0的翻转之前,这样就会出现短暂的逻辑1.

如果是或门,那么其输出初始值应该是1,而其后的输出也应该是1,而在变化的过程中,如果要导致输出出现异常,当且仅当所有的由1变为0的翻转发生在由0变为1的翻转之前,这样会出现短暂的逻辑0.

综上,如果组合逻辑在某一个时刻对于端口A存在竞争,若这种竞争可能导致险象,那么肯定具有这样的特征,即其化简后的电路中的半开关同时具有连接到A和\bar{A }的输入管脚。当然了,这里只是说,如此的特征可能会导致险象,到底会不会,多半要取决于布局布线器的工作。

有用的结论:

对于那些化简后仅有一个半开关的电路,可以通过进一步判断是否满足如下条件来确定是否一定会发生险象:

如果是与门半开关,且所有的由0到1的翻转发生在由1到0的翻转之前,则一定会发生险象。

如果是或门半开关,且所有的由1到0的翻转发生在由0到1的翻转之前,则一定会发生险象。

因此,我们可以得出一个有用的结论,即,如果这仅有的一个半开关是两输入半开关,那么险象一定会发生,因为输入端A从1变为0和从0变为1,必然对应着1到0的翻转先发生,或0到1的翻转先发生,因此,无论是与门半开关还是或门半开关,A都会存在一种变化使得险象发生。


而对于那些化简后对应着多个半开关的电路,由于其内部存在着半开关的级联,所以要判断是否一定发生险象会麻烦得多,需要具体问题具体分析,因为你首先至少找到那些输出具有险象的半开关,然后还要判断其输出险象会被后续半开关阻塞,缩小,传递还是放大。

这些问题,后续博文讨论。