竞争与冒险是逻辑门因输入端的竞争而导致输出产生不应有的尖峰干扰脉冲(又称过渡干扰脉冲)的现象。在门电路中,**两个输入信号同时向两个相反方向的逻辑状态转换,即一个从低电平变为高电平,一个从高电平变为低电平,或反之,称为竞争。**由于竞争而在电路的输出端可能产生尖峰脉冲的现象称为冒险。竞争不一定会产生冒险,但冒险就一定有竞争。
判断是否存在竞争常见的方法就是判断逻辑门的输出端的状态函数在一定的条件下能够简化为A与非A的相乘或相加,则电路存在竞争现象。
消除竞争冒险的方法常见有4种:
1)修改逻辑设计,这主要包括去除互补逻辑变量和增加冗余项。
2)输出端并联电容,这主要利用了电容的充放电特性,对毛刺滤波,对窄脉冲起到平波的作用。
3)利用格雷码每次只有一位跳变,消除了竞争冒险产生的条件。
4)利用D触发器对毛刺不敏感的特性。
在Verilog编程时,需要注意以下几方面,在绝大多数情况下可避免综合后仿真出现冒险问题。
1)时序电路建模时,用非阻塞赋值。
2)锁存器电路建模时,用非阻塞赋值。
3)用always和组合逻辑建模时,用阻塞赋值。
4)在同一个always块中建立时序和组合逻辑模型时,用非阻塞赋值。
5)在同一个always块中不要既使用阻塞赋值又使用非阻塞赋值。
6)不要在多个always块中为同一个变量赋值。
避免在综合时引入锁存器的注意点包括:
1)组合电路的每一个if-else语句要完整,即每一个if要对应一个else,时序电路if语句不完整不会出现锁存器问题。
2)case语句要完整,即每一个case语句对应一个default。
本文为CSDN博主「yc2020021699」的原创文章
原文链接:https://blog.csdn.net/yc16032399/article/details/100126361