竞争冒险

   
什么是竞争和冒险:  

  逻辑表达式形如: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

Popular posts from this blog

托福 TPO词汇题汇总

浮点数

缓存