竞争冒险
什么是竞争和冒险:
逻辑表达式形如:f=ac'+bc会引发static harzard,简单理解:
c经过非门时会有一定的延迟,所以在比如A=1,B=1时,C从1切换至0,由于延迟,ac'从0变成1的时间会滞后,所以会有一小短时间ac'=0,而bc同样等于0,所以此时逻辑电路的结果会短暂为0。 以上描述的情况中,ac'和bc改变数据的时刻有差距,这种情况被称为竞争,而最终导致的错误结果则被称为冒险(hazard),有冒险的发生必定有竞争的发生,但是有竞争未必有冒险,比如将上述表达式改为ac'*bc,那么即便有竞争时两个0的情况,也不会影响最终的输出。
判定是否会发生竞争的办法:
若表达式为长且复杂,则用K-map去看各表达式元素之间是否有接触,或者说是否有相邻的表达式,若有则有可能发生static harzard。
解决方法:
将Kmap中表达式接触的边缘覆盖,添加多余项。
这个方法的本质是,竞争的发生时刻,比如上式中,当A=B=1时,表达式实际结果等效为f=C+C', 那么当C翻转时,自然会因为Inverter的延迟而发生竞争。增加冗余项后如: 表达式变为
f=ac'+bc+ab ,那么当a=b=1时,表达式仍有ab子项制衡结果,来保持结果不会因为C的值而受影响。
Comments
Post a Comment